예제 #1
0
파일: Ai.cs 프로젝트: Rn4rc1s0/FPS_Project
    void Act(float delta)
    {
        if (target == null)
        {
            Wander(delta);
            return;
        }

        Vector3 targetPos = target.Translation;

        if (!AimingAt(targetPos))
        {
            Pursue(delta);
            return;
        }

        actor.Use(Item.Uses.A);

        IHasAmmo ammoHaver = actor.PrimaryItem() as IHasAmmo;

        if (ammoHaver != null)
        {
            ManageAmmo(ammoHaver);
        }
    }
예제 #2
0
    private void Reload()
    {
        int needed = maxAmmo - inventory.ItemCount();

        if (needed == 0 || wielder == null)
        {
            return;
        }

        IHasAmmo ammoHolder = wielder as IHasAmmo;

        if (ammoHolder == null)
        {
            return;
        }

        if (ammoHolder.CheckAmmo(ammoType, 1) == 0)
        {
            return;
        }

        speaker.PlayEffect(Sound.Effects.RifleReload);
        List <ItemData> receivedAmmo = ammoHolder.RequestAmmo(ammoType, needed);

        foreach (ItemData ammo in receivedAmmo)
        {
            inventory.StoreItemData(ammo);
        }
    }
예제 #3
0
    private void Reload()
    {
        List <ItemData> receivedAmmo = new List <ItemData>();

        if (!ReloadNeeded())
        {
            return;
        }

        IHasAmmo ammoHolder = wielder as IHasAmmo;

        if (ammoHolder != null)
        {
            receivedAmmo = ammoHolder.RequestAmmo(ammoType, ReloadAmmoNeeded());
        }

        if (receivedAmmo.Count == 0)
        {
            receivedAmmo = RequestReserveAmmo(ReloadAmmoNeeded());
        }

        if (receivedAmmo.Count == 0)
        {
            return;
        }

        foreach (ItemData ammo in receivedAmmo)
        {
            inventory.StoreItemData(ammo);
        }
    }
예제 #4
0
    private void Reload()
    {
        int needed = maxAmmo - ammo;

        if (needed == 0 || wielder == null)
        {
            return;
        }

        IHasAmmo ammoHolder = wielder as IHasAmmo;

        if (ammoHolder == null)
        {
            return;
        }

        if (ammoHolder.CheckAmmo(ammoType, 1) == 0)
        {
            return;
        }

        speaker.PlayEffect(Sound.Effects.RifleReload);
        int receivedAmmo = ammoHolder.RequestAmmo(ammoType, needed);

        StoreAmmo(ammoType, receivedAmmo);
    }
예제 #5
0
    public override void Unequip()
    {
        IHasAmmo ammoHolder = wielder as IHasAmmo;

        if (ammoHolder != null)
        {
            ammoHolder.StoreAmmo(inventory.RetrieveAllItems());
        }

        ItemBaseUnequip();
    }
예제 #6
0
    public override void ApplyPowerUp(object obj)
    {
        IHasAmmo receiver = obj as IHasAmmo;

        if (receiver == null)
        {
            return;
        }

        receiver.StoreAmmo(ammoType, ammo);
        this.QueueFree();
    }
예제 #7
0
    public override void ApplyPowerUp(object obj)
    {
        IHasAmmo receiver = obj as IHasAmmo;

        if (receiver == null)
        {
            return;
        }

        List <Item> ammoItems = Item.BulkFactory(Item.Types.Ammo, ammo);

        receiver.StoreAmmo(Item.ConvertListToData(ammoItems));
        this.QueueFree();
    }
예제 #8
0
    public override void Equip(object wielder)
    {
        ItemBaseEquip(wielder);
        IHasAmmo ammoHolder = wielder as IHasAmmo;

        if (ammoHolder != null)
        {
            List <ItemData> newAmmo = ammoHolder.RequestAmmo(ammoType, maxAmmo);

            foreach (ItemData ammo in newAmmo)
            {
                inventory.StoreItemData(ammo);
            }
        }
    }
예제 #9
0
    public override string GetInfo()
    {
        string ret = name + "[" + ammo + "/" + maxAmmo;

        if (wielder != null)
        {
            IHasAmmo ammoHolder = wielder as IHasAmmo;
            if (ammoHolder != null)
            {
                ret += "/" + ammoHolder.CheckAmmo(ammoType, -1);
            }
        }
        ret += "]";
        return(ret);
    }
예제 #10
0
    void ManageAmmo(IHasAmmo ammoHaver)
    {
        string[] ammoTypes = ammoHaver.AmmoTypes();
        if (ammoTypes == null || ammoTypes.Length == 0)
        {
            return;
        }

        string ammoType   = ammoTypes[0];
        int    haverCount = ammoHaver.CheckAmmo(ammoType, -1);
        int    actorCount = actor.CheckAmmo(ammoType, -1);

        if (haverCount == 0 && actorCount > 0)
        {
            actor.Use(Item.Uses.D);
        }
    }
예제 #11
0
    public override string GetInfo()
    {
        string ret       = name + "[" + inventory.ItemCount() + "/" + maxAmmo;
        int    ammoTotal = CheckReserveAmmo(ammoType, 0);

        if (wielder != null)
        {
            IHasAmmo ammoHolder = wielder as IHasAmmo;
            if (ammoHolder != null)
            {
                ammoTotal += ammoHolder.CheckAmmo(ammoType, 0);
            }
        }
        ret += "/" + ammoTotal;

        ret += "]";
        return(ret);
    }