예제 #1
0
    public override void OnInitialize()
    {
        animator = actor.GetComponent <Animator>();

        inventory = (actor.profile as CombatantProfile).inventory as PlayerInventory;

        actor.OnAnimationEvent += (eventTag =>
        {
            switch (eventTag)
            {
            case GameConstants.AE_Reload:

                RangedAdapter adapter = inventory.ActiveEntry.Value.Adapter as RangedAdapter;

                adapter.Reload();

                animator.ResetTrigger(GameConstants.reloadHash);

                TriggerActionCompleted(this);

                break;

            default:

                break;
            }
        });
    }
예제 #2
0
    public override void OnAction()
    {
        RangedWeapon weapon = inventory.ActiveEntry.Value.Item as RangedWeapon;

        RangedAdapter adapter = inventory.ActiveEntry.Value.Adapter as RangedAdapter;

        if (adapter.clipCount + adapter.chamberCount >= weapon.liveBarrel.clipSize + weapon.liveBarrel.chamberSize)
        {
            //Full Clip
            Debug.Log("Full Clip");

            return;
        }

        if (inventory.GetMagazine(weapon.liveBarrel.liveSlug).count <= 0)
        {
            //eMPTY mAG
            Debug.LogError("Empty Magazine");

            return;
        }

        TriggerActionInitiated(this);

        animator.SetTrigger(GameConstants.reloadHash);
    }
예제 #3
0
    /// <summary>
    /// Ranged Attack
    /// </summary>
    /// <param name="weapon">Ranged Weapon</param>
    void Fire(RangedWeapon weapon)
    {
        switch (animationController.state[GameConstants.RangedLayer])
        {
        //Firing or Reloading
        case GameConstants.AS_AimFire:
            return;

        case GameConstants.AS_HipFire:
            return;

        case GameConstants.AS_Reload:
            return;

        case GameConstants.AS_Aiming:

            if (aimed)
            {
                break;
            }

            else
            {
                return;
            }

        default:
            break;
        }

        //Fire Rate Logic
        if (Time.time - shotFiredTime > weapon.liveBarrel.fireRate)
        {
            RangedAdapter adapter = inventory.ActiveEntry.Value.Adapter as RangedAdapter;

            if (adapter.chamberCount <= 0)
            {
                //Empty Chamber

                adapter.InstantLoad();

                if (adapter.chamberCount <= 0)
                {
                    actionPack.TakeAction <ReloadAction>();

                    return;
                }
            }

            TriggerActionInitiated(this);

            animator.SetTrigger(fireHash);

            shotFiredTime = Time.time;
        }
    }
예제 #4
0
    public override void OnAction()
    {
        TriggerActionInitiated(this);

        RangedAdapter adapter = inventory.ActiveEntry.Value.Adapter as RangedAdapter;

        adapter.ClearChamber();

        adapter.ClearClip();

        RangedWeapon weapon = inventory.ActiveEntry.Value.Item as RangedWeapon;

        weapon.liveBarrel.liveSlug = (weapon.liveBarrel as PolyBarrel).NextVariant();

        actionPack.TakeAction <ReloadAction>();
    }
예제 #5
0
    public override void Attack(Character attacker)
    {
        volume = ((attacker.profile as CombatantProfile).inventory as PlayerInventory).ActiveEntry.Value;

        adapter = volume.Adapter as RangedAdapter;

        for (int i = 0; i < adapter.chamberCount; i++)
        {
            if (liveBarrel.liveSlug is Projectile)
            {
                FireProjectile(attacker);
            }
        }

        adapter.chamberCount--;

        adapter.InstantLoad();
    }