Beispiel #1
0
        public override void Update()
        {
            bool  found;
            Point pos = Engine.GetMapObjectPosition(this, out found);

            if (found)
            {
                if (AlertMode)
                {
                    Point p = Engine.GetClosestAggressiveAnimalInRange(pos, 5);
                    if (p != null)
                    {
                        MoveTarget      = p;
                        WasChasingEnemy = true;
                    }
                    else
                    {
                        if (WasChasingEnemy)
                        {
                            MoveTarget      = null;
                            WasChasingEnemy = false;
                        }
                    }
                }
                Attack(pos);
                Move(pos);
            }
        }
        public override void Update()
        {
            bool  found;
            Point pos = Engine.GetMapObjectPosition(this, out found);

            if (found)
            {
                if (AlertMode)
                {
                    Point p = Engine.GetClosestInjuredUnitInRange(pos, SightRange);
                    if (p != null)
                    {
                        MoveTarget         = p;
                        WasGoingAfterAUnit = true;
                    }
                    else
                    {
                        if (WasGoingAfterAUnit)
                        {
                            MoveTarget         = null;
                            WasGoingAfterAUnit = false;
                        }
                    }
                }
                Heal(pos);
                Move(pos);
            }
        }
Beispiel #3
0
        public override void Update()
        {
            LifeTime--;
            bool  found;
            Point pos = Engine.GetMapObjectPosition(this, out found);

            if (found)
            {
                Point p = Engine.GetClosestAggressiveAnimalInRange(pos, 10);
                if (p != null)
                {
                    Target = p;
                }
                else
                {
                    Target = new Point(pos.x + 1, pos.y + 1);
                }
                Move(pos);
                Move(pos);
                Hit(pos);
                if (LifeTime <= 0)
                {
                    Engine.DestroyMapObject(this, pos);
                }
            }
        }
Beispiel #4
0
        public override void Update()
        {
            bool  found;
            Point pos = Engine.GetMapObjectPosition(this, out found);

            if (found)
            {
                if (ShootCooldown <= ActualShootCooldown)
                {
                    ActualShootCooldown = 0;
                    Target = Engine.GetClosestAggressiveAnimalInRange(pos, SightRange - 1);

                    if (Target != null)
                    {
                        Engine.Map.GetCellAt(pos.x, pos.y).MapObjects.Add(new Bullet(pos, Target, Damage, 10));
                    }
                }
                else
                {
                    ActualShootCooldown++;
                }
                if (slowNum > 0)
                {
                    Move(pos);
                    slowNum = 0;
                }
                else
                {
                    slowNum++;
                }
            }
        }
Beispiel #5
0
        public override void Update()
        {
            bool  found;
            Point pos = Engine.GetMapObjectPosition(this, out found);

            if (found)
            {
                Move(pos);
                Attack(pos);
            }
        }
        /// <summary>
        /// Every action happens here.
        /// </summary>
        public override void Update()
        {
            bool  found;
            Point pos = Engine.GetMapObjectPosition(this, out found);

            if (found)
            {
                if (Amount == Capacity && (myNextOrder == Order.GoToFood || myNextOrder == Order.GoToWood || myNextOrder == Order.GoToGold))
                {
                    myNextOrder = Order.ReturnResource;
                    if (RememberedReturnTarget == null)
                    {
                        RememberedReturnTarget = Engine.SearchClosestMainHall(pos);
                    }
                }
                if (Amount == 0 && myNextOrder == Order.ReturnResource)
                {
                    switch (CarriedResourceType)
                    {
                    case ResourceType.Gold: myNextOrder = Order.GoToGold; break;

                    case ResourceType.Wood: myNextOrder = Order.GoToWood; break;

                    case ResourceType.Food: myNextOrder = Order.GoToFood; break;
                    }
                }
                switch (myNextOrder)
                {
                case Order.ReturnResource:
                    MoveTarget = RememberedReturnTarget; break;

                case Order.Hunt:
                    bool isDead;
                    MoveTarget = Engine.SearchClosestPeacefulAnimalInRange(pos, SightRange, out isDead);
                    if (isDead)
                    {
                        NextOrder = Order.GoToFood;
                        RememberedGatherTarget = MoveTarget;
                    }
                    break;

                case Order.GoToFood:
                    bool ResourceIsNotValid = true;
                    foreach (MapObject mo in Engine.Map.GetCellAt(RememberedGatherTarget).MapObjects)
                    {
                        if (mo.GetType().IsSubclassOf(typeof(Resource)))
                        {
                            Resource res = (Resource)mo;
                            if (res.Type == ResourceType.Food)
                            {
                                if (mo.GetType().IsSubclassOf(typeof(Animal)))
                                {
                                    Animal animal = (Animal)mo;
                                    if (animal.Dead)
                                    {
                                        ResourceIsNotValid = false;
                                    }
                                }
                                else
                                {
                                    ResourceIsNotValid = false;
                                }
                            }
                        }
                    }
                    if (ResourceIsNotValid)
                    {
                        myNextOrder = Order.Hunt;

                        MoveTarget = Engine.SearchClosestPeacefulAnimalInRange(pos, SightRange, out isDead);
                        if (isDead)
                        {
                            NextOrder = Order.GoToFood;
                            RememberedGatherTarget = MoveTarget;
                        }
                    }
                    MoveTarget = RememberedGatherTarget;
                    break;

                case Order.GoToGold:
                    ResourceIsNotValid = true;
                    foreach (MapObject mo in Engine.Map.GetCellAt(RememberedGatherTarget).MapObjects)
                    {
                        if (mo.GetType().IsSubclassOf(typeof(Resource)))
                        {
                            Resource res = (Resource)mo;
                            if (res.Type == ResourceType.Gold)
                            {
                                ResourceIsNotValid = false;
                            }
                        }
                    }
                    if (ResourceIsNotValid)
                    {
                        RememberedGatherTarget = Engine.SearchClosestResourceInRange(pos, ResourceType.Gold, SightRange);
                    }
                    MoveTarget = RememberedGatherTarget;
                    break;

                case Order.GoToWood:
                    ResourceIsNotValid = true;
                    foreach (MapObject mo in Engine.Map.GetCellAt(RememberedGatherTarget).MapObjects)
                    {
                        if (mo.GetType().IsSubclassOf(typeof(Resource)))
                        {
                            Resource res = (Resource)mo;
                            if (res.Type == ResourceType.Wood)
                            {
                                ResourceIsNotValid = false;
                            }
                        }
                    }
                    if (ResourceIsNotValid)
                    {
                        RememberedGatherTarget = Engine.SearchClosestResourceInRange(pos, ResourceType.Wood, SightRange);
                    }
                    MoveTarget = RememberedGatherTarget;
                    break;
                }


                if (myNextOrder == Order.GoToFood || myNextOrder == Order.GoToGold || myNextOrder == Order.GoToWood)
                {
                    Gather(pos);
                }
                if (myNextOrder == Order.ReturnResource)
                {
                    ReturnResource(pos);
                }
                if (myNextOrder == Order.Build)
                {
                    Build(pos);
                }
                if (myNextOrder == Order.Hunt)
                {
                    Attack(pos);
                }

                Move(pos);
            }
        }