public void NewPositionNotExists_SerializedDeserialized_Success() { var target = ClientTurnDoneTransferMessage.Create(); var parser = TransferMessageParserUtils.FindWriter(target); Assert.IsTrue(parser.IsWritable(target)); var data = parser.Write(target); Console.WriteLine(data); var obj = (ClientTurnDoneTransferMessage)parser.Read(data); Assert.AreEqual(target.UnitActions.Count, obj.UnitActions.Count); }
public ClientTurnDoneTransferMessage GetNextTurn() { var me = FindMe(); var result = ClientTurnDoneTransferMessage.Create(); for (var i = 0; i < me.Units.Count; i++) { var unit = me.Units[i]; if (unit.Hp <= 0) { continue; } Do(unit, me.Units, result); } return(result); }
public void Do(AIPlayerState.UnitSubMessage unit, List <AIPlayerState.UnitSubMessage> units, ClientTurnDoneTransferMessage result) { if (!SearchPoint.ContainsKey(unit.UnitId)) { SearchPoint[unit.UnitId] = null; } if (SearchPoint[unit.UnitId] == null || (SearchPoint[unit.UnitId].X == unit.Position.X && SearchPoint[unit.UnitId].Y == unit.Position.Y)) { SearchPoint[unit.UnitId]?.Free(); var point = AIPoint.Create(); point.X = this.Exit?.X ?? Fate.GlobalFate.NextInt(Regions.GetLength(0)); point.Y = this.Exit?.Y ?? Fate.GlobalFate.NextInt(Regions.GetLength(1)); SearchPoint[unit.UnitId] = point; var pathfind = AStarPathfinder.Search(Pathfinding, new Point(unit.Position.X, unit.Position.Y), new Point(SearchPoint[unit.UnitId].X, SearchPoint[unit.UnitId].Y)); if (pathfind == null) { SearchPoint[unit.UnitId]?.Free(); SearchPoint[unit.UnitId] = null; return; } this.SearchPath[unit.UnitId] = new Queue <Point>(pathfind); } var path = SearchPath[unit.UnitId]; if (path == null || path.Count < 2) { SearchPoint[unit.UnitId]?.Free(); SearchPoint[unit.UnitId] = null; return; } var unitDescription = UnitDesription[unit.UnitId]; var distance = Math.Min(unitDescription.MoveRange, path.Count - 1); Point target = path.Dequeue(); if (target.X != unit.Position.X || target.Y != unit.Position.Y) { SearchPoint[unit.UnitId]?.Free(); SearchPoint[unit.UnitId] = null; return; } for (var j = 0; j < distance - 1; j++) { target = path.Dequeue(); if (Regions[target.X, target.Y] == RegionValue.Wall) { SearchPoint[unit.UnitId]?.Free(); SearchPoint[unit.UnitId] = null; return; } } target = path.Peek(); if (Regions[target.X, target.Y] == RegionValue.Wall) { SearchPoint[unit.UnitId]?.Free(); SearchPoint[unit.UnitId] = null; return; } for (var j = 0; j < units.Count; j++) { if (units[j].UnitId != unit.UnitId && units[j].Position.X == target.X && units[j].Position.Y == target.Y && this.Exit == null) { SearchPoint[unit.UnitId]?.Free(); SearchPoint[unit.UnitId] = null; return; } } result.SetNewPosition(unit.UnitId, target.X, target.Y); if (!unitDescription.AttackFriendlyFire) { result.SetAttackDirection(unit.UnitId, 0, 0); } }