public AirplanesManager(Level pLevel, EnemiesSoundManager pEnemiesSoundManager) : base(false)
        {
            _level = pLevel;
            _enemiesSoundManager = pEnemiesSoundManager;

            _map = _level.Map;

            _airplanesPool = new Airplane[20];

            for (int i = 0; i < _airplanesPool.Length; i++)
            {
                var airplane = new Airplane();

                airplane.OnUpdateListeners =
                    airplane.OnUpdateListeners.Concat(new IOnUpdateListener[] { _enemiesSoundManager }).ToArray();

                _level.AddChild(airplane);

                _firstAirplaneIndex = airplane.Index;

                airplane.SetActive(false);

                _airplanesPool[i] = airplane;
            }

            _airplanesMap = new Dictionary <Airplane, TiledObject>();
        }
示例#2
0
        public void SpawnHunters()
        {
            //Load Hunters
            var huntersObjects = _level.Map.ObjectGroup.Objects.Where(o => o.Name.StartsWith("hunter")).ToArray();

            for (int i = 0; i < huntersObjects.Length; i++)
            {
                var hunterData = huntersObjects[i];

                float sightSpeed = hunterData.GetFloatProperty("sight_speed", 200);

                var hunter = new HunterGameObject(hunterData.X, hunterData.Y, hunterData.Width, hunterData.Height,
                                                  sightSpeed);

                hunter.HunterBehaviorListeners =
                    hunter.HunterBehaviorListeners.Concat(new IHunterBehaviorListener[] { this }).ToArray();

                _hunters.Add(hunter);

                _level.AddChild(hunter);
            }

            for (int i = _hunters.Count() - 1; i > -1; i--)
            {
                if (_hunters[i].Destroyed)
                {
                    _hunters.RemoveAt(i);
                }
            }
        }
示例#3
0
        public void SpawnDrones()
        {
            //Load Drones
            var droneObjects = _level.Map.ObjectGroup.Objects.Where(o => o.Name.StartsWith("drone")).ToArray();

            for (int i = 0; i < droneObjects.Length; i++)
            {
                var droneData = droneObjects[i];

                float droneSpeed = droneData.GetFloatProperty("speed", 100);

                var drone = new DroneGameObject(droneData.X, droneData.Y, droneData.Width, droneData.Height, droneSpeed,
                                                droneData.rotation);

                drone.DroneBehaviorListener = this;
                drone.OnUpdateListeners     = drone.OnUpdateListeners.Concat(new IOnUpdateListener[] { _enemiesSoundManager }).ToArray();

                _drones.Add(drone);

                _level.AddChild(drone);
            }

            for (int i = _drones.Count() - 1; i > -1; i--)
            {
                if (_drones[i].Destroyed)
                {
                    _drones.RemoveAt(i);
                }
            }

            Console.WriteLine($"{this}: drone count: {droneObjects.Length}");
        }
示例#4
0
        public Player(Level level, float SpawnX, float SpawnY) : base("Sprites/PlayerSheet.png", 5, 9, -1)
        {
            _position = Vec2.zero;
            _velocity = Vec2.zero;
            _gravity  = Vec2.zero;

            this.SetOrigin(width / 2, height);
            currentShape = Shape.Human;
            shapeEvent(Shape.Human);
            _level = level;

            _hitbox = new Hitbox(this, SpawnX, SpawnY);
            _level.AddChild(_hitbox);
        }
示例#5
0
        public HunterBulletManager(Level pLevel) : base(false)
        {
            _level       = pLevel;
            _bulletsPool = new HunterBullet[10];

            for (int i = 0; i < _bulletsPool.Length; i++)
            {
                var bullet = new HunterBullet();
                _level.AddChild(bullet);
                bullet.SetActive(false);

                _bulletsPool[i] = bullet;
            }

            CoroutineManager.StartCoroutine(WaitForPlayerData(), this);
        }
示例#6
0
        private IEnumerator WaitToStartTimeCounter()
        {
            SoundManager.Instance.PlayMusic(2, 0.014f);

            yield return(new WaitForMilliSeconds(2000));

            _levelTimeToDelivery = _level.CurrentDeliveryPoint.Timer;

            _timerToDeliveryStarts = true;

            var playerInput = new PlayerInput();

            _level.AddChild(playerInput);

            _level.Stork.StorkInput = playerInput;

            HUD.Instance.ArrowToObjective.Target       = _level.CurrentDeliveryPoint;
            HUD.Instance.ArrowToObjective.TargetOrigin = _level.Stork;
            HUD.Instance.ArrowToObjective.Cam          = MyGame.ThisInstance.Camera;
            HUD.Instance.ArrowToObjective.Enabled      = true;
        }
示例#7
0
        public void SpawnTornado(TiledObject tornadoData)
        {
            int   throwAngleMin = tornadoData.GetIntProperty("throw_angle_min", 0);
            int   throwAngleMax = tornadoData.GetIntProperty("throw_angle_max", 359);
            float throwDistance = tornadoData.GetFloatProperty("throw_distance", 512);

            var tornado = new TornadoGameObject(tornadoData.X, tornadoData.Y, tornadoData.Width, tornadoData.Height, throwAngleMin, throwAngleMax, throwDistance);

            tornado.OnUpdateListeners = tornado.OnUpdateListeners.Concat(new IOnUpdateListener[] { _enemiesSoundManager })
                                        .ToArray();

            CoroutineManager.StartCoroutine(WaitForTargetBeenSetInLevel(tornado), this);

            string idString = tornadoData.Name.Replace("tornado ", "");

            if (int.TryParse(idString, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id))
            {
                //Check if has path
                var pathObj = _level.Map.ObjectGroup.Objects.FirstOrDefault(ob => ob.Name == $"path tornado {id}");
                if (pathObj != null && pathObj.polygons?.Length == 1)
                {
                    var pathPos = new Vector2(pathObj.X, pathObj.Y);

                    //Get points
                    var pts = pathObj.polygons[0].points.Select(pt => pt + pathPos).ToArray();

                    if (pts.Length > 0)
                    {
                        tornado.Path = pts;
                    }
                }
            }

            _level.AddChild(tornado);

            _tornadosList.Add(tornado);
        }
示例#8
0
        void Update()
        {
            PlayerPosX = this.x;

            _timer       = _timer - 1;
            _crouchTimer = _crouchTimer - 1;

            if (_timer <= 0)
            {
                _timer = 0;
            }

            if (_crouchTimer <= 0)
            {
                _crouchTimer = 0;
                scaleY       = 0.2f;
            }

            if (Input.GetKey(Key.D))
            {
                speedX = speedX + 2;
                state  = 1;
                Mirror(true, false);
            }

            if (Input.GetKeyDown(Key.S) && _crouchTimer == 0)
            {
                scaleY       = scaleY * (0.5f);
                _crouchTimer = 50;
            }

            if (Input.GetKey(Key.A))
            {
                speedX = speedX - 2;
                state  = 2;
                Mirror(false, false);
            }

            if (Input.GetKeyDown(Key.SPACE) && _canJump == true)
            {
                speedY   = speedY - 70;
                _canJump = false;
                _timer   = 20;
            }

            if (Input.GetKeyDown(Key.LEFT_SHIFT))
            {
                Bullet bullet = new Bullet(x, y - height * 0.6f, state);
                _level.AddChild(bullet);
            }

            if (Input.GetKeyDown(Key.F))
            {
                Dynamite dynamite = new Dynamite(x, y - height * 0.2f);
                _level.AddChild(dynamite);
            }
            //if (Input.GetKey(Key.SPACE) && _timer >= 0)
            //{
            //speedY = speedY * 1.1f;
            //speedY += 1f;
            //}


            speedX = speedX * 0.8f;
            speedY = speedY * 0.9f;

            _LastY = y;

            y = y + speedY;
            x = x + speedX;

            y = y * _gravity;
        }
示例#9
0
        private void handleInputHuman()
        {
            if (!Input.GetKey(Key.LEFT_SHIFT))
            {
                if ((Input.GetKeyDown(Key.W)) && _landed == true)
                {
                    _velocity.y -= _jump;
                    _landed      = false;
                }

                if (Input.GetKey(Key.A))
                {
                    _velocity.x = Utils.Clamp(_velocity.x - _speed, -5 - _topSpeed, 5 + _topSpeed);
                    this.Mirror(true, false);
                    left = true;
                    walkAnimationHuman();
                }

                if (Input.GetKey(Key.D))
                {
                    _velocity.x = Utils.Clamp(_velocity.x + _speed, -5 - _topSpeed, 5 + _topSpeed);
                    this.Mirror(false, false);
                    left = false;
                    walkAnimationHuman();
                }

                if ((!Input.GetKey(Key.A)) && (!Input.GetKey(Key.D)) && (!Input.GetKey(Key.W)) && (!Input.GetKey(Key.SPACE)) && _attackAnimation == false)
                {
                    idleTimer++;
                    if (idleTimer > 10)
                    {
                        idleHuman();
                    }
                }
                else
                {
                    idleTimer = 0;
                }

                if ((Input.GetKeyDown(Key.SPACE)) && _cooldown == 0)
                {
                    Projectile fireball = new Projectile(this);
                    _backgroundChanel        = _backgroundMusic.Play();
                    _backgroundChanel.Volume = 0.5f;
                    _level.AddChild(fireball);

                    _cooldown = 120;

                    if ((!Input.GetKey(Key.A)) && (!Input.GetKey(Key.D)))
                    {
                        _attackAnimation = true;
                    }
                }
                else
                {
                    if (_cooldown != 0)
                    {
                        _cooldown--;
                    }
                }

                if (_attackAnimation == true)
                {
                    if ((!Input.GetKey(Key.A)) && (!Input.GetKey(Key.D)))
                    {
                        HumanAttack();
                    }
                }
            }
        }
示例#10
0
        public void SpawnClouds()
        {
            var cloudsTileArray     = _map.GetCloudsTileArray();
            var cloudsLayerFirstGid = _map.MapData.TileSets.FirstOrDefault(ts => ts.Name == "Clouds Tileset").FirstGId;

            for (int col = 0; col < cloudsTileArray.GetLength(0); col++)
            {
                for (int row = 0; row < cloudsTileArray.GetLength(1); row++)
                {
                    CloudGameObject cloud;
                    var             tile = cloudsTileArray[col, row] - cloudsLayerFirstGid;

                    if (tile == 20 || tile == 50)
                    {
                        //Instantiate a horizontal cloud
                        cloud = new CloudGameObject(MRandom.Range(-1, 1));
                        _level.AddChild(cloud);

                        float px = (col) * _map.MapData.TileWidth;
                        float py = (row) * _map.MapData.TileHeight;

                        cloud.SetXY(px, py);

                        if (tile == 50)
                        {
                            cloud.SetXY(px + _map.MapData.TileWidth, py);
                            cloud.Turn(90);
                        }

                        _clouds.Add(cloud);
                    }

                    //Check if a cloud is incorrectly drew in Tiled and than "ERASE" the tile,
                    //a cloud need the "pivot" tile (20 for horizontal clouds, 50 for vertical clouds)
                    //Ugly solution, hard coded

                    int tileCheck;
                    if (tile >= 21 && tile <= 24)
                    {
                        int gap = tile - 20;

                        if (gap > -1)
                        {
                            tileCheck = cloudsTileArray[col - gap, row] - cloudsLayerFirstGid;
                            if (tileCheck != 20)
                            {
                                _map.SetCloudsTileArray(col, row, 0);
                                Console.WriteLine($"{this}: {col}|{row} cloud tile erased for 21");
                            }
                        }
                    }
                    else if (tile >= 36 && tile <= 40)
                    {
                        int gapX = tile - 36;
                        int gapY = 1;

                        if (gapX > -1 && gapY > -1)
                        {
                            tileCheck = cloudsTileArray[col - gapX, row - gapY] - cloudsLayerFirstGid;
                            if (tileCheck != 20)
                            {
                                _map.SetCloudsTileArray(col, row, 0);
                                Console.WriteLine($"{this}: {col}|{row} cloud tile erased for 37");
                            }
                        }
                    }
                    else if (tile == 49)
                    {
                        int gapX = 50 - tile;
                        if (gapX < _map.MapData.Height)
                        {
                            tileCheck = cloudsTileArray[col + gapX, row] - cloudsLayerFirstGid;
                            if (tileCheck != 50)
                            {
                                _map.SetCloudsTileArray(col, row, 0);
                                Console.WriteLine($"{this}: {col}|{row} cloud tile erased for 50");
                            }
                        }
                    }
                    else if (tile >= 65 && tile <= 66)
                    {
                        int gapX = 66 - tile;
                        int gapY = 1;

                        if (gapX < _map.MapData.Height && gapY > -1)
                        {
                            tileCheck = cloudsTileArray[col + gapX, row - gapY] - cloudsLayerFirstGid;
                            if (tileCheck != 50)
                            {
                                _map.SetCloudsTileArray(col, row, 0);
                                Console.WriteLine($"{this}: {col}|{row} cloud tile erased for 50, 65");
                            }
                        }
                    }
                    else if (tile >= 81 && tile <= 82)
                    {
                        int gapX = 82 - tile;
                        int gapY = 2;

                        if (gapX < _map.MapData.Height && gapY > -1)
                        {
                            tileCheck = cloudsTileArray[col + gapX, row - gapY] - cloudsLayerFirstGid;
                            if (tileCheck != 50)
                            {
                                _map.SetCloudsTileArray(col, row, 0);
                                Console.WriteLine($"{this}: {col}|{row} cloud tile erased for 50, 81");
                            }
                        }
                    }
                    else if (tile >= 97 && tile <= 98)
                    {
                        int gapX = 98 - tile;
                        int gapY = 3;

                        if (gapX < _map.MapData.Height && gapY > -1)
                        {
                            tileCheck = cloudsTileArray[col + gapX, row - gapY] - cloudsLayerFirstGid;
                            if (tileCheck != 50)
                            {
                                _map.SetCloudsTileArray(col, row, 0);
                                Console.WriteLine($"{this}: {col}|{row} cloud tile erased for 50, 97");
                            }
                        }
                    }
                    else if (tile >= 113 && tile <= 114)
                    {
                        int gapX = 114 - tile;
                        int gapY = 4;

                        if (gapX < _map.MapData.Height && gapY > -1)
                        {
                            tileCheck = cloudsTileArray[col + gapX, row - gapY] - cloudsLayerFirstGid;
                            if (tileCheck != 49)
                            {
                                _map.SetCloudsTileArray(col, row, 0);
                                Console.WriteLine($"{this}: {col}|{row} cloud tile erased for 50, 113");
                            }
                        }
                    }
                }
            }
        }