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; } } } }