示例#1
0
    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));
    }
示例#2
0
        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
                    };
                }
            }
        }