Exemplo n.º 1
0
        public override void Update(IList <Entity> entities, double elapsedTime)
        {
            //Entities
            var entitiesToProcess = entities.Where(x => !x.ToRemove && x.HasComponent(4) && ((TypeComponent)x.GetComponent(5)).Type == Enums.EnumTypeEntity.ENEMY);

            var nbEnemies = entitiesToProcess.Count();

            foreach (var e in entitiesToProcess)
            {
                MoveToComponent moveToComponent          = (MoveToComponent)e.GetComponent(4);
                var             transformComponent       = (TransformComponent)e.GetComponent(0);
                var             typeComponent            = (TypeComponent)e.GetComponent(5);
                var             spriteAnimationComponent = (SpriteAnimationComponent)e.GetComponent(2);

                if (moveToComponent.Time < moveToComponent.TimeMax * 1000 || moveToComponent.Repeat)
                {
                    if (moveToComponent.Time >= moveToComponent.TimeMax * 1000 && moveToComponent.Repeat)
                    {
                        moveToComponent.Time = 0;
                    }

                    moveToComponent.Time += elapsedTime;

                    var percent = moveToComponent.Time / (moveToComponent.TimeMax * 1000);

                    var positionX = (int)((moveToComponent.EndX - moveToComponent.StartX) * percent + moveToComponent.StartX);
                    var positionY = (int)((moveToComponent.EndY - moveToComponent.StartY) * percent + moveToComponent.StartY);

                    transformComponent.X = positionX;
                    transformComponent.Y = positionY;
                }
                else if (moveToComponent.Time > moveToComponent.TimeMax * 1000 &&
                         !moveToComponent.Repeat)
                {
                    moveToComponent.EndX   = moveToComponent.StartX;
                    moveToComponent.EndY   = moveToComponent.StartY + 32;
                    moveToComponent.StartX = transformComponent.X;
                    moveToComponent.StartY = transformComponent.Y + 32;
                    moveToComponent.Time   = 0;
                }

                //var percentEnemies = (double)nbEnemies / (double)_startNbEnemies;

                //moveToComponent.TimeMax *= percentEnemies;
                //if (spriteAnimationComponent != null)
                //{
                //    spriteAnimationComponent.IntervalFrameChanged *= percentEnemies;
                //}
            }
        }
        public override void Update(IList <Entity> entities, double elapsedTime)
        {
            //Entities
            var entitiesToProcess = entities.Where(x => !x.ToRemove && x.HasComponent(4));

            foreach (var e in entitiesToProcess)
            {
                MoveToComponent moveToComponent    = (MoveToComponent)e.GetComponent(4);
                var             transformComponent = (TransformComponent)e.GetComponent(0);
                var             typeComponent      = (TypeComponent)e.GetComponent(5);

                if (moveToComponent.Time < moveToComponent.TimeMax * 1000 || moveToComponent.Repeat)
                {
                    if (moveToComponent.Time >= moveToComponent.TimeMax * 1000 && moveToComponent.Repeat)
                    {
                        moveToComponent.Time = 0;
                    }

                    moveToComponent.Time += elapsedTime;

                    var percent = moveToComponent.Time / (moveToComponent.TimeMax * 1000);

                    var positionX = (int)((moveToComponent.EndX - moveToComponent.StartX) * percent + moveToComponent.StartX);
                    var positionY = (int)((moveToComponent.EndY - moveToComponent.StartY) * percent + moveToComponent.StartY);

                    transformComponent.X = positionX;
                    transformComponent.Y = positionY;
                }
                else if (typeComponent.Type == Enums.EnumTypeEntity.ENEMY &&
                         moveToComponent.Time > moveToComponent.TimeMax * 1000 &&
                         !moveToComponent.Repeat)
                {
                    moveToComponent.EndX   = moveToComponent.StartX;
                    moveToComponent.EndY   = moveToComponent.StartY + 32;
                    moveToComponent.StartX = transformComponent.X;
                    moveToComponent.StartY = transformComponent.Y + 32;
                    moveToComponent.Time   = 0;
                }
            }
        }
        public override void Update(IList<Entity> entities, double elapsedTime)
        {
            //Entities
            var shootsToProcess = entities.Where(x => x.HasComponent(4)
            && (((TypeComponent)x.GetComponent(5)).Type == Enums.EnumTypeEntity.SHOOT_ENEMY
            || ((TypeComponent)x.GetComponent(5)).Type == Enums.EnumTypeEntity.SHOOT_PLAYER));

            foreach (var s in shootsToProcess)
            {
                MoveToComponent moveToComponent = (MoveToComponent)s.GetComponent(4);
                var transformComponent = (TransformComponent)s.GetComponent(0);

                if (moveToComponent.Time < moveToComponent.TimeMax * 1000 || moveToComponent.Repeat)
                {
                    if (moveToComponent.Time >= moveToComponent.TimeMax * 1000 && moveToComponent.Repeat)
                    {
                        moveToComponent.Time = 0;
                    }

                    moveToComponent.Time += elapsedTime;

                    var percent = moveToComponent.Time / (moveToComponent.TimeMax * 1000);

                    var positionX = (int)((moveToComponent.EndX - moveToComponent.StartX) * percent + moveToComponent.StartX);
                    var positionY = (int)((moveToComponent.EndY - moveToComponent.StartY) * percent + moveToComponent.StartY);

                    transformComponent.X = positionX;
                    transformComponent.Y = positionY;
                }
                else if(moveToComponent.Time > moveToComponent.TimeMax * 1000
                    && !moveToComponent.Repeat)
                {
                    s.ToRemove = true;
                }
            }
        }
        public override void Update(IList <Entity> entities, double elapsedTime)
        {
            //Entities
            var shootsToProcess = entities.Where(x => !x.ToRemove && x.HasComponent(4) &&
                                                 (((TypeComponent)x.GetComponent(5)).Type == Enums.EnumTypeEntity.SHOOT_ENEMY ||
                                                  ((TypeComponent)x.GetComponent(5)).Type == Enums.EnumTypeEntity.SHOOT_PLAYER));

            var player = entities.Where(x => ((TypeComponent)x.GetComponent(5)).Type == Enums.EnumTypeEntity.PLAYER).First();
            var playerTransformComponent = (TransformComponent)player.GetComponent(0);
            var playerSpriteComponent    = (SpriteComponent)player.GetComponent(1);
            var playerHitBoxComponent    = (HitBoxComponent)player.GetComponent(7);
            var playerLifeComponent      = (LifeComponent)player.GetComponent(8);
            var playerScoreComponent     = (ScoreComponent)player.GetComponent(9);

            var enemies = entities.Where(x => !x.ToRemove && ((TypeComponent)x.GetComponent(5)).Type == Enums.EnumTypeEntity.ENEMY).ToList();

            int enemyKills = 0;

            foreach (var s in shootsToProcess)
            {
                var shootTransformComponent = (TransformComponent)s.GetComponent(0);
                var shootTypeComponent      = (TypeComponent)s.GetComponent(5);

                if (shootTypeComponent.Type == Enums.EnumTypeEntity.SHOOT_PLAYER)
                {
                    foreach (var e in enemies)
                    {
                        var enemyTransformComponent = (TransformComponent)e.GetComponent(0);
                        var enemyHitBoxComponent    = (HitBoxComponent)e.GetComponent(7);
                        var enemyLifeComponent      = (LifeComponent)e.GetComponent(8);
                        var enemyScoreComponent     = (ScoreComponent)e.GetComponent(9);

                        if (enemyTransformComponent.X - enemyHitBoxComponent.Width * 0.5 < shootTransformComponent.X &&
                            enemyTransformComponent.X + enemyHitBoxComponent.Width * 0.5 > shootTransformComponent.X &&
                            enemyTransformComponent.Y - enemyHitBoxComponent.Height * 0.5 < shootTransformComponent.Y &&
                            enemyTransformComponent.Y + enemyHitBoxComponent.Height * 0.5 > shootTransformComponent.Y
                            )
                        {
                            enemyLifeComponent.CurrentLife--;

                            if (enemyLifeComponent.CurrentLife <= 0)
                            {
                                e.ToRemove = true;
                                playerScoreComponent.Score += enemyScoreComponent.Score;
                                enemyKills++;
                            }

                            s.ToRemove = true;

                            break;
                        }
                    }
                }
                else
                {
                    if (playerTransformComponent.X - playerHitBoxComponent.Width * 0.5 < shootTransformComponent.X &&
                        playerTransformComponent.X + playerHitBoxComponent.Width * 0.5 > shootTransformComponent.X &&
                        playerTransformComponent.Y - playerHitBoxComponent.Height * 0.5 < shootTransformComponent.Y &&
                        playerTransformComponent.Y + playerHitBoxComponent.Height * 0.5 > shootTransformComponent.Y
                        )
                    {
                        playerLifeComponent.CurrentLife--;
                        playerSpriteComponent.CurrentIndex = 3 - playerLifeComponent.CurrentLife;

                        if (playerLifeComponent.CurrentLife <= 0)
                        {
                            player.ToRemove = true;
                        }

                        s.ToRemove = true;
                    }
                }
            }

            if (enemyKills > 0)
            {
                foreach (var e in enemies)
                {
                    MoveToComponent moveToComponent          = (MoveToComponent)e.GetComponent(4);
                    var             transformComponent       = (TransformComponent)e.GetComponent(0);
                    var             spriteAnimationComponent = (SpriteAnimationComponent)e.GetComponent(2);

                    var percentEnemies = 1.0 - (enemyKills / 60.0);

                    moveToComponent.TimeMax *= percentEnemies;
                    if (spriteAnimationComponent != null)
                    {
                        spriteAnimationComponent.IntervalFrameChanged *= percentEnemies;
                    }
                }
            }
        }