Core/Misc: Misc fixes

This commit is contained in:
hondacrx
2018-03-21 23:43:28 -04:00
parent 9b2c85950b
commit caa3cfed24
4 changed files with 20 additions and 13 deletions
+4 -3
View File
@@ -19,6 +19,7 @@ using Framework.GameMath;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.Contracts; using System.Diagnostics.Contracts;
using System.Collections.Concurrent;
namespace Game.Collision namespace Game.Collision
{ {
@@ -39,14 +40,14 @@ namespace Game.Collision
Vector3 pos = value.getPosition(); Vector3 pos = value.getPosition();
Node node = getGridFor(pos.X, pos.Y); Node node = getGridFor(pos.X, pos.Y);
node.insert(value); node.insert(value);
memberTable.Add(value, node); memberTable.TryAdd(value, node);
} }
public virtual void remove(T value) public virtual void remove(T value)
{ {
memberTable[value].remove(value); memberTable[value].remove(value);
// Remove the member // Remove the member
memberTable.Remove(value); memberTable.TryRemove(value, out Node node);
} }
public virtual void balance() public virtual void balance()
@@ -205,7 +206,7 @@ namespace Game.Collision
node.intersectRay(ray, intersectCallback, ref max_dist); node.intersectRay(ray, intersectCallback, ref max_dist);
} }
Dictionary<T, Node> memberTable = new Dictionary<T, Node>(); ConcurrentDictionary<T, Node> memberTable = new ConcurrentDictionary<T, Node>();
Node[][] nodes = new Node[CELL_NUMBER][]; Node[][] nodes = new Node[CELL_NUMBER][];
} }
} }
+14
View File
@@ -265,10 +265,14 @@ namespace Game.Entities
if (obj == this) if (obj == this)
return true; return true;
// move arc to range 0.. 2*pi
arc = NormalizeOrientation(arc);
float angle = GetAngle(obj); float angle = GetAngle(obj);
angle -= GetOrientation(); angle -= GetOrientation();
// move angle to range -pi ... +pi // move angle to range -pi ... +pi
angle = NormalizeOrientation(angle);
if (angle > MathFunctions.PI) if (angle > MathFunctions.PI)
angle -= 2.0f * MathFunctions.PI; angle -= 2.0f * MathFunctions.PI;
@@ -276,6 +280,16 @@ namespace Game.Entities
float rborder = (arc / border); // in range 0..pi float rborder = (arc / border); // in range 0..pi
return ((angle >= lborder) && (angle <= rborder)); return ((angle >= lborder) && (angle <= rborder));
} }
public bool HasInLine(Position pos, float width)
{
if (!HasInArc(MathFunctions.PI, pos))
return false;
float angle = GetRelativeAngle(pos);
return Math.Abs(Math.Sin(angle)) * GetExactDist2d(pos.GetPositionX(), pos.GetPositionY()) < width;
}
public void GetSinCos(float x, float y, out float vsin, out float vcos) public void GetSinCos(float x, float y, out float vsin, out float vcos)
{ {
float dx = GetPositionX() - x; float dx = GetPositionX() - x;
@@ -2568,14 +2568,6 @@ namespace Game.Entities
public virtual bool LoadFromDB(ulong guid, Map map) { return true; } public virtual bool LoadFromDB(ulong guid, Map map) { return true; }
//Position //Position
public bool HasInLine(WorldObject target, float width)
{
if (!HasInArc(MathFunctions.PI, target))
return false;
width += target.GetObjectSize();
float angle = GetRelativeAngle(target);
return Math.Abs(Math.Sin(angle)) * GetExactDist2d(target.GetPositionX(), target.GetPositionY()) < width;
}
public float GetDistanceZ(WorldObject obj) public float GetDistanceZ(WorldObject obj)
{ {
+2 -2
View File
@@ -2262,7 +2262,7 @@ namespace Game
modelInfo.BoundingRadius = result.Read<float>(1); modelInfo.BoundingRadius = result.Read<float>(1);
modelInfo.CombatReach = result.Read<float>(2); modelInfo.CombatReach = result.Read<float>(2);
modelInfo.DisplayIdOtherGender = result.Read<uint>(3); modelInfo.DisplayIdOtherGender = result.Read<uint>(3);
modelInfo.gender = (sbyte)creatureDisplay.Gender; modelInfo.gender = creatureDisplay.Gender;
// Checks // Checks
if (modelInfo.gender == (sbyte)Gender.Unknown) if (modelInfo.gender == (sbyte)Gender.Unknown)
@@ -3587,7 +3587,7 @@ namespace Game
return null; return null;
// If a model for another gender exists, 50% chance to use it // If a model for another gender exists, 50% chance to use it
if (modelInfo.DisplayIdOtherGender != 0 && RandomHelper.NextDouble() == 0) if (modelInfo.DisplayIdOtherGender != 0 && RandomHelper.URand(0, 1) == 0)
{ {
CreatureModelInfo minfotmp = GetCreatureModelInfo(modelInfo.DisplayIdOtherGender); CreatureModelInfo minfotmp = GetCreatureModelInfo(modelInfo.DisplayIdOtherGender);
if (minfotmp == null) if (minfotmp == null)