コード例 #1
0
        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;
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        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>();
                }
            }
        }
コード例 #3
0
        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;
                    }
                }
            }
        }
コード例 #4
0
ファイル: HealCard.cs プロジェクト: Wekaj/VoidGate
        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;
                    }
                }
            }
        }
コード例 #5
0
ファイル: ChargeCard.cs プロジェクト: Wekaj/VoidGate
        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));
                    }
                }
            }
        }
コード例 #6
0
        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;
                    }
                }
            }
        }
コード例 #7
0
ファイル: LionCard.cs プロジェクト: Wekaj/VoidGate
        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));
                    }
                }
            }
        }
コード例 #8
0
 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++;
             }
         }
     }
 }
コード例 #9
0
ファイル: MinionDrawSystem.cs プロジェクト: Wekaj/VoidGate
        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);
        }
コード例 #10
0
        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;
                    }
                }
            }
        }
コード例 #11
0
        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;
                        }
                    }
                }
            }
        }
コード例 #12
0
        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--;
                }
            }
        }
コード例 #13
0
ファイル: MinionSystem.cs プロジェクト: Wekaj/BoilerMan
        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;
            }
        }