예제 #1
0
 public void UpdateHandWeaponType(WeaponInPackage type)
 {
     for (var i = 0; i < (int)WeaponPartLocation.EndOfTheWorld; ++i)
     {
         _attachments[i].UpdateHandWeaponType(type);
     }
 }
        private void RefreshWeaponAppearance(EWeaponSlotType slot = EWeaponSlotType.Pointer)
        {
            if (slot == EWeaponSlotType.Pointer)
            {
                slot = HeldSlotType;
            }
            var weaponAgent = GetWeaponAgent(slot);

            if (weaponAgent.IsValid())
            {
                WeaponPartsRefreshStruct refreshParams = new WeaponPartsRefreshStruct();
                refreshParams.slot       = slot;
                refreshParams.weaponInfo = weaponAgent.ComponentScan;
                // refreshParams.oldParts = new WeaponPartsStruct();
                refreshParams.newParts     = weaponAgent.PartsScan;
                refreshParams.armInPackage = true;
                RefreshWeaponModelAndParts(refreshParams);
            }
            else
            {
                //不移除C4 RelatedAppearence.RemoveC4();
                WeaponInPackage pos = slot.ToWeaponInPackage();
                RelatedAppearence.UnmountWeaponInPackage(pos);
                InteractController.InterruptCharactor();
            }
        }
예제 #3
0
 protected AttachmentParamData(bool isFirstPersonClass, WeaponPartLocation attachmentType, WeaponInPackage weaponType)
 {
     _isFirstPersonClass = isFirstPersonClass;
     AttachmentType      = attachmentType;
     _weaponType         = weaponType;
     Init();
 }
예제 #4
0
 protected WeaponParamData(bool isFirstPersonClass, WeaponInPackage type) : base(isFirstPersonClass)
 {
     Attachment         = new WeaponAttachment(isFirstPersonClass, type);
     IsFirstPersonClass = isFirstPersonClass;
     Type = type;
     Init();
 }
예제 #5
0
 public void RecycleMaterial(WeaponInPackage pos)
 {
     if (null != _materials[(int)pos])
     {
         AddRecycleObject(_materials[(int)pos]);
     }
 }
예제 #6
0
        public bool DestroyWeapon(EWeaponSlotType slotType, int bagIndex, bool interrupt = true)
        {
            var weaponAgent = GetWeaponAgent(slotType, bagIndex);

            if (!weaponAgent.IsValid())
            {
                return(false);
            }
            if (WeaponUtil.IsC4p(weaponAgent.ConfigId))
            {
                RelatedAppearence.RemoveC4();
            }
            weaponAgent.ReleaseWeapon();
            //移除武器背包操作
            playerWeaponAgent.RemoveBagWeapon(slotType, bagIndex);
            if (IsHeldBagSlotType(slotType, bagIndex))
            {
                SetHeldSlotTypeProcess(EWeaponSlotType.None);
            }
            if (bagIndex == -1 || bagIndex == HeldBagPointer)
            {
                WeaponInPackage pos = slotType.ToWeaponInPackage();
                RelatedAppearence.UnmountWeaponInPackage(pos);
                if (interrupt)
                {
                    Interrupt();
                }
            }
            return(true);
        }
예제 #7
0
        public void UpdateWeaponInHand(WeaponInPackage type)
        {
            if (WeaponInPackage.EmptyHanded == type)
            {
                if (!InHand)
                {
                    return;
                }
                MountWeaponInPackage(Character);
                InHand = false;
            }
            else
            {
                var needInHand = type == Type;
                if (InHand == needInHand)
                {
                    return;
                }

                if (needInHand)
                {
                    MountWeaponToHand(Character);
                    Change(WeaponId);
                }
                else
                {
                    MountWeaponInPackage(Character);
                }

                InHand = needInHand;
            }
        }
예제 #8
0
        private static int GetIndexFromPos(WeaponInPackage pos)
        {
            switch (pos)
            {
            case WeaponInPackage.EmptyHanded:
                return((int)LatestWeaponStateIndex.EmptyHand);

            case WeaponInPackage.PrimaryWeaponOne:
                return((int)LatestWeaponStateIndex.PrimaryWeaponOne);

            case WeaponInPackage.PrimaryWeaponTwo:
                return((int)LatestWeaponStateIndex.PrimaryWeaponTwo);

            case WeaponInPackage.SideArm:
                return((int)LatestWeaponStateIndex.SideArm);

            case WeaponInPackage.MeleeWeapon:
                return((int)LatestWeaponStateIndex.MeleeWeapon);

            case WeaponInPackage.ThrownWeapon:
                return((int)LatestWeaponStateIndex.ThrownWeapon);

            case WeaponInPackage.TacticWeapon:
                return((int)LatestWeaponStateIndex.TacticWeapon);
            }

            throw new Exception(string.Format("Unexpected Exception: {0}", pos));
        }
예제 #9
0
        public void MountWeaponToHand(WeaponInPackage pos)
        {
            var cmd = GetAvailableCommand();

            cmd.SetChangeWeaponInHand(MountWeaponToHandImpl, pos);
            Logger.DebugFormat("MountWeaponToHand: {0}", pos);
        }
예제 #10
0
 public void UnmountAttachment(WeaponInPackage pos, WeaponPartLocation location)
 {
     if ((int)pos <= (int)WeaponInPackage.EndOfTheWorld &&
         (int)location <= (int)WeaponPartLocation.EndOfTheWorld)
     {
         _weaponController.UnmountAttachment(pos, location);
     }
 }
예제 #11
0
 public void MountAttachment(WeaponInPackage pos, WeaponPartLocation location, int id)
 {
     if ((int)pos <= (int)WeaponInPackage.EndOfTheWorld &&
         (int)location <= (int)WeaponPartLocation.EndOfTheWorld)
     {
         WeaponControllerBaseImpl.MountAttachment(pos, location, id);
     }
 }
예제 #12
0
 private void UpdateHandWeaponType(WeaponInPackage type)
 {
     _handWeaponType = type;
     for (var i = 0; i < (int)WeaponInPackage.EndOfTheWorld; ++i)
     {
         _weapons[i].UpdateHandWeaponType(_handWeaponType);
     }
 }
예제 #13
0
 public void UnmountAttachment(WeaponInPackage pos, WeaponPartLocation location)
 {
     if ((int)pos <= (int)WeaponInPackage.EndOfTheWorld &&
         (int)location <= (int)WeaponPartLocation.EndOfTheWorld)
     {
         WeaponDataBaseImpl.UnmountAttachment(pos, location);
     }
 }
예제 #14
0
 public WeaponAttachment(bool isFirstPerson, WeaponInPackage weaponType)
 {
     _weaponType = weaponType;
     for (var i = 0; i < (int)WeaponPartLocation.EndOfTheWorld; ++i)
     {
         _attachments[i] = new AttachmentParam(isFirstPerson, (WeaponPartLocation)i, _weaponType);
     }
 }
예제 #15
0
 private void MountWeaponInPackageImpl(WeaponInPackage pos, int id)
 {
     UpdateWeaponIdInPackage(pos, id);
     if (_predictedWeaponValue[(int)PredictedWeaponStateIndex.WeaponInHand] == (int)pos)
     {
         _predictedWeaponValue[(int)PredictedWeaponStateIndex.OverrideControllerState] =
             (int)OverrideControllerState.Null;
     }
 }
예제 #16
0
        private void UpdateWeaponIdInPackage(WeaponInPackage pos, int id)
        {
            var index = GetIndexFromPos(pos);

            if (index >= 0 && index < _latestWeaponValue.Length)
            {
                _latestWeaponValue[index] = id;
            }
        }
예제 #17
0
        private void DoDrawEmptyWeaponInPackage(EWeaponSlotType slotType, bool interrupt)
        {
            WeaponInPackage pos = slotType.ToWeaponInPackage();

            RelatedAppearence.UnmountWeaponInPackage(pos);
            if (interrupt)
            {
                InteractController.InterruptCharactor();
            }
        }
예제 #18
0
 public void SetChangeAttachment(Action <WeaponInPackage, WeaponPartLocation, int> action,
                                 WeaponInPackage pos,
                                 WeaponPartLocation location,
                                 int id)
 {
     _changeWeaponAttachment = action;
     _weaponPosition         = pos;
     _attachmentLocation     = location;
     _attachment             = id;
 }
예제 #19
0
 private void ProcessMountWeaponInPackage(WeaponInPackage pos, int weaponId, int avatarId)
 {
     if (SingletonManager.Get <WeaponConfigManager>().IsC4(weaponId))
     {
         _playerEntity.AddC4ToBag(weaponId);
     }
     else
     {
         _playerEntity.appearanceInterface.Appearance.MountWeaponInPackage(pos, avatarId);
     }
 }
예제 #20
0
 public void MountWeaponToHand(WeaponInPackage pos)
 {
     if ((int)pos < (int)WeaponInPackage.EndOfTheWorld)
     {
         WeaponDataBaseImpl.MountWeaponToHand(pos);
     }
     else
     {
         Logger.ErrorFormat("error slot :  slot id {0}", pos);
     }
 }
예제 #21
0
 public void UnmountWeaponInPackage(WeaponInPackage pos)
 {
     if ((int)pos < (int)WeaponInPackage.EndOfTheWorld)
     {
         WeaponControllerBaseImpl.UnmountWeaponInPackage(pos);
     }
     else
     {
         Logger.ErrorFormat("error slot :  slot id {0}", pos);
     }
 }
예제 #22
0
 public void MountWeaponToHand(WeaponInPackage pos)
 {
     if ((int)pos < (int)WeaponInPackage.EndOfTheWorld)
     {
         _weaponController.MountWeaponToHand(pos);
     }
     else
     {
         _logger.ErrorFormat("error slot :  slot id {0}", pos);
     }
 }
예제 #23
0
        public void MountWeaponInPackage(GameObject weapon, GameObject character, WeaponInPackage pos, bool unMount = true)
        {
            if (weapon != null && character != null)
            {
                Transform target = null;
                switch (pos)
                {
                case WeaponInPackage.PrimaryWeaponOne:
                    target = FindChildBoneFromCache(character, BoneName.PrimaryWeaponOneOnBag);
                    if (target == null)
                    {
                        target = FindChildBoneFromCache(character, BoneName.PrimaryWeaponOneOnCharacter, false);
                    }
                    break;

                case WeaponInPackage.PrimaryWeaponTwo:
                    target = FindChildBoneFromCache(character, BoneName.PrimaryWeaponTwoOnBag);
                    if (target == null)
                    {
                        target = FindChildBoneFromCache(character, BoneName.PrimaryWeaponTwoOnCharacter, false);
                    }
                    break;

                case WeaponInPackage.SideArm:
                    target = FindChildBoneFromCache(character, BoneName.SideArmOnCharacter, false);
                    break;

                case WeaponInPackage.MeleeWeapon:
                    target = FindChildBoneFromCache(character, BoneName.MeleeWeaponOnCharacter, false);
                    break;

                case WeaponInPackage.ThrownWeapon:
                    target = FindChildBoneFromCache(character, BoneName.ThrownWeaponOnCharacter, false);
                    break;

                case WeaponInPackage.TacticWeapon:
                    target = FindChildBoneFromCache(character, BoneName.TacticWeaponOnCharacter, false);
                    break;
                }

                if (unMount)
                {
                    UnmountTransform(target);
                }

                if (target != null)
                {
                    weapon.transform.SetParent(target, false);
                    weapon.transform.localPosition = Vector3.zero;
                    weapon.transform.localRotation = Quaternion.identity;
                    weapon.transform.localScale    = Vector3.one;
                }
            }
        }
예제 #24
0
        private void ChangeMaterial(GameObject weapon, UnityObject material, WeaponInPackage pos)
        {
            _materials[(int)pos] = material;
            if (null == weapon || null == material)
            {
                return;
            }

            foreach (var render in weapon.GetComponentsInChildren <MeshRenderer>())
            {
                render.material = material.AsObject as Material;
            }
        }
예제 #25
0
        public void Init()
        {
            for (var i = 0; i < _weaponIds.Length; ++i)
            {
                _weaponIds[i] = InvalidId;
            }

            for (var i = 0; i < _attachmentIds.GetLength(0); ++i)
            {
                for (var j = 0; j < _attachmentIds.GetLength(1); ++j)
                {
                    _attachmentIds[i, j] = InvalidId;
                }
            }

            _handWeaponType         = WeaponInPackage.EmptyHanded;
            _overrideControllerType = OverrideControllerState.Null;
        }
예제 #26
0
        private void WeaponToHand(int weaponId, int lastWeaponId, EWeaponSlotType slot, bool armOnLeft = false)
        {
            if (WeaponUtil.IsC4p(lastWeaponId))
            {
                weaponInteract.UnmountC4();
            }
            if (WeaponUtil.IsC4p(weaponId))
            {
                RelatedAppearence.MountC4(weaponId);
            }
            WeaponInPackage pos = slot.ToWeaponInPackage();

            RelatedAppearence.MountWeaponToHand(pos);
            if (armOnLeft)
            {
                RelatedAppearence.MountP3WeaponOnAlternativeLocator();
            }
        }
예제 #27
0
        public void UnmountWeaponInPackage(GameObject character, WeaponInPackage pos)
        {
            if (character != null)
            {
                Transform target = null;
                switch (pos)
                {
                case WeaponInPackage.PrimaryWeaponOne:
                    target = FindChildBoneFromCache(character, BoneName.PrimaryWeaponOneOnCharacter, false);
                    break;

                case WeaponInPackage.PrimaryWeaponTwo:
                    target = FindChildBoneFromCache(character, BoneName.PrimaryWeaponTwoOnCharacter, false);
                    break;
                }
                UnmountTransform(target);
            }
        }
예제 #28
0
        public void ChangeWeaponMaterial(WeaponInPackage pos, WeaponGameObjectData weapon, int weaponAvatarId, int personIndex)
        {
            _loadWeaponMaterialHandlers[(int)pos, personIndex].SetInfo(weapon, weaponAvatarId);

            var weaponAvatarManager = SingletonManager.Get <WeaponAvatarConfigManager>();
            var assetInfo           = weaponAvatarManager.GetTexWeapoonAsset(weaponAvatarId);

            if ((null == assetInfo.AssetName || assetInfo.AssetName.Equals(String.Empty)) &&
                (null == assetInfo.BundleName || assetInfo.BundleName.Equals(String.Empty)))
            {
                Logger.ErrorFormat("ErrorWeaponAvatarId Try To ChangeWeaponMaterial  id:  {0}", weaponAvatarId);
            }
            else if (null != _func)
            {
                _loadRequestBatch.Add(_func.Invoke(
                                          assetInfo,
                                          _loadWeaponMaterialHandlers[(int)pos, personIndex]));
            }
        }
예제 #29
0
        private void UpdateAttachmentType(WeaponInPackage pos, WeaponPartLocation location, int type)
        {
            if (WeaponInPackage.PrimaryWeaponOne != pos &&
                WeaponInPackage.PrimaryWeaponTwo != pos &&
                WeaponInPackage.SideArm != pos)
            {
                return;
            }

            AssertUtility.Assert(
                (int)WeaponPartLocation.EndOfTheWorld * 3 +
                (int)WeaponInPackage.EndOfTheWorld - 1 == _latestWeaponValue.Length - 1,
                "Add New WeaponPartLocation Or WeaponInPackage Enum");

            var index = GetIndexFromPos(pos) + (int)location + 1;

            if (index < 0 || index >= _latestWeaponValue.Length)
            {
                return;
            }
            _latestWeaponValue[index] = type;
        }
예제 #30
0
 public void Appearance_UnmountWeaponInPackage(WeaponInPackage pos)
 {
     entity.appearanceInterface.Appearance.UnmountWeaponInPackage(pos);
 }