public void ControllPoweruppLife(GameTime timer) { List <int> balls = ComponentManager.Instance.GetAllEntitiesWithComponentType <BallOfSpikesPowerUpComponent>(); if (balls != null) { foreach (var ball in balls) { BallOfSpikesPowerUpComponent b = ComponentManager.Instance.GetEntityComponent <BallOfSpikesPowerUpComponent>(ball); double test = b.lifeTime - timer.ElapsedGameTime.TotalSeconds; if (test <= 0) { DrawableComponent newDraw = ComponentManager.Instance.GetEntityComponent <DrawableComponent>(ball); BallOfSpikesPowerUpComponent pow = ComponentManager.Instance.GetEntityComponent <BallOfSpikesPowerUpComponent>(ball); newDraw.texture = b.prevTexture; if (b.anime != null) { ComponentManager.Instance.AddComponentToEntity(ball, b.anime); } ComponentManager.Instance.RemoveComponentFromEntity(ball, b); } b.lifeTime = test; } } }
/// <summary> /// Creates Power Upp component and adds it to an entity /// </summary> /// <param name="id"></param> public void OnPowerUpPicup(int id) { BallOfSpikesPowerUpComponent temp = ComponentManager.Instance.GetEntityComponent <BallOfSpikesPowerUpComponent>(id); if (temp == null) { ComponentManager test = ComponentManager.Instance; BallOfSpikesPowerUpComponent ball = new BallOfSpikesPowerUpComponent(5); DrawableComponent newDraw = test.GetEntityComponent <DrawableComponent>(id); AnimationComponent anima = test.GetEntityComponent <AnimationComponent>(id); ball.prevTexture = newDraw.texture; newDraw.texture = ball.SpikeTexture; if (anima != null) { ball.anime = anima; ComponentManager.Instance.RemoveComponentFromEntity(id, anima); } test.AddComponentToEntity(id, ball); CollisionRectangleComponent rec = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(id); PositionComponent pos = ComponentManager.Instance.GetEntityComponent <PositionComponent>(id); rec.CollisionRec = new Rectangle((int)pos.position.X, (int)pos.position.Y, newDraw.texture.Width, newDraw.texture.Height); rec.CollisionRec.X = (int)pos.position.X; rec.CollisionRec.Y = (int)pos.position.Y; rec.CollisionRec.Width = newDraw.texture.Width; rec.CollisionRec.Height = newDraw.texture.Height; } else { temp.lifeTime += 10; } }
/// <summary> /// A method for handling player versus player collision /// </summary> /// <param name="ent1"> ID of entity 1 </param> /// <param name="ent2"> ID of entity 2 </param> /// <param name="gt"></param> private void PlayerVsPlayerCollision(int ent1, int ent2, GameTime gt) { PlayerComponent pcp1 = ComponentManager.Instance.GetEntityComponent <PlayerComponent>(ent1); PlayerComponent pcp2 = ComponentManager.Instance.GetEntityComponent <PlayerComponent>(ent2); PositionComponent pos1 = ComponentManager.Instance.GetEntityComponent <PositionComponent>(ent1); PositionComponent pos2 = ComponentManager.Instance.GetEntityComponent <PositionComponent>(ent2); CollisionRectangleComponent crc1 = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(ent1); CollisionRectangleComponent crc2 = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(ent2); DirectionComponent dcp1 = ComponentManager.Instance.GetEntityComponent <DirectionComponent>(ent1); DirectionComponent dcp2 = ComponentManager.Instance.GetEntityComponent <DirectionComponent>(ent2); VelocityComponent vcp1 = ComponentManager.Instance.GetEntityComponent <VelocityComponent>(ent1); VelocityComponent vcp2 = ComponentManager.Instance.GetEntityComponent <VelocityComponent>(ent2); BallOfSpikesPowerUpComponent bspc1 = ComponentManager.Instance.GetEntityComponent <BallOfSpikesPowerUpComponent>(ent1); BallOfSpikesPowerUpComponent bspc2 = ComponentManager.Instance.GetEntityComponent <BallOfSpikesPowerUpComponent>(ent2); if (pos1.position.Y + crc1.CollisionRec.Height * 0.5f < pos2.position.Y) { // entity 1 is above entity 2 if (!pcp1.isFalling && !pcp2.isFalling) { if (dcp2.directio != Direction.Still) { changeDir(dcp2); dcp2.preDir = dcp2.directio; dcp2.directio = Direction.Still; } vcp2.velocity.Y = 0; vcp1.velocity.Y = -200f; ComponentManager.Instance.AddComponentToEntity(ent2, new SoundEffectComponent("hit")); ComponentManager.Instance.AddComponentToEntity(ent1, new SoundEffectComponent("grunt")); //if enitity 2 dosent have ballofspikePUPcomponent loose life if (bspc2 == null) { HealthComponent hc2 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent2); //hc2.health -= 1; pcp2.isFalling = true; } //else if enitity 1 dosent have ballofspikePUPcomponent loose life else if (bspc1 == null) { HealthComponent hc1 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent1); //hc1.health -= 1; pcp1.isFalling = true; } } } else if (pos2.position.Y + crc2.CollisionRec.Height * 0.5f < pos1.position.Y) { // entity 2 is above entity 1 if (!pcp1.isFalling && !pcp2.isFalling) { if (dcp1.directio != Direction.Still) { changeDir(dcp1); dcp1.preDir = dcp1.directio; dcp1.directio = Direction.Still; } vcp1.velocity.Y = 0; vcp2.velocity.Y = -200f; ComponentManager.Instance.AddComponentToEntity(ent1, new SoundEffectComponent("hit")); ComponentManager.Instance.AddComponentToEntity(ent2, new SoundEffectComponent("grunt")); //if enitity 1 dosent have ballofspikePUPcomponent loose life if (bspc1 == null) { HealthComponent hc1 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent1); //hc1.health -= 1; pcp1.isFalling = true; } //else if enitity 2 dosent have ballofspikePUPcomponent loose life else if (bspc2 == null) { HealthComponent hc2 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent2); //hc2.health -= 1; pcp2.isFalling = true; } } } else // both are on the same "level" { if (!pcp2.isFalling && !pcp1.isFalling) { if (dcp1.directio != Direction.Still) { changeDir(dcp1); dcp1.preDir = dcp1.directio; dcp1.directio = Direction.Still; } vcp1.velocity.Y = 0; if (dcp2.directio != Direction.Still) { changeDir(dcp2); dcp2.preDir = dcp2.directio; dcp2.directio = Direction.Still; } vcp2.velocity.Y = 0; ComponentManager.Instance.AddComponentToEntity(ent2, new SoundEffectComponent("sidehit")); ComponentManager.Instance.AddComponentToEntity(ent1, new SoundEffectComponent("sidehit")); //If enitity 1 dosent have ballofspikePUPcomponent loose life if (bspc1 == null) { HealthComponent hc1 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent1); //hc1.health -= 1; pcp1.isFalling = true; } //If enitity 2 dosent have ballofspikePUPcomponent loose life if (bspc2 == null) { HealthComponent hc2 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent2); //hc2.health -= 1; pcp2.isFalling = true; } pushAway(ent1, ent2, gt); } } }