public void Initialize(TwinStickAcademy academy) { _academy = academy; _spaceship = Instantiate(_shipPrefab, transform, false).GetComponent <ShipAgent>(); _spaceship.transform.localPosition = Vector3.zero; _spaceship.Arena = this; _spaceship.MoveController.GiveBrain(academy._movementBrain); _spaceship.ShootController.GiveBrain(academy._aimBrain); _edgePositions.Add(new Vector3(transform.position.x - SpawnAreaWidth, 0, transform.position.z + SpawnAreaHeight)); _edgePositions.Add(new Vector3(transform.position.x - SpawnAreaWidth, 0, transform.position.z - SpawnAreaHeight)); _edgePositions.Add(new Vector3(transform.position.x + SpawnAreaWidth, 0, transform.position.z + SpawnAreaHeight)); _edgePositions.Add(new Vector3(transform.position.x + SpawnAreaWidth, 0, transform.position.z - SpawnAreaHeight)); }
private void SetLocationByStep(double[] netResult, ShipAgent ship, TargetAgent target) { if (Math.Abs(ship.Location.X - target.Location.X) <= 1 && Math.Abs(ship.Location.Y - target.Location.Y) <= 1) { ship.Location = target.Location; } else { ship.PrevPosition = new Position() { X = ship.Location.X, Y = ship.Location.Y }; int maxNetResultIndex = GetMaxResultIndex(netResult); switch (ship.DirectionToTarget) { case Direction.NW: if (maxNetResultIndex == 0) { ship.Location.X -= 1; } if (maxNetResultIndex == 1) { ship.Location.X -= 1; ship.Location.Y -= 1; } if (maxNetResultIndex == 2) { ship.Location.Y -= 1; } break; case Direction.W: if (maxNetResultIndex == 0) { ship.Location.X -= 1; ship.Location.Y += 1; } if (maxNetResultIndex == 1) { ship.Location.X -= 1; } if (maxNetResultIndex == 2) { ship.Location.X -= 1; ship.Location.Y -= 1; } break; case Direction.SW: if (maxNetResultIndex == 0) { ship.Location.Y += 1; } if (maxNetResultIndex == 1) { ship.Location.X -= 1; ship.Location.Y += 1; } if (maxNetResultIndex == 2) { ship.Location.X -= 1; } break; case Direction.S: if (maxNetResultIndex == 0) { ship.Location.X += 1; ship.Location.Y += 1; } if (maxNetResultIndex == 1) { ship.Location.Y += 1; } if (maxNetResultIndex == 2) { ship.Location.X -= 1; ship.Location.Y += 1; } break; case Direction.SE: if (maxNetResultIndex == 0) { ship.Location.X += 1; } if (maxNetResultIndex == 1) { ship.Location.X += 1; ship.Location.Y += 1; } if (maxNetResultIndex == 2) { ship.Location.Y += 1; } break; case Direction.E: if (maxNetResultIndex == 0) { ship.Location.X += 1; ship.Location.Y -= 1; } if (maxNetResultIndex == 1) { ship.Location.X += 1; } if (maxNetResultIndex == 2) { ship.Location.X += 1; ship.Location.Y += 1; } break; case Direction.NE: if (maxNetResultIndex == 0) { ship.Location.Y -= 1; } if (maxNetResultIndex == 1) { ship.Location.X += 1; ship.Location.Y -= 1; } if (maxNetResultIndex == 2) { ship.Location.X += 1; } break; case Direction.N: default: if (maxNetResultIndex == 0) { ship.Location.X -= 1; ship.Location.Y -= 1; } if (maxNetResultIndex == 1) { ship.Location.Y -= 1; } if (maxNetResultIndex == 2) { ship.Location.X += 1; ship.Location.Y -= 1; } break; } if (_depthsMap.GetLength(0) <= ship.Location.Y || _depthsMap.GetLength(1) <= ship.Location.X || ship.Location.X < 0 || ship.Location.Y < 0) { ship.Location = new Position() { X = ship.PrevPosition.X, Y = ship.PrevPosition.Y }; } } }