void ISystem.OperateOnEntity(Entity entity)
        {
            EnergyHaver comp = entity.GetComponent <EnergyHaver>();

            comp.Energy += comp.Speed;

            if (comp.Energy >= GameManager.ENERGY_CAP)
            {
                comp.Energy = GameManager.ENERGY_CAP;
            }
        }
예제 #2
0
        void ISystem.OperateOnEntity(Entity e)
        {
            EnergyHaver energyComp = e.GetComponent <EnergyHaver>();
            AI          ai         = e.GetComponent <AI>();

            // keep taking moves until out of energy
            while (energyComp.CanTakeAction())
            {
                // assign a target if needed
                if (ai.Target == null)
                {
                    AssignTarget(e);
                }

                if (ai.State == AIState.Pursuing)
                {
                    Position posComp       = e.GetComponent <Position>();
                    Position targetPosComp = ai.Target.GetComponent <Position>();

                    // if the entity is adjacent to its target
                    if (OrderedPair.Adjacent(posComp.Pos, targetPosComp.Pos))
                    {
                        // attack the target
                        energyComp.Energy -= GameManager.COST_ATTACK;
                        AttackFunctions.BumpAttack(e, ai.Target);
                    }
                    else
                    {
                        // move towards the target
                        energyComp.Energy -= GameManager.COST_MOVE;
                        OrderedPair towards = OrderedPair.Towards(posComp.Pos, targetPosComp.Pos);
                        MoveFunctions.Move(e, posComp.Pos + towards);
                    }

                    continue;
                }

                break;
            }
        }