Example #1
0
            public void OnLoadSucc(object source, UnityObjectWrapper <GameObject> obj)
            {
                PlayerEntity playerEntity = (PlayerEntity)source;
                var          hitboxConfig = (GameObject)obj;

                HitBoxComponentUtility.InitHitBoxComponent(playerEntity.entityKey.Value, playerEntity, hitboxConfig);
            }
Example #2
0
        public static void OnLoadSucc(object source, UnityObjectWrapper <GameObject> obj)
        {
            VehicleEntity vehicle        = (VehicleEntity)source;
            var           hitboxConfig   = (GameObject)obj;
            var           hitboxImposter = HitBoxComponentUtility.InitHitBoxComponent(vehicle.entityKey.Value, vehicle, hitboxConfig);

            vehicle.ConfigHitBoxImposter(hitboxImposter);
        }
Example #3
0
        public void OnGoLoadSucc(object source, UnityObjectWrapper <GameObject> obj)
        {
            if (null == obj)
            {
                _logger.ErrorFormat("Load GameObject Asset Fialed: obj is null.");
                return;
            }
            if (null == obj.Value)
            {
                _logger.ErrorFormat("Asset {0}:{1} Load GameObject Fialed ", obj.Address.BundleName, obj.Address.AssetName);
                return;
            }

            int[] para = (int[])source;
            if (para == null || para.Length != 2)
            {
                return;
            }

            try
            {
                EAssetType atype = (EAssetType)para[0];
                switch (atype)
                {
                case EAssetType.AUDIO:
                {
                    //Sound
                    int soundId = para[1];
                    if (!_dictSounds.ContainsKey(soundId))
                    {
                        AudioSource audio = obj.Value.GetComponent <AudioSource>();
                        if (null != audio)
                        {
                            _dictSounds.Add(soundId, audio.clip);
                        }
                    }
                    break;
                }

                case EAssetType.EFFECT:
                {
                    //Effect
                    int effectId = para[1];
                    _effectPool.AddEffectPrefab(effectId, obj.Value);
                    break;
                }
                }
                _manager.AddRecycleRequest(obj);
            }
            catch (Exception e)
            {
                _logger.ErrorFormat(e.Message);
            }
        }
Example #4
0
 public static void AddAsset(this PlayerEntity player, UnityObjectWrapper <GameObject> asset)
 {
     if (asset != null)
     {
         if (player.hasRecycleableAsset)
         {
             player.recycleableAsset.Add(asset);
         }
         else
         {
             logger.InfoFormat("{0} doesn't have recycleableasset", player.entityKey);
         }
     }
     else
     {
         logger.InfoFormat("null asset in {0}", player.entityKey);
     }
 }
Example #5
0
        public void OnLoadSucc(object source, UnityObjectWrapper <GameObject> obj)
        {
            SingletonManager.Get <SubProgressBlackBoard>().Step();
            _loadingCount--;

            if (obj.Value == null)
            {
                _logger.ErrorFormat("Preload asset {0} failed", obj.Address);
            }
            else
            {
                _loadRequestManager.AddRecycleRequest(obj);
            }

            if (_loadingCount <= 0)
            {
                _sessionState.FullfillExitCondition(typeof(PreLoadSystem));
            }
        }
Example #6
0
            public void OnLoadSucc(object source, UnityObjectWrapper <GameObject> obj)
            {
                PlayerEntity player = (PlayerEntity)source;

                if (player.isFlagDestroy)
                {
                    return;
                }

                var          transform  = obj.Value.transform;
                const string anchorName = "Driver_Seat";
                var          anchor     = transform.FindChildRecursively(anchorName);

                if (anchor == null)
                {
                    throw new Exception(String.Format("Can not find anchor with name {0} for parachute!", anchorName));
                }

                player.playerSkyMove.IsParachuteLoading = false;
                player.playerSkyMove.Parachute          = transform;
                player.playerSkyMove.ParachuteAnchor    = anchor;
            }
Example #7
0
 public static void RemoveAsset(this PlayerEntity player, UnityObjectWrapper <GameObject> asset)
 {
     player.recycleableAsset.Remove(asset);
 }
Example #8
0
        public static void AddVehicleComponentsPostInit(this VehicleEntity vehicle, EVehicleType type, UnityObjectWrapper <GameObject> goWrapper, PlayerContext playerContext, bool isServer)
        {
            var go = goWrapper.Value;

            if (!vehicle.hasGameObject)
            {
                var controller = go.GetComponent <VehicleCommonController>();
                vehicle.AddGameObject(controller, goWrapper.Address, goWrapper);
                controller.PutToSleep();
            }

            if (!go.activeSelf)
            {
                var controller = go.GetComponent <VehicleCommonController>();
                controller.IsActive = true;
            }

            go.transform.position = GetNewBirthPositionOnOverlap(go);

            if (vehicle.HasDynamicData())
            {
                var dydata = vehicle.GetDynamicData();
                dydata.Position = go.transform.position;
            }

            if (!vehicle.hasVehicleType)
            {
                vehicle.AddVehicleType(type);
            }

            vehicle.AddEntityKeyIdentifier(vehicle.entityKey.Value);
            vehicle.AddVehicleObjectCollision(playerContext);

            vehicle.AddSeatComponent();
            vehicle.AddDynamicAndEffectDataPostInit();

            vehicle.AddVehicleAllGameData();
            vehicle.AddHitBoxComponent();
            vehicle.AddGameEventComponent();

            if (!vehicle.hasVehicleCmd)
            {
                vehicle.AddVehicleCmd();
            }

            if (!vehicle.hasVehicleCmdOwner)
            {
                vehicle.AddVehicleCmdOwner(new VehicleCmdOwnerAdapter(vehicle));
            }

            if (!vehicle.hasVehicleSyncEvent)
            {
                vehicle.AddVehicleSyncEvent(new Queue <IVehicleSyncEvent>());
            }

            if (!vehicle.hasVehicleCollisionDamage)
            {
                vehicle.AddVehicleCollisionDamage(new Dictionary <EntityKey, VehicleCollisionDamage>(new EntityKeyComparer()));
            }

            EntityAPI[vehicle.GetTypeValue()].InitController(vehicle, isServer, vehicle.vehicleAssetInfo.Id);

            vehicle.isFlagSyncSelf     = true;
            vehicle.isFlagSyncNonSelf  = true;
            vehicle.isFlagCompensation = true;
        }
Example #9
0
 public void Call(object source, UnityObjectWrapper <GameObject> obj)
 {
     _player.AddAsset(obj);
     _handler(source, obj);
     _pool.Free(this);
 }
Example #10
0
            public void OnLoadSucc(object source, UnityObjectWrapper <GameObject> obj)
            {
                PlayerEntity player = (PlayerEntity)source;
                GameObject   go     = obj;

                RemoveRagdollOnServerSide(go);

                HandleLoadedModel(player, go);

                player.AddAsset(obj);

                player.AddThirdPersonModel(go);

                go.name = go.name.Replace("(Clone)", "");
                go.transform.SetParent(player.RootGo().transform);
                go.transform.localPosition = Vector3.zero;
                go.transform.localRotation = Quaternion.identity;
                go.transform.localScale    = Vector3.one;
                _logger.InfoFormat("P3 loaded: {0}", player.entityKey);

                var transformChache = go.AddComponent <TransformCache>();

                BoneTool.CacheTransform(go, transformChache);

                if (!player.hasBones)
                {
                    player.AddBones(null, null, null);
                }

                player.bones.Head  = BoneMount.FindChildBoneFromCache(go, BoneName.CharacterHeadBoneName);
                player.bones.Spine = BoneMount.FindChildBoneFromCache(go, BoneName.CharacterSpineName);

                player.AddThirdPersonAnimator(go.GetComponent <Animator>());

                var ik = go.AddComponent <PlayerIK>();

                ik.SetAnimator(AvatarIKGoal.LeftHand, player.thirdPersonAnimator.UnityAnimator);
                ik.SetIKLayer(AvatarIKGoal.LeftHand, NetworkAnimatorLayer.ThirdPersonIKPassLayer);
                ik.SetAnimator(AvatarIKGoal.RightHand, player.thirdPersonAnimator.UnityAnimator);
                ik.SetIKLayer(AvatarIKGoal.RightHand, NetworkAnimatorLayer.ThirdPersonIKPassLayer);

                if (player.isFlagSelf)
                {
                    var animationEvent = go.AddComponent <AnimationClipEvent>();
                    animationEvent.Player = player;
                    player.animatorClip.ClipManager.SetAnimationCleanEventCallback(animationEvent.InterruptAnimationEventFunc);
                    // 设置大厅传入的roleId和avatarId
                    player.appearanceInterface.Appearance.SetRoleModelIdAndInitAvatar(player.playerInfo.RoleModelId, player.playerInfo.AvatarIds);
                }
                else
                {
                    go.AddComponent <ThirdPersonAnimationClipEvent>();
                }

                player.characterControllerInterface.CharacterController.SetCharacterRoot(player.characterContoller.Value.gameObject);
                player.appearanceInterface.Appearance.SetThirdPersonCharacter(go);
                player.thirdPersonAnimator.UnityAnimator.Update(0);

                player.characterBoneInterface.CharacterBone.SetCharacterRoot(player.characterContoller.Value.gameObject);
                player.characterBoneInterface.CharacterBone.SetThirdPersonCharacter(go);
                player.characterBoneInterface.CharacterBone.SetStablePelvisRotation();

                player.appearanceInterface.Appearance.SetAnimatorP3(player.thirdPersonAnimator.UnityAnimator);

                player.appearanceInterface.Appearance.PlayerReborn();
                player.characterControllerInterface.CharacterController.PlayerReborn();

                // 实际应该使用SharedConfig.IsServer,但离线模式中其值为false
                if (!player.hasNetworkAnimator)
                {
                    player.AddNetworkAnimator(NetworkAnimatorUtil.CreateAnimatorLayers(player.thirdPersonAnimator.UnityAnimator),
                                              NetworkAnimatorUtil.GetAnimatorParams(player.thirdPersonAnimator.UnityAnimator));

                    player.networkAnimator.SetEntityName(player.entityKey.ToString());
                }

                if (SharedConfig.IsServer)
                {
                    player.AddNetworkAnimatiorServerTime(0);
                }

                // 禁用非可见状态下的动画更新,在获取Stable状态之后
                if (SharedConfig.IsServer || !player.isFlagSelf)
                {
                    player.thirdPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.CullUpdateTransforms;
                }
                else
                {
                    player.thirdPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
                }
            }
Example #11
0
            public void OnLoadSucc(object source, UnityObjectWrapper <GameObject> obj)
            {
                PlayerEntity player = (PlayerEntity)source;
                GameObject   go     = obj;

                HandleLoadedModel(player, go);

                player.AddAsset(obj);

                player.AddFirstPersonModel(go);

                player.appearanceInterface.FirstPersonAppearance = new FirstPersonAppearanceManager(player.firstPersonAppearance);

                go.name = "P1_" + player.entityKey;
                go.transform.SetParent(player.RootGo().transform);
                go.transform.localPosition = new Vector3(0, player.firstPersonAppearance.FirstPersonHeight, player.firstPersonAppearance.FirstPersonForwardOffset);
                go.transform.localRotation = Quaternion.identity;
                go.transform.localScale    = Vector3.one;
                _logger.InfoFormat("P1 loaded: {0}", player.entityKey);

                player.AddFirstPersonAnimator(go.GetComponent <Animator>());

                var ik = go.AddComponent <PlayerIK>();

                ik.SetAnimator(AvatarIKGoal.LeftHand, player.firstPersonAnimator.UnityAnimator);
                ik.SetIKLayer(AvatarIKGoal.LeftHand, NetworkAnimatorLayer.FirstPersonIKPassLayer);
                ik.SetAnimator(AvatarIKGoal.RightHand, player.firstPersonAnimator.UnityAnimator);
                ik.SetIKLayer(AvatarIKGoal.RightHand, NetworkAnimatorLayer.FirstPersonIKPassLayer);

                var transformChache = go.AddComponent <TransformCache>();

                BoneTool.CacheTransform(go, transformChache);

                if (player.isFlagSelf)
                {
                    var animationEvent = go.AddComponent <AnimationClipEvent>();
                    animationEvent.Player = player;
                    player.animatorClip.ClipManager.SetAnimationCleanEventCallback(animationEvent.InterruptAnimationEventFunc);
                }
                else
                {
                    go.AddComponent <ThirdPersonAnimationClipEvent>();
                }

                player.firstPersonAnimator.UnityAnimator.Update(0);

                player.appearanceInterface.Appearance.SetFirstPersonCharacter(go);
                player.appearanceInterface.FirstPersonAppearance.SetFirstPersonCharacter(go);

                player.appearanceInterface.Appearance.SetAnimatorP1(player.firstPersonAnimator.UnityAnimator);

                player.stateInterface.State.SetName(player.RootGo().name);

                player.characterBoneInterface.CharacterBone.SetFirstPersonCharacter(go);

                if (!player.hasFpAnimStatus)
                {
                    player.AddFpAnimStatus(NetworkAnimatorUtil.CreateAnimatorLayers(player.firstPersonAnimator.UnityAnimator),
                                           NetworkAnimatorUtil.GetAnimatorParams(player.firstPersonAnimator.UnityAnimator));
                }

                // 禁用非可见状态下的动画更新
                if (!player.isFlagSelf)
                {
                    player.firstPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.CullUpdateTransforms;
                }
                else
                {
                    player.firstPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
                }
            }