public Human(HumanType HumanType, Vec2 Position, Vec2 Node) { this.HumanType = HumanType; this.Position = Position; this.Node = Node; this.MovementBehaviour = new UsualMovementBehaviour(); this.DecisionBehaviour = new UsualDecisionBehaviour(); }
public List<Human> GetNearestNeighbour(Vec2 FieldIndex, Vec2 Position) { int[,] leftUp = {{0, -1}, {-1, -1}, {-1, 0}}; int[,] leftDown = {{-1, 0}, {-1, 1}, {0, 1}}; int[,] rightUp = {{0, -1}, {1, -1}, {1, 0}}; int[,] rightDown = {{1, 0}, {1, 1}, {0, 1}}; var leftRight = 0; var upDown = 0; var neighbour = new List<Human>(); if((Position.Xi % this.xTile) > (this.xTile / 2)) { leftRight = 1; } if ((Position.Yi % this.yTile) > (this.yTile / 2)) { upDown = 1; } switch (leftRight) { case 0: { switch (upDown) { case 0: { neighbour.AddRange(this.GetFields(FieldIndex, leftUp)); } break; case 1: { neighbour.AddRange(this.GetFields(FieldIndex, leftDown)); } break; } }break; case 1: { switch (upDown) { case 0: { neighbour.AddRange(this.GetFields(FieldIndex, rightUp)); } break; case 1: { neighbour.AddRange(this.GetFields(FieldIndex, rightDown)); } break; } }break; } neighbour.AddRange(this.humans[FieldIndex.Xi, FieldIndex.Yi]); return neighbour; }
private IEnumerable<Human> GetFields(Vec2 Field, int[,] Offsets) { var neightbour = new List<Human>(); for (int i = 0; i < (Offsets.GetLength(0) - 1); i++) { int x = Field.Xi + Offsets[i, 0]; int y = Field.Yi + Offsets[i, 1]; if (!(x >= 0 && x < XFields)) { continue; } if (!(y >= 0 && y < YFields)) { continue; } neightbour.AddRange(this.humans[x, y]); } return neightbour; }
public static float Dot(Vec2 a, Vec2 b) { return a.X * b.X + a.Y * b.y; }