Exemple #1
0
        public void OnWeaponEquipped(WeaponItemRuntime weapon)
        {
            currentWeaponType = weapon.weaponItemData.weaponType;
            switch (currentWeaponType)
            {
            case WeaponType.RANGED:
                rangedWeaponItemRuntime = weapon as WeaponItemRuntimeRanged;
                break;

            case WeaponType.MELEE:
                meleeWeaponItemRuntime = weapon as WeaponItemRuntimeMelee;
                break;

            case WeaponType.THROWABLE:
                break;

            case WeaponType.FISTS:
                meleeWeaponItemRuntime = weapon as WeaponItemRuntimeMelee;
                break;
            }

            currentRuntimeWeapon = weapon;
            animController.SetAnimInt(animController.animData.weaponAnimID, weapon.weaponItemData.weaponAnimID);
            animController.PlayAnimationHash(animController.animData.getNewWeaponAnimationClass);
        }
        private void SetupDualWieldItem(WeaponItemRuntime item)
        {
            //Place Weapon In Left Hand
            item.transform.SetParent(playerLeftHand);
            item.transform.localPosition = Vector3.zero;
            item.transform.localRotation = Quaternion.identity;

            //Get Ranged Component To Setup Left Hand Pivot
            WeaponItemRuntimeRanged leftHandRangedComponent = item as WeaponItemRuntimeRanged;

            leftHandRangedComponent.pivot.localPosition = leftHandRangedComponent.rangedData.leftHandPivotPosition;
            leftHandRangedComponent.pivot.localRotation = Quaternion.Euler(leftHandRangedComponent.rangedData.leftHandPivotRotation);
            leftHandRangedComponent.PickupWeaponPlayer();

            WeaponItemRuntimeRanged rightHandRangedComponent = inventoryWeapons[currentWeaponInList] as WeaponItemRuntimeRanged;


            //Add Dual Wield Component To It
            WeaponItemRuntimeRangedDualWielded dualWieldComponent = item.gameObject.AddComponent <WeaponItemRuntimeRangedDualWielded>();
            WeaponItemRanged_DualWielded       dualData           = leftHandRangedComponent.rangedData.dualWieldParentData;

            dualWieldComponent.SetupDualWield(dualData, leftHandRangedComponent, rightHandRangedComponent);

            //Swap Inventory To The Dual Wield Component
            inventoryWeapons[currentWeaponInList] = dualWieldComponent;
            currentWeaponItem        = dualData;
            currentWeaponItemRuntime = dualWieldComponent;
            weaponController.OnWeaponEquipped(currentWeaponItemRuntime);
        }
Exemple #3
0
        public void EquipExistingWeapon(WeaponItemRuntime weapon)
        {
            weapon.transform.SetParent(rightHandTrans);
            weapon.transform.localPosition = Vector3.zero;
            weapon.transform.localRotation = Quaternion.identity;

            currentWeaponRuntime    = weapon;
            currentInHandWeaponData = weapon.weaponItemData;
            weapon.PickupWeaponPlayer();
            weapon.DisableCollisionColliders();

            animController.SetAnimInt(animController.animData.weaponAnimID, currentWeaponRuntime.weaponItemData.weaponAnimID);
            animController.PlayAnimationHash(animController.animData.getNewWeaponAnimationClass);

            switch (currentInHandWeaponData.weaponType)
            {
            case WeaponType.RANGED:
                EquipRangedWeapon();
                break;

            case WeaponType.MELEE:
                EquipMeleeWeapon();
                break;
            }
        }
        public void ApplyKnockdown()
        {
            if (isKnockedDown)
            {
                return;
            }

            isKnockedDown = true;
            StartCoroutine(KnockdownTimer());

            animController.SetAnimBool(animController.animData.isKnockedDown, true);
            animController.PlayAnimationHash(animController.animData.knockDownAnimationClass);
            limbsController.EnableEntireRagdoll();
            hitboxController.DisableHitboxes();
            healthController.doorCollider.SetActive(false);
            healthController.notificationCollider.SetActive(false);

            if (inventoryController.currentWeaponRuntime != null)
            {
                droppedWeapon = inventoryController.currentWeaponRuntime;
            }

            inventoryController.DropCurrentInHandWeapon(false);
            StartCoroutine(DisableAnimatorTimer());

            knockDownNotificationCollider.enabled = true;
            stateController.ChangeState(AIStateType.KNOCKEDDOWN);
        }
        public void EquipNewWeaponToInventory(WeaponItemRuntime itemRuntime)
        {
            bool canBeDualWielded = false;

            if (itemRuntime.weaponItemData.weaponType == WeaponType.RANGED)
            {
                WeaponItemRuntimeRanged rangedItem = itemRuntime as WeaponItemRuntimeRanged;
                if (rangedItem.rangedData.canBeDualWielded == true)
                {
                    //Check Inventory to see if we have the same item type
                    bool hasExistingWeaponInInventory = false;
                    int  wpnInList = 0;
                    for (int i = 0; i < inventoryWeapons.Count; i++)
                    {
                        if (inventoryWeapons[i].weaponItemData == itemRuntime.weaponItemData)
                        {
                            hasExistingWeaponInInventory = true;
                            wpnInList = i;
                            break;
                        }
                    }

                    if (hasExistingWeaponInInventory == true)
                    {
                        canBeDualWielded = true;
                        //If Reloading During Pickup Cancel
                        if (isPlayerReloading.value)
                        {
                            reloadController.ReloadCancelled();
                        }
                        //Change Our In Hand Weapon To That If We Have Not Got It (But Don't Execute usual logic)
                        if (currentWeaponItemRuntime != itemRuntime)
                        {
                            if (currentWeaponItemRuntime != null)
                            {
                                currentWeaponItemRuntime.gameObject.SetActive(false);
                            }
                            currentWeaponInList = wpnInList;
                            EquipWeaponExistingInInventory(inventoryWeapons[wpnInList]);
                        }
                        SetupDualWieldItem(itemRuntime);
                    }
                }
            }

            if (canBeDualWielded == false) //If Not Dual Wieldable We can pickup weapons normally
            {
                if (inventoryWeapons.Count == playerInventoryData.maxInventoryWeaponsAmount)
                {
                    DropWeaponToGround(false, currentWeaponItemRuntime);
                }
                else
                {
                    DisableInHandWeapon();
                }
                NewWeaponEquipped(itemRuntime.weaponItemData.weaponType, itemRuntime);
            }
        }
 public void NewWeaponEquipped(WeaponType newWeapon, WeaponItemRuntime itemRuntime)
 {
     itemRuntime.transform.SetParent(playerRightHand);
     itemRuntime.transform.localPosition = Vector3.zero;
     itemRuntime.transform.localRotation = Quaternion.identity;
     itemRuntime.canAttack = true;
     itemRuntime.PickupWeaponPlayer();
     inventoryWeapons.Add(itemRuntime);
     ChangeCurrentInHandWeapon(itemRuntime);
 }
        void EndKnockDownAfterWeaponFound()
        {
            isRecoveringFromKnockDown = false;
            droppedWeapon.GetComponentInParent <WorldInteractionController>().DestroyInteractionOnly(droppedWeapon.gameObject);
            inventoryController.EquipExistingWeapon(droppedWeapon);
            droppedWeapon = null;

            stateController.ChangeState(AIStateType.COMBAT);
            stateController.combatState.target = FindObjectOfType <HealthControllerPlayer>();
        }
Exemple #8
0
        bool CheckIfExistingWeaponIsSameType(WeaponItem weapon)
        {
            WeaponItemRuntime runtimeItem = GetComponentInChildren <WeaponItemRuntime>();

            if (runtimeItem.weaponItemData.weaponName == weapon.weaponName)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
 public void Init(AIStateController stateCon)
 {
     stateController               = stateCon;
     fieldOfViewController         = stateCon.GetComponentInChildren <FieldOfViewController>();
     inventoryController           = stateCon.GetComponent <AIInventoryController>();
     movementController            = stateCon.GetComponent <AIMovementController>();
     animController                = stateCon.GetComponent <AnimationController>();
     lineOfSightObstaclesLayerMask = Resources.Load("LayerMasks/LayerMask_AI_Line Of Sight Obstacles") as ScriptableLayerMask;
     deltaTime           = GetResource.DeltaTimer();
     runtimeWeaponInHand = inventoryController.currentWeaponRuntime;
     inventoryController.currentWeaponRuntime.AttackCooldownEnd();
     inventoryController.rangedWeaponRuntime.currentAmmoInMagazine = inventoryController.rangedWeaponRuntime.rangedData.maxMagazineAmmoAmount;
 }
Exemple #10
0
        public override void Init()
        {
            aiController = GetComponent <AIController>();
            worldInteractionParentGroup = WorldInteractionsManager.singleton.transform;
            animController                      = GetComponent <AnimationController>();
            rightHandTrans                      = GetComponentInChildren <RightHandIdentifier>().transform;
            currentWeaponRuntime                = GetComponentInChildren <WeaponItemRuntime>();
            currentInHandWeaponData             = currentWeaponRuntime.weaponItemData;
            currentWeaponRuntime.animController = animController;

            if (currentInHandWeaponData != null)
            {
                EquipWeaponOnGameStart();
            }
        }
        void EquipWeaponExistingInInventory(WeaponItemRuntime weapon)
        {
            currentWeaponItemRuntime = weapon;
            currentWeaponItem        = weapon.weaponItemData;
            WeaponItemRuntimeRangedDualWielded dualWield = weapon as WeaponItemRuntimeRangedDualWielded;

            if (dualWield == null)
            {
                weapon.gameObject.SetActive(true);
            }
            else
            {
                dualWield.OnWeaponEquipped();
            }
            weaponController.OnWeaponEquipped(currentWeaponItemRuntime);
        }
Exemple #12
0
        public void DropCurrentInHandWeapon(bool dropWithForce)
        {
            if (currentWeaponRuntime == null) //Has No Weapon to Drop
            {
                return;
            }

            WorldInteractionEvent_PickupWeaponRuntime pickupWeaponInteraction = WeaponStaticUtils.DropWeaponToGround(currentWeaponRuntime, worldInteractionParentGroup, aiController.aiData.worldInteractionPrefab);

            if (dropWithForce)
            {
                WeaponStaticUtils.ThrowWeaponWithForce(pickupWeaponInteraction, currentInHandWeaponData.throwDistanceForce, transform.forward);
            }

            currentWeaponRuntime = null;
        }
Exemple #13
0
        void SpawnWeapon()
        {
            WeaponItem weaponToSpawn = null;

            if (useDefaultWeapon == true)
            {
                weaponToSpawn = troopData.defaultWeaponToSpawnWith;
            }
            else
            {
                weaponToSpawn = weaponToSpawnWith;
            }

            bool HasExistingWeapon = CheckForExistingWeapon();

            if (HasExistingWeapon == true)
            {
                bool isSameType = CheckIfExistingWeaponIsSameType(weaponToSpawn);
                if (isSameType == true)
                {
                    return;
                }
                else
                {
                    WeaponItemRuntime currentWeapon = GetComponentInChildren <WeaponItemRuntime>();
                    if (currentWeapon != null)
                    {
                        if (currentWeapon.weaponItemData != weaponToSpawn)
                        {
                            DestroyImmediate(currentWeapon.gameObject);
                            currentWeapon = null;
                        }
                    }
                }
            }



            GameObject          createdGEO = PrefabUtility.InstantiatePrefab(weaponToSpawn.weaponPrefab) as GameObject;
            RightHandIdentifier rightHand  = GetComponentInChildren <RightHandIdentifier>();

            //               Debug.Log(rightHand);
            //               Debug.Log(createdGEO);
            createdGEO.transform.parent        = rightHand.transform;
            createdGEO.transform.localPosition = Vector3.zero;
            createdGEO.transform.localRotation = Quaternion.identity;
        }
        public void ChangeCurrentInHandWeapon(WeaponItemRuntime itemRuntime)
        {
            DisableInHandWeapon();

            currentWeaponItemRuntime = itemRuntime;
            currentWeaponItem        = itemRuntime.weaponItemData;

            WeaponItemRuntimeRangedDualWielded dualWield = itemRuntime as WeaponItemRuntimeRangedDualWielded;

            if (dualWield == null)
            {
                itemRuntime.gameObject.SetActive(true);
            }
            else
            {
                dualWield.OnWeaponEquipped();
            }
            weaponController.OnWeaponEquipped(currentWeaponItemRuntime);
        }
        IEnumerator FetchWeaponAfterGetUpTimer()
        {
            Debug.Log(gameObject.name);
            yield return(new WaitForSeconds(1.8f));

            if (droppedWeapon.isPlayerWeapon == true)
            {
                droppedWeapon = null;

                Debug.Log("Player Took Weapon From " + gameObject.name);
            }
            else
            {
                targetPositionForWeaponPickup = GetNearestNavMeshPoint.GetClosestNavMeshPoint(droppedWeapon.transform.position);
                movementController.SetAgentDestination(targetPositionForWeaponPickup);
                animController.SetAnimBool(animController.animData.isIdleBool, true);
                animController.SetAnimFloat(animController.animData.verticalFloat, 1);
            }
        }
        public void DropWeaponToGround(bool throwWeaponForce, WeaponItemRuntime weaponToDrop)
        {
            bool isDualWielded = false;

            if (weaponToDrop.weaponItemData.weaponType == WeaponType.RANGED)
            {
                WeaponItemRuntimeRanged rangedComponent = weaponToDrop as WeaponItemRuntimeRanged;
                if (rangedComponent.isDualWielded == true)
                {
                    isDualWielded = true;
                }
            }

            if (isDualWielded == false)
            {
                if (throwWeaponForce)
                {
                    WorldInteractionEvent_PickupWeaponRuntime pickupWeaponInteraction = WeaponStaticUtils.DropWeaponToGround(weaponToDrop, worldInteractionParentGroup, searcherController.controllerData.worldInteractionPrefab);
                    currentWeaponItemRuntime.OnDropWeaponToGround();
                    WeaponStaticUtils.ThrowWeaponWithForce(pickupWeaponInteraction, weaponToDrop.weaponItemData.throwDistanceForce, transform.forward);
                }
            }
            else
            {
                WeaponItemRuntimeRangedDualWielded dualWieldComponent = weaponToDrop as WeaponItemRuntimeRangedDualWielded;
                dualWieldComponent.DestroyDualWield();
            }

            inventoryWeapons.Remove(weaponToDrop);

            currentWeaponItemRuntime = null;
            currentWeaponItem        = null;

            if (playerHealthController.isDead == false)
            {
                WeaponToggle();
            }
        }
        void SpawnFreshWeapon(WeaponItem item)
        {
            WeaponItemRanged_DualWielded dualItem = item as WeaponItemRanged_DualWielded;

            if (dualItem != null)
            {
                SpawnDualWieldItem(dualItem);
                return;
            }

            GameObject weaponGeo = Instantiate(item.weaponPrefab, playerRightHand);

            weaponGeo.transform.localPosition = Vector3.zero;
            weaponGeo.transform.localRotation = Quaternion.identity;
            weaponGeo.SetActive(false);

            WeaponItemRuntime runtimeComponent = weaponGeo.GetComponent <WeaponItemRuntime>();

            runtimeComponent.FreshSpawnWeapon();
            runtimeComponent.PickupWeaponPlayer();
            runtimeComponent.Init();
            inventoryWeapons.Add(runtimeComponent);
        }
 public void SwitchToFists()
 {
     currentWeaponItemRuntime = fistsWeaponRuntime;
     weaponController.OnWeaponEquipped(currentWeaponItemRuntime);
 }
Exemple #19
0
 public void GetRuntimeWeapon()
 {
     runtimeWeapon = GetComponentInChildren <WeaponItemRuntime>();
 }