private void TryWalkerWalk(int x, int y, BaseEventData data) { if (this.gameFinished) { return; } // TODO: ignore collision between camera and walker if (this.mainWalker.IsWalking()) { return; } int destAddress = y * this.map.width + x; int[] currentFloorTerrain = this.map.terrains[this.CurrentFloor()]; List <int> route = Astar.Exec(this.mainWalker.data.address, destAddress, currentFloorTerrain, this.map.width); List <DirectionUtil.Direction> directions = DirectionUtil.AddressesToDirections(route, this.map.width, this.map.height); this.mainWalker.AppendWalkDirections(directions); switch (Rand.Next(10)) { case 0: this.mainWalker.PlaySe(Audio.GetSE(Audio.SE.Walk1)); break; case 1: this.mainWalker.PlaySe(Audio.GetSE(Audio.SE.Walk2)); break; default: break; } }
private int GetDistance(int origin, int dest) { int[] currentFloorTerrain = this.map.terrains[this.CurrentFloor()]; List <int> route = Astar.Exec(origin, dest, currentFloorTerrain, this.map.width); return(route.Count); }
public static List <int> Exec(int start, int goal, int[] map, int width) { return(Astar.Exec(start, goal, map, width, (int)Math.Ceiling((double)map.Length / (double)width))); }