public void March(bool player) { int start = player ? Minions.Length - 2 : 1; int end = player ? -1 : Minions.Length; int direction = player ? -1 : 1; for (int i = start; i != end; i += direction) { if (Minions[i] != null) { MinionComponent minionComponent = Minions[i].GetComponent <MinionComponent>(); if (minionComponent.Player == player) { for (int j = 1; j <= minionComponent.Minion.Initiative && i + direction * -1 * j < Minions.Length && i + direction * -1 * j >= 0; j++) { if (Minions[i + direction * -1 * j] == null) { Minions[i + direction * -1 * j] = Minions[i + direction * -1 * (j - 1)]; Minions[i + direction * -1 * (j - 1)] = null; } else { break; } } } } } }
public override void Process(Entity entity) { MinionComponent minionComponent = entity.GetComponent <MinionComponent>(); PositionComponent positionComponent = entity.GetComponent <PositionComponent>(); if (new Rectangle(positionComponent.Position.ToPoint(), new Point(32, 32)).Intersects(new Rectangle((int)(mouse.State.X / LD34Game.Scale), (int)(mouse.State.Y / LD34Game.Scale), 0, 0))) { if (!entity.HasComponent <CardComponent>()) { entity.AddComponent(new CardComponent(minionComponent.Minion, true, 0f, 0f, new Vector2(-16f, -96f), false, false, 0f)); } CardComponent cardComponent = entity.GetComponent <CardComponent>(); cardComponent.ModifierOpacity += (1f - cardComponent.ModifierOpacity) * 6f * delta; cardComponent.Separation += (1f - cardComponent.Separation) * 12f * delta; if (cardComponent.Separation > 1f) { cardComponent.Separation = 1f; } cardComponent.Opacity += (1f - cardComponent.Opacity) * 12f * delta; cardComponent.Offset += (new Vector2(-16f, -128f) - cardComponent.Offset) * 12f * delta; } else if (entity.HasComponent <CardComponent>()) { CardComponent cardComponent = entity.GetComponent <CardComponent>(); cardComponent.Separation += (0f - cardComponent.Separation) * 12f * delta; cardComponent.Opacity += (0f - cardComponent.Opacity) * 12f * delta; cardComponent.Offset += (new Vector2(-16f, -96f) - cardComponent.Offset) * 12f * delta; if (cardComponent.Opacity < 0.025f) { entity.RemoveComponent <CardComponent>(); } } }
public override void Play(EntityWorld world, bool player) { BoardSystem boardSystem = world.SystemManager.GetSystem <BoardSystem>()[0]; int start = !player ? 0 : boardSystem.Minions.Length - 1; int direction = !player ? 1 : -1; int end = !player ? boardSystem.Minions.Length : -1; for (int i = start; i != end; i += direction) { if (boardSystem.Minions[i] != null) { MinionComponent minionComponent = boardSystem.Minions[i].GetComponent <MinionComponent>(); if (minionComponent.Player == player) { int target = i + direction * -1 * (2 + Power); if (target < boardSystem.Minions.Length && target >= 0 && boardSystem.Minions[target] == null) { boardSystem.Minions[target] = boardSystem.Minions[i]; boardSystem.Minions[i] = null; } break; } } } }
public override void Play(EntityWorld world, bool player) { BoardSystem boardSystem = world.SystemManager.GetSystem <BoardSystem>()[0]; for (int i = 0; i < boardSystem.Minions.Length; i++) { if (boardSystem.Minions[i] != null) { MinionComponent minionComponent = boardSystem.Minions[i].GetComponent <MinionComponent>(); if (minionComponent.Player == player) { minionComponent.Minion.Health += 3 + Power; } } } }
public override void Play(EntityWorld world, bool player) { BoardSystem boardSystem = world.SystemManager.GetSystem <BoardSystem>()[0]; for (int i = 0; i < boardSystem.Minions.Length; i++) { if (boardSystem.Minions[i] != null) { MinionComponent minionComponent = boardSystem.Minions[i].GetComponent <MinionComponent>(); if (minionComponent.Player == player) { minionComponent.Minion.AddInitiativeModifier(new GrowthModifier(3 + Power)); } } } }
public override void Play(EntityWorld world, bool player) { BoardSystem boardSystem = world.SystemManager.GetSystem <BoardSystem>()[0]; for (int i = 0; i < boardSystem.Minions.Length; i++) { if (boardSystem.Minions[i] != null) { MinionComponent minionComponent = boardSystem.Minions[i].GetComponent <MinionComponent>(); if (minionComponent.Minion.Tag == "Demon") { minionComponent.Minion.AddMaxHealthModifier(new GrowthModifier(2 + Power)); minionComponent.Minion.Health += 2 + Power; } } } }
private void LionCardPlayed(object sender, PlayerEventArgs e) { played = true; player = e.Player; BoardSystem boardSystem = world.SystemManager.GetSystem <BoardSystem>()[0]; for (int i = 0; i < boardSystem.Minions.Length; i++) { if (boardSystem.Minions[i] != null) { MinionComponent minionComponent = boardSystem.Minions[i].GetComponent <MinionComponent>(); if (minionComponent.Minion.Tag == "Animal" && minionComponent.Player == player && minionComponent.Minion != this) { minionComponent.Minion.AddInitiativeModifier(new DeathModifier(3, this)); } } } }
public void Attack() { for (int i = 0; i < Minions.Length - 1; i++) { if (Minions[i] != null && Minions[i + 1] != null) { MinionComponent firstMinionComponent = Minions[i].GetComponent <MinionComponent>(); MinionComponent secondMinionComponent = Minions[i + 1].GetComponent <MinionComponent>(); if (firstMinionComponent.Player && !secondMinionComponent.Player) { firstMinionComponent.Minion.AttackOccured(firstMinionComponent.Player, i, i + 1); secondMinionComponent.Minion.AttackOccured(firstMinionComponent.Player, i + 1, i); firstMinionComponent.Minion.Health -= secondMinionComponent.Minion.Attack; secondMinionComponent.Minion.Health -= firstMinionComponent.Minion.Attack; i++; } } } }
public override void Process(Entity entity) { MinionComponent minionComponent = entity.GetComponent <MinionComponent>(); PositionComponent positionComponent = entity.GetComponent <PositionComponent>(); Vector2 position = positionComponent.Position + minionComponent.Minion.PieceOffset; spriteBatch.Draw(minionComponent.Minion.Piece, new Rectangle((int)position.X, (int)position.Y, minionComponent.Minion.Piece.Width, minionComponent.Minion.Piece.Height), null, (minionComponent.Player ? new Color(200, 175, 125) : new Color(150, 150, 200)) * minionComponent.Opacity, 0f, Vector2.Zero, !minionComponent.Player ? SpriteEffects.FlipHorizontally : SpriteEffects.None, 0f); }
public override void Play(EntityWorld world, bool player) { BoardSystem boardSystem = world.SystemManager.GetSystem <BoardSystem>()[0]; int start = player ? 0 : boardSystem.Minions.Length - 1; int direction = player ? 1 : -1; int end = player ? boardSystem.Minions.Length : -1; for (int i = start; i != end; i += direction) { if (boardSystem.Minions[i] != null) { MinionComponent minionComponent = boardSystem.Minions[i].GetComponent <MinionComponent>(); if (minionComponent.Player != player) { minionComponent.Minion.Health -= 2 + Power; break; } } } }
public void MiniMarch(bool player) { int start = player ? Minions.Length - 2 : 1; int end = player ? -1 : Minions.Length; int direction = player ? -1 : 1; for (int i = start; i != end; i += direction) { if (Minions[i] != null) { MinionComponent minionComponent = Minions[i].GetComponent <MinionComponent>(); if (minionComponent.Player == player) { if (Minions[i + direction * -1] == null) { Minions[i + direction * -1] = Minions[i]; Minions[i] = null; } } } } }
public override void ProcessSystem() { float delta = BlackBoard.GetEntry <float>("delta"); if (Minions[0] != null && state == State.None) { if (!Minions[0].GetComponent <MinionComponent>().Player) { state = State.EnemyWon; } } if (Minions[Minions.Length - 1] != null && state == State.None) { if (Minions[Minions.Length - 1].GetComponent <MinionComponent>().Player) { state = State.PlayerWon; } } switch (state) { case State.PlayerWon: if (wonEntity == null) { wonEntity = EntityWorld.CreateEntity(); wonEntity.AddComponent(new PositionComponent(new Vector2((window.Width / LD34Game.Scale) / 2f - won.Width / 2f, (window.Height / LD34Game.Scale) / 2f - 48f - won.Height / 2f))); wonEntity.AddComponent(new SpriteComponent(won, won.Bounds, Color.White, 1f)); } break; case State.EnemyWon: if (lostEntity == null) { lostEntity = EntityWorld.CreateEntity(); lostEntity.AddComponent(new PositionComponent(new Vector2((window.Width / LD34Game.Scale) / 2f - lost.Width / 2f, (window.Height / LD34Game.Scale) / 2f - 48f - lost.Height / 2f))); lostEntity.AddComponent(new SpriteComponent(lost, lost.Bounds, Color.White, 1f)); } break; } if (state != State.None) { if (restartEntity == null) { restartEntity = EntityWorld.CreateEntity(); restartEntity.AddComponent(new PositionComponent(new Vector2((window.Width / LD34Game.Scale) / 2f - restart.Width / 2f, (window.Height / LD34Game.Scale) / 2f + 48f - restart.Height / 2f))); restartEntity.AddComponent(new SpriteComponent(restart, restart.Bounds, Color.White, 1f)); } if (mouse.Left.ToHeld || mouse.Right.ToHeld) { Program.Restart(); } } foreach (Entity tile in tiles) { SpriteComponent spriteComponent = tile.GetComponent <SpriteComponent>(); spriteComponent.Opacity += (1f - spriteComponent.Opacity) * 8f * delta; } for (int i = 0; i < Minions.Length; i++) { Entity minion = Minions[i]; if (minion != null) { PositionComponent positionComponent = minion.GetComponent <PositionComponent>(); Vector2 targetPosition = GetPosition(i); positionComponent.Position += (targetPosition - positionComponent.Position) * 8f * delta; MinionComponent minionComponent = minion.GetComponent <MinionComponent>(); minionComponent.Opacity += (1f - minionComponent.Opacity) * 8f * delta; } } for (int i = 0; i < deadMinions.Count; i++) { MinionComponent minionComponent = deadMinions[i].GetComponent <MinionComponent>(); minionComponent.Opacity += (0f - minionComponent.Opacity) * 8f * delta; if (minionComponent.Opacity <= 0.025f) { deadMinions[i].Delete(); deadMinions.RemoveAt(i); i--; } } }
public override void Process(Entity entity) { PositionComponent positionComponent = entity.GetComponent <PositionComponent>(); ForceComponent forceComponent = entity.GetComponent <ForceComponent>(); ObjectComponent objectComponent = entity.GetComponent <ObjectComponent>(); MinionComponent minionComponent = entity.GetComponent <MinionComponent>(); float speed = _musicBox.IsActive ? 20f : 18f; if (_random.Next(1000) < 100) { minionComponent.Offset = new Vector2(64f * ((float)_random.NextDouble() * 2f - 1f), 64f * ((float)_random.NextDouble() * 2f - 1f)); } if (objectComponent.IsHeld || positionComponent.Depth != 0f) { return; } if (minionComponent.TargetItem != null) { if (minionComponent.TargetItem.DeletingState) { minionComponent.TargetItem = null; } else { PositionComponent itemPositionComponent = minionComponent.TargetItem.GetComponent <PositionComponent>(); if (itemPositionComponent == null || itemPositionComponent.Depth < 0f || itemPositionComponent.Position.Y <= _furnace.Region.Bottom - 4f) { ObjectComponent itemObjectComponent = minionComponent.TargetItem.GetComponent <ObjectComponent>(); if (itemObjectComponent != null) { itemObjectComponent.IsMarked = false; } minionComponent.TargetItem = null; } } } if (minionComponent.TargetItem == null) { float closestDistance = float.MaxValue; Entity closestObject = null; foreach (Entity item in EntityWorld.EntityManager.GetEntities(Aspect.All(typeof(ObjectComponent), typeof(PositionComponent)))) { ObjectComponent itemObjectComponent = item.GetComponent <ObjectComponent>(); if (itemObjectComponent.IsMarked || !WantsItem(itemObjectComponent.Type, minionComponent.Intelligence)) { continue; } PositionComponent itemPositionComponent = item.GetComponent <PositionComponent>(); float checkDistance = 0f; if (minionComponent.Intelligence < 30) { checkDistance = 20f; } if (itemPositionComponent.Depth < 0f || itemPositionComponent.Position.Y <= _furnace.Region.Bottom - checkDistance) { continue; } float distance = (itemPositionComponent.Position - positionComponent.Position).LengthSquared(); if (distance < closestDistance) { closestDistance = distance; closestObject = item; } } minionComponent.TargetItem = closestObject; if (closestObject != null) { ObjectComponent itemObjectComponent = closestObject.GetComponent <ObjectComponent>(); itemObjectComponent.IsMarked = true; } } float safetyDistance = 20f; if (minionComponent.Intelligence > 90) { safetyDistance = 40f; } else if (minionComponent.Intelligence > 80) { safetyDistance = 30f; } if (minionComponent.Intelligence > 50 && (positionComponent.Position.Y <= _furnace.Region.Bottom + safetyDistance && _furnace.Timer > Furnace.ClosedTime - 1f)) { Vector2 target = GetNowhereTarget(minionComponent.Offset, minionComponent.Leftie); forceComponent.Force += Vector2.Normalize(target - positionComponent.Position) * speed; } else if (minionComponent.TargetItem != null) { PositionComponent itemPositionComponent = minionComponent.TargetItem.GetComponent <PositionComponent>(); Vector2 difference = itemPositionComponent.Position - positionComponent.Position; float distance = difference.Length(); if (distance > 32f) { Vector2 target = itemPositionComponent.Position + minionComponent.Offset * Math.Min((distance - 32f) / 100f, 1f); forceComponent.Force += Vector2.Normalize(target - positionComponent.Position) * speed; } else { float xTarget = _furnace.Region.Left + 100f * minionComponent.Tendency; if (positionComponent.Position.X > _furnace.Region.Center.X) { xTarget = _furnace.Region.Right - 100f * minionComponent.Tendency; } float hDir = xTarget - positionComponent.Position.X; forceComponent.Force += new Vector2(hDir / 30f, -speed); ForceComponent itemForceComponent = minionComponent.TargetItem.GetComponent <ForceComponent>(); itemForceComponent.Force += new Vector2(hDir / 30f, -speed); } } else { Vector2 target = GetNowhereTarget(minionComponent.Offset, minionComponent.Leftie); forceComponent.Force += Vector2.Normalize(target - positionComponent.Position) * speed; } }