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; } }); }
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); }
/// <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; } }
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>(); }
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(); }