public void SetPlayerDamageInfo(PlayerEntity source, PlayerEntity target, float damage, EBodyPart part)
        {
            if (Logger.IsDebugEnabled)
            {
                Logger.DebugFormat("SetPlayerDamageInfo {0} in {1}", damage, part);
            }
            var myPlayerEntity = _playerContext.flagSelfEntity;

            if (source != myPlayerEntity)
            {
                if (Logger.IsDebugEnabled)
                {
                    Logger.DebugFormat("source is not myself diff {0} {1}", source.entityKey.Value, myPlayerEntity.entityKey.Value);
                }
                return;
            }
            if (!myPlayerEntity.hasAttackDamage)
            {
                myPlayerEntity.AddAttackDamage(part, damage);
            }
            else
            {
                myPlayerEntity.attackDamage.HitPart = part;
                myPlayerEntity.attackDamage.Damage  = damage;
            }
        }
        public int Play(int soundId)
        {
            if (Logger.IsDebugEnabled)
            {
                Logger.DebugFormat("play {0}", soundId);
            }
            if (null == _playerEntity)
            {
                return(UniversalConsts.InvalidIntId);
            }

            var soundConfigItem = _soundConfigManager.GetSoundById(soundId);

            if (null == soundConfigItem)
            {
                return(UniversalConsts.InvalidIntId);
            }
            var entity = soundConfigItem.Sync ?
                         _soundEntityFactory.CreateSyncSound(_playerEntity, soundConfigItem, true) :
                         _soundEntityFactory.CreateSelfOnlySound(soundConfigItem.Id,
                                                                 _playerEntity.position.Value,
                                                                 true);

            var soundEntity = entity as SoundEntity;

            if (null == soundEntity)
            {
                return(UniversalConsts.InvalidIntId);
            }
            return(soundEntity.entityKey.Value.EntityId);
        }
        private void ShowOne(Map2D <GameObject> map, int index, bool show, string type)
        {
            int x = index / MaxLen;
            int y = index % MaxLen;

            //GameObject root = roots[x * MaxLen + y];

            if (show)
            {
                //LinkedList<GameObject> list = map.Get(x, y);
                //if (list != null && list.Count > 0)
                //{
                //    StaticBatchingUtility.Combine(list.ToArray(), root);
                //}

                int count = map.HandleCell(x, y, ShowGameObject);
                //root.SetActive(true);
                if (count > 10)
                {
                    _logger.DebugFormat("culling show {0},{1} count={2}, type={3}", x, y, count, type);
                }
            }
            else
            {
                int count = map.HandleCell(x, y, HideGameObject);
                //root.SetActive(false);
                if (count > 10)
                {
                    _logger.DebugFormat("culling hide {0},{1} count={2}, type={3}", x, y, count, type);
                }
            }
        }
Exemple #4
0
        private void PutOn(GameObject go, int type, bool isSkinned, bool needMapping)
        {
            if (null != go)
            {
                if (isSkinned)
                {
                    go.transform.SetParent(_characterGameObject.transform, false);
                    go.transform.localPosition = Vector3.zero;
                    go.transform.localRotation = Quaternion.identity;
                    //                go.transform.localScale = Vector3.one;

                    var allWardrobeBones = go.GetComponentsInChildren <Transform>();
                    _allAvatarBones[(Wardrobe)type] = allWardrobeBones;

                    foreach (var renderer in go.GetComponentsInChildren <SkinnedMeshRenderer>())
                    {
                        // 映射装扮与人物骨骼
                        if (needMapping)
                        {
                            var wardrobeBones = GetBonesOfTheSameName(renderer.bones, allWardrobeBones);
                            MappingBones(wardrobeBones, type);
                        }
                        renderer.bones    = GetBonesOfTheSameName(renderer.bones, _allBones);
                        renderer.rootBone = GetBoneOfTheSameName(renderer.rootBone, _allBones);
                    }
                }
                else
                {
                    _mount.MountWardrobe(go, _characterGameObject);
                }
                Logger.DebugFormat("SureAddWardrobe:  {0}", go.name);
            }
        }
Exemple #5
0
        protected override void ExecuteUserCmd(PlayerEntity playerEntity, IUserCmd cmd)
        {
            if (!cmd.IsSprayPaint)
            {
                isSprayPainting = false;
                return;
            }
            if (isSprayPainting)
            {
                return;
            }
            isSprayPainting = true;
            var       root       = _contexts.player.flagSelfEntity.RootGo();
            Transform cameraTran = _contexts.player.cameraObj.MainCamera.transform;
            Transform headTran   = BoneMount.FindChildBoneFromCache(root, BoneName.CharacterHeadBoneName); /*头部*/

            if (headTran == null || cameraTran == null)
            {
                _logger.DebugFormat("error headTran or cameraTran  !");
                return;
            }
            Vector3 forward = cameraTran.forward;
            Vector3 head    = root.transform.eulerAngles;

            var paintIdList        = _contexts.ui.uI.PaintIdList;
            var selectedPaintIndex = _contexts.ui.uI.SelectedPaintIndex;

            if (0 == selectedPaintIndex)
            {
                selectedPaintIndex = PaintUiAdapter.SelectValidIndex(paintIdList);
                _contexts.ui.uI.SelectedPaintIndex = selectedPaintIndex;
            }
            if (paintIdList == null || paintIdList.Count <= selectedPaintIndex || paintIdList[selectedPaintIndex] == 0)
            {
                _logger.DebugFormat("error paintIdList or selectedPaintIndex : " + selectedPaintIndex);
                //TODO 未装备喷漆提示
                return;
            }

            try
            {
                PlaySprayAudio();
            }
            catch (Exception e)
            {
                _logger.DebugFormat(e.Message);
            }

            RaycastHit raycastHit;
            Ray        ray = new Ray(headTran.position, cameraTran.forward);

            if (Physics.Raycast(ray, out raycastHit, 3.0f))
            {
                if (!IsIgnore(raycastHit.collider.gameObject))
                {
                    _logger.DebugFormat("SendSprayMessage");
                    SendMarkMessage(raycastHit.point, raycastHit.normal, head, paintIdList[selectedPaintIndex]);
                }
            }
        }
Exemple #6
0
        public void UpdateHitBox(IGameEntity gameEntity)
        {
            var position        = gameEntity.Position.Value;
            var rotation        = gameEntity.GetComponent <OrientationComponent>().RotationYaw;
            var hitBoxComponent = GetHitBoxComponent(gameEntity.EntityKey);

            if (hitBoxComponent != null)
            {
                hitBoxComponent.HitBoxGameObject.transform.position = position;
                hitBoxComponent.HitBoxGameObject.transform.rotation = rotation;

                var playerEntity = GetPlayerEntity(gameEntity);

                playerEntity.thirdPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
                var provider = SingletonManager.Get <HitBoxTransformProviderCache>().GetProvider(playerEntity.thirdPersonModel.Value);
                provider.Update(position, rotation);
                HitBoxGameObjectUpdater.Update(hitBoxComponent.HitBoxGameObject.transform, provider);
                playerEntity.thirdPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.CullUpdateTransforms;

                if (_logger.IsDebugEnabled)
                {
                    _logger.DebugFormat("client animator {0}", playerEntity.networkAnimator.ToStringExt());
                    StringBuilder s = new StringBuilder();
                    hitBoxComponent.HitBoxGameObject.transform.Recursively(t => s.Append("[n " + t.name + ", p " + t.position.ToStringExt() + ", r " + t.rotation.ToStringExt() + "]"));
                    _logger.DebugFormat("hitbox pos {0}, rot {1}, transforms {2}, ", position, rotation, s);
                }
            }
        }
Exemple #7
0
        private static int ShiftStreamingChilds(Vector3 diff)
        {
            int ret   = 0;
            int count = DefaultGo.StreamingRoot.transform.childCount;

            for (int i = 0; i < count; i++)
            {
                try
                {
                    var child = DefaultGo.StreamingRoot.transform.GetChild(i);
                    if (child.gameObject.activeSelf)
                    {
                        var localPosition = child.localPosition;
                        child.localPosition = localPosition + diff;
                        ret++;
                        if (_logger.IsDebugEnabled)
                        {
                            _logger.DebugFormat("move stream {0} {3} from {1} to {1}", child.name,
                                                child.GetInstanceID(), localPosition,
                                                child.localPosition);
                        }
                    }
                }
                catch (Exception e)
                {
                    _logger.ErrorFormat("ShiftStreamingChilds :{0}{1} ", i, e);
                }
            }

            return(ret);
        }
Exemple #8
0
        public StreamSceneObjectAssetPostProcessor(UnityObject unityObject)
        {
            mrs.Clear();
            trs.Clear();
            i = unityObject.AsGameObject.GetInstanceID();
            _logger.DebugFormat("StreamSceneObjectAssetPostProcessor :{0}", i);

            // record origin state info
            GameObject go = unityObject.AsGameObject;

            go.GetComponentsInChildren <MeshRenderer>(true, mrs);

            go.GetComponentsInChildren <Transform>(true, trs);
            originShadows     = new Dictionary <int, ShadowCastingMode>(mrs.Count);
            originLightProbes = new Dictionary <int, LightProbeUsage>(mrs.Count);
            originStatus      = new Dictionary <int, bool>(trs.Count);
            foreach (MeshRenderer mr in mrs)
            {
                if (mr != null)
                {
                    int id = mr.GetInstanceID();
                    originShadows.Add(id, mr.shadowCastingMode);
                    originLightProbes.Add(id, mr.lightProbeUsage);
                }
            }

            foreach (Transform tr in trs)
            {
                if (tr != null)
                {
                    int id = tr.GetInstanceID();
                    originStatus.Add(id, tr.gameObject.activeSelf);
                }
            }
        }
Exemple #9
0
        public void Update()
        {
            var objs = _deactiveMapObjects.GetEntities();

            for (int i = 0; i < objs.Length; ++i)
            {
                var obj = objs[i];
                var id  = obj.triggerObjectId.Id;
                var go  = GetTriggerObject(id);

                if (go != null)
                {
                    if (_logger.IsDebugEnabled)
                    {
                        _logger.DebugFormat("Trigger Object: Type {0} id {1} Loaded On Update Self Position {2}.", _triggerType, id, _contexts.player.flagSelfEntity.position.Value);
                    }
                    OnDeativeObjectActive(id, obj, go);
                }
            }

            if (_deactiveMapObjects.Any())
            {
                _logger.DebugFormat("Waiting For Trigger Object Loading: Type {0} Count {1}", _triggerType, _deactiveMapObjects.Count());
            }
        }
Exemple #10
0
        public void DoReceived(MemoryStream stream)
        {
            var buffer      = stream.GetBuffer();
            int messageType = LittleEndian
                ? BitConverter.ToInt32(stream.GetBuffer(), 0)
                : (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];

            stream.Seek(4, SeekOrigin.Begin);

            if (_logger.IsDebugEnabled)
            {
                _logger.DebugFormat("received message message type {0}", messageType);
            }

            if (_serializer == null)
            {
                throw new Exception("serializer not set");
            }

            object rc = _serializer.Deserialize(stream, messageType);

            if (MessageReceived != null)
            {
                ProcessMsg(new RecvMessage()
                {
                    Channel = this,
                    msg     = rc,
                    Type    = messageType
                });
            }
            else
            {
                _logger.WarnFormat("drop message because not event handler, type {0}", messageType);
            }
        }
Exemple #11
0
        public void SavePredictionCompoments(int historyId)
        {
            EntityMap localEntites = _handler.LocalEntityMap;

#pragma warning disable RefCounter001,RefCounter002
            EntityMap remoteEntities = PredictionEntityMap.Allocate();
#pragma warning restore RefCounter001,RefCounter002
            EntityMapDeepCloner.Clone(remoteEntities, localEntites, _filter);

            SavedHistory history = GetTargetHistory(historyId);
            if (history == null)
            {
                _logger.DebugFormat("SavePredictionCompoments_1  {0}", historyId);
                history = new SavedHistory(historyId, remoteEntities);
                _histories.Add(history);
            }
            else
            {
                _logger.DebugFormat("Recplce SavePredictionCompoments  {0}", historyId);
                RefCounterRecycler.Instance.ReleaseReference(history.EntityMap);
                history.EntityMap = remoteEntities;
            }
            if (_histories.Count > MaxHistory)
            {
                var tdhistory = _histories[0];
                RefCounterRecycler.Instance.ReleaseReference(tdhistory.EntityMap);
                _histories.RemoveAt(0);
            }
        }
Exemple #12
0
        protected bool IsUseActionEnabled()
        {
            var player  = _playerContext.flagSelfEntity;
            var states  = player.StateInteractController().GetCurrStates();
            var manager = SingletonManager.Get <StateTransitionConfigManager>();

            foreach (var state in states)
            {
                StateTransitionConfigItem condition = manager.GetConditionByState(state);
                if (condition == null)
                {
                    continue;
                }
                if (!condition.GetTransition(Transition.IsUseAction) /*IsUseAction*/)
                {
                    if (Logger.IsDebugEnabled)
                    {
                        Logger.DebugFormat("use action is limited by {0}", condition.State);
                    }
                    return(false);
                }
                else
                {
                    if (Logger.IsDebugEnabled)
                    {
                        Logger.DebugFormat("use action is allowed by {0}", condition.State);
                    }
                }
            }
            return(true);
        }
        /// <summary>
        /// 直接修改NetworkAnimator的动画数据
        /// </summary>
        private void OverridePlayBackNetworkAnimator(PlayerEntity player,
                                                     List <NetworkAnimatorLayer> networkAnimatorAnimatorLayers)
        {
            var currentTime = _context.session.currentTimeObject.CurrentTime;

            //覆盖受伤动画
            if (player.hasOverrideNetworkAnimator && player.overrideNetworkAnimator.IsInjuryAnimatorActive)
            {
                var normalizeTime = (currentTime - player.overrideNetworkAnimator.InjuryTriigerTime) * 0.001f /
                                    AnimatorParametersHash.InjureyStateDuration;
                _logger.DebugFormat("player:{0}, normalizeTime:{1}, trigger time:{2} ,current time:{3}",
                                    player.entityKey.Value, normalizeTime, player.overrideNetworkAnimator.InjuryTriigerTime,
                                    _context.session.currentTimeObject.CurrentTime);
                if (normalizeTime < 0)
                {
                    _logger.DebugFormat("trigger time:{0} is lager than currentTime:{1}",
                                        player.overrideNetworkAnimator.InjuryTriigerTime, currentTime);
                }
                else if (normalizeTime < 1 && normalizeTime >= 0)
                {
                    NetworkAnimatorUtil.ForceToInjureState(networkAnimatorAnimatorLayers, normalizeTime);
                }
                else
                {
                    player.overrideNetworkAnimator.IsInjuryAnimatorActive = false;
                    player.overrideNetworkAnimator.InjuryTriigerTime      = -1;
                }
            }
        }
Exemple #14
0
        public void OnHitVehicle(
            PlayerEntity srcPlayer,
            VehicleEntity targetVehicle,
            IBulletEntity bulletEntity,
            RaycastHit hit)
        {
            Collider         collider = hit.collider;
            VehiclePartIndex partIndex;
            var hitBoxFactor = VehicleEntityUtility.GetHitFactor(targetVehicle, collider, out partIndex);

            var totalDamage = GetBulletDamage(bulletEntity, hitBoxFactor);
            var gameData    = targetVehicle.GetGameData();

            gameData.DecreaseHp(partIndex, totalDamage, srcPlayer.entityKey.Value);
            srcPlayer.statisticsData.Statistics.TotalDamage += totalDamage;

            bulletEntity.IsValid = false;

            srcPlayer.statisticsData.Statistics.ShootingSuccCount++;
            _logger.DebugFormat(
                "bullet from {0} hit vehicle {1}, part {2}",
                bulletEntity.OwnerEntityKey,
                targetVehicle.entityKey.Value,
                collider.name);


            ClientEffectFactory.AddHitVehicleEffectEvent(
                srcPlayer,
                targetVehicle.entityKey.Value,
                hit.point,
                hit.point - targetVehicle.position.Value,
                hit.normal);
        }
Exemple #15
0
 public virtual void PlayerDead()
 {
     ControlRagDoll(true);
     UnmountWeaponFromHand();
     SetThridPerson();
     Logger.DebugFormat("Player Dead");
 }
Exemple #16
0
        public override void DoEventClient(IContexts contexts, IEntity entity, IEvent e)
        {
            var          playerEntity       = entity as PlayerEntity;
            Contexts     c                  = contexts as Contexts;
            BeenHitEvent ev                 = e as BeenHitEvent;
            var          playerEntityTarget = c.player.GetEntityWithEntityKey(ev.Target);

            if (playerEntity != null)
            {
                //服务器下发的被击中者调用受击命令
                if (playerEntity.entityKey.Value == ev.Target && playerEntity.hasStateInterface)
                {
                    Logger.DebugFormat("self:{0}, invoke , CanBeenHit:{1}", ev.Target, playerEntity.stateInterface.State.CanBeenHit());

                    if (playerEntity.stateInterface.State.CanBeenHit())
                    {
                        playerEntity.stateInterface.State.BeenHit();
                    }
                }
                //自己预测击中的受击者命令,强制使受击者播放受击动画
                else
                {
                    if (playerEntityTarget != null && playerEntityTarget.hasOverrideNetworkAnimator)
                    {
                        Logger.DebugFormat("target:{0}, invoke , IsInjuryAnimatorActive", ev.Target, ev.TriggerTime);

                        playerEntityTarget.overrideNetworkAnimator.IsInjuryAnimatorActive = true;
                        playerEntityTarget.overrideNetworkAnimator.InjuryTriigerTime      = ev.TriggerTime;
                    }
                }
            }
        }
Exemple #17
0
        public void MountWeaponToHand(WeaponInPackage pos)
        {
            var cmd = GetAvailableCommand();

            cmd.SetChangeWeaponInHand(MountWeaponToHandImpl, pos);
            Logger.DebugFormat("MountWeaponToHand: {0}", pos);
        }
Exemple #18
0
 public override void OnAction()
 {
     _userCmdGenerator.SetUserCmd((cmd) => cmd.IsUseAction    = true);
     _userCmdGenerator.SetUserCmd((cmd) => cmd.UseVehicleSeat = _seatId);
     _userCmdGenerator.SetUserCmd((cmd) => cmd.UseEntityId    = _vehicleId);
     _userCmdGenerator.SetUserCmd((cmd) => cmd.UseType        = (int)EUseActionType.Vehicle);
     Logger.DebugFormat("Action vehicle {0} seat {1}", _vehicleId, _seatId);
 }
Exemple #19
0
        protected void SetNewCommandFromFunctionCall(FsmInput type, float additionalValue = 0)
        {
            Logger.DebugFormat("Request Do Action : {0}   AdditionalValue  : {1}", type, additionalValue);
            var availableCommand = commandsContainer.GetAvailableItem();

            availableCommand.Type            = type;
            availableCommand.AdditionalValue = additionalValue;
        }
        /// <summary>
        /// 生成新加Component的Patch
        /// </summary>
        /// <param name="rightEntity"></param>
        /// <param name="leftEntity"></param>
        /// <param name="rightComponent"></param>
        public override void OnLeftComponentMissing(IGameEntity leftEntity, IGameEntity rightEntity, IGameComponent rightComponent)
        {
            logger.DebugFormat("AddComponentPatch :{0}, {1}", leftEntity.EntityKey, rightComponent.GetComponentId());
            var componentPatch = AddComponentPatch.Allocate(rightComponent);

            currentEntityPatch.AddComponentPatch(componentPatch);
            componentPatch.ReleaseReference();
        }
        public void SendSnapshot(int interval, SnapshotFactory snapshotFactory,
                                 Dictionary <INetworkChannel, PlayerEntity> channelToPlayer)
        {
            var           sessionObjects        = _contexts.session.serverSessionObjects;
            Bin2DConfig   bin2DConfig           = sessionObjects.Bin2DConfig;
            IBin2DManager bin                   = sessionObjects.Bin2dManager;
            int           snapshotSeq           = sessionObjects.GetNextSnapshotSeq();
            int           vehicleSimulationTime = sessionObjects.SimulationTimer.CurrentTime;
            int           serverTime            = _contexts.session.currentTimeObject.CurrentTime;

            _sendSnapshotTasks.Clear();
            var freeMoveEntitys = _globalFreeMoveEntities.GetEntities();
            var weaponEntities  = _globalWeaponEntities.GetEntities();

            foreach (var entry in channelToPlayer)
            {
                INetworkChannel channel = entry.Key;
                PlayerEntity    player  = entry.Value;
                if (player.hasStage &&
                    player.stage.CanSendSnapshot() &&
                    channel.IsConnected &&
                    !player.network.NetworkChannel.Serializer.MessageTypeInfo.SkipSendSnapShot(serverTime))
                {
                    var p = ObjectAllocatorHolder <CreateSnapshotParams> .Allocate().Build(snapshotFactory, player,
                                                                                           bin2DConfig, bin, serverTime,
                                                                                           snapshotSeq,
                                                                                           vehicleSimulationTime, channel);

                    var entitys = p.PreEnitys;
                    AddTeamPlayers(player, entitys, _contexts);
                    AddGlobalFreeMove(player, entitys, freeMoveEntitys);
                    AddWeapon(player, entitys, weaponEntities);
                    _sendSnapshotTasks.Add(p);
                }
                else
                {
                    player.network.NetworkChannel.Serializer.MessageTypeInfo.IncSendSnapShot();
                    _logger.DebugFormat("channel:{2} skip SendSnapshot :{0} {1}!", channel.IsConnected,
                                        !player.network.NetworkChannel.Serializer.MessageTypeInfo.SkipSendSnapShot(serverTime),
                                        channel.IdInfo());
                }
            }

            if (SharedConfig.MutilThread)
            {
#if ENABLE_NEW_SENDSNAPSHOT_THREAD
                ConsumerExecute();
#else
                MutilExecute();
#endif
            }
            else
            {
                MainExecute();
            }

            _logger.DebugFormat("SendSnapshot Threads Done;");
        }
Exemple #22
0
        public virtual void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            AbstractNetworkAnimator leftComponent  = (AbstractNetworkAnimator)left;
            AbstractNetworkAnimator rightComponent = (AbstractNetworkAnimator)right;

            InitFields(leftComponent);

            BaseServerTime       = leftComponent.BaseServerTime;
            BaseClientTime       = leftComponent.BaseClientTime;
            NeedChangeServerTime = leftComponent.NeedChangeServerTime;

            if (AnimatorLayers.Count > 0 && _networkAnimatorLogger.IsDebugEnabled)
            {
                _networkAnimatorLogger.DebugFormat("EntityName:{0}, before Interpolate, layer 0:{1}", _entityName,
                                                   AnimatorLayers[0].ToString());
            }

            if (leftComponent.AnimatorLayers.Count > 0 && _networkAnimatorLogger.IsDebugEnabled)
            {
                _networkAnimatorLogger.DebugFormat("EntityName:{2},Interpolate\n left layer 0:{0}\nright layer 0:{1}",
                                                   leftComponent.AnimatorLayers[0], rightComponent.AnimatorLayers[0], _entityName);
            }

            AssignAnimatorLayers(leftComponent.AnimatorLayers,
                                 rightComponent.AnimatorLayers,
                                 leftComponent.BaseServerTime,
                                 interpolationInfo.LeftServerTime,
                                 interpolationInfo.CurrentRenderTime,
                                 rightComponent.BaseServerTime,
                                 interpolationInfo.RightServerTime,
                                 interpolationInfo.Ratio);
            AssignAnimatorParameters(leftComponent.AnimatorParameters);

            if (AnimatorLayers.Count > 0 && _networkAnimatorLogger.IsDebugEnabled)
            {
                _networkAnimatorLogger.DebugFormat("EntityName:{1},after Interpolate, layer 0:{0}", AnimatorLayers[0], _entityName);
            }

            if (_networkAnimatorLogger.IsDebugEnabled)
            {
                _networkAnimatorLogger.DebugFormat(
                    "EntityName:{9},NetworkAnimatorComponent Interpolate, left.BaseServerTime:{0},right.BaseServerTime:{1},  baseServerTime delta:{2}\n interpolate.LeftServerTime:{3}, interpolate.RightServerTime:{4},interpolate.renderTime:{5},interpolate.Ratio:{6}\n interpolate deltaTime:{7}, render time delta:{8} ",
                    leftComponent.BaseServerTime,
                    rightComponent.BaseServerTime,
                    rightComponent.BaseServerTime - leftComponent.BaseServerTime,
                    interpolationInfo.LeftServerTime,
                    interpolationInfo.RightServerTime,
                    interpolationInfo.CurrentRenderTime,
                    interpolationInfo.Ratio,
                    interpolationInfo.RightServerTime - interpolationInfo.LeftServerTime,
                    interpolationInfo.CurrentRenderTime - _prevRenderTime,
                    _entityName
                    );
            }

            _prevRenderTime = interpolationInfo.CurrentRenderTime;
        }
Exemple #23
0
        public override void AfterFireBullet(IPlayerWeaponState playerWeapon, IWeaponCmd cmd, int bullet)
        {
            KickbackGroup kickbackGroup = null;
            var           hOffsetFactor = 1f;
            var           vOffsetFactor = 1f;

            if (playerWeapon.IsAiming)
            {
                kickbackGroup = _config.Aiming;
                hOffsetFactor = _config.Aiming.HPunchOffsetFactor;
                vOffsetFactor = _config.Aiming.VPunchOffsetFactor;
                Logger.DebugFormat("animing offset {0}, {1}", hOffsetFactor, vOffsetFactor);
            }
            else
            {
                kickbackGroup = _config.Default;
                hOffsetFactor = _config.Default.HPunchOffsetFactor;
                vOffsetFactor = _config.Default.VPunchOffsetFactor;
                Logger.DebugFormat("default offset {0}, {1}", hOffsetFactor, vOffsetFactor);
            }

            WeaponConfigNs.Kickback kickBackParams;
            if (playerWeapon.IsAir)
            {
                kickBackParams = kickbackGroup.Air;
            }
            else if (playerWeapon.HorizontalVeocity > _config.FastMoveSpeed)
            {
                kickBackParams = kickbackGroup.FastMove;
            }
            else if (playerWeapon.IsProne)
            {
                kickBackParams = kickbackGroup.Prone;
            }
            else if (playerWeapon.IsDuckOrProneState)
            {
                kickBackParams = kickbackGroup.Duck;
            }
            else
            {
                kickBackParams = kickbackGroup.Base;
            }



            BaseKickBack(playerWeapon, cmd.CmdSeq + bullet,
                         kickBackParams.UpBase,
                         kickBackParams.LateralBase,
                         kickBackParams.UpModifier,
                         kickBackParams.LateralModifier,
                         kickBackParams.UpMax,
                         kickBackParams.LateralMax,
                         kickBackParams.LateralTurnback,
                         hOffsetFactor,
                         vOffsetFactor);
        }
Exemple #24
0
        public void StartInternal()
        {
            lock (this)
            {
                _logger.DebugFormat("Execute :{0} StartInternal, queueCount {1}", Name, _queue.Count);
                _isStart = true;

                _queue.Clear();
            }
        }
 public void OnMapObjLoaded(UnityObject unityObj)
 {
     FillTempGameObjectList(unityObj);
     AddTempGameObjectToPool();
     ClearTempGameObjectList();
     if (_logger.IsDebugEnabled)
     {
         _logger.DebugFormat("Load Scene Trigger Object Type {0} name{1}", _typeValue, unityObj.AsGameObject.name);
     }
 }
Exemple #26
0
        public void Dispose()
        {
            OnDispose();
            SingletonManager.UnregisterSingleton <T>();
            _logger.DebugFormat("DisposableSingleton {0} is disposed.", typeof(T));

            //creat a new singleton on dispose.
            Instance = new T();
            SingletonManager.RegisterSingleton <T>();
            _logger.DebugFormat("DisposableSingleton {0} is initialized.", typeof(T));
        }
Exemple #27
0
        public void OnExpend(Entity playerEntity, EWeaponSlotType slot)
        {
            if (!slot.IsSlotChangeByCost())
            {
                return;
            }
            var player = playerEntity as PlayerEntity;

            Logger.DebugFormat("{0} OnExpend", player.entityKey.Value);
            LockPlayerBag(player);
        }
Exemple #28
0
        public int Serialize(Stream outStream, object message)
        {
            var msg          = message as UpdateLatestPacakge;
            var binaryWriter = MyBinaryWriter.Allocate(outStream);

            binaryWriter.Write(_version);
            if (MessagePool.GetPackageBySeq(msg.Head.LastUserCmdSeq) != null)
            {
                _logger.ErrorFormat("repetition  msg.Head.UserCmdSeq{0}", msg.Head.LastUserCmdSeq);
                binaryWriter.Write((byte)0);
                return(binaryWriter.WriterLenght);
            }

            MessagePool.AddMessage(msg);
            MessagePool.ClearOldMessage(msg.Head.LastAckUserCmdSeq);
            if (_sendHistoryStreams.Count > _sendCount)
            {
                RemoveHistoryFirst();
            }

            for (int i = 0; i < _sendCount; i++)
            {
                if (_sendHistorySeqs.Count > 0 && msg.Head.LastAckUserCmdSeq > 0 &&
                    _sendHistorySeqs.First() <= msg.Head.LastAckUserCmdSeq)
                {
                    RemoveHistoryFirst();
                }
                else
                {
                    break;
                }
            }

            var stream = SerializeSinaglePackage(msg);

            _sendHistoryStreams.AddLast(stream);
            _sendHistorySeqs.AddLast(msg.Head.LastUserCmdSeq);


            binaryWriter.Write((byte)_sendHistoryStreams.Count);

            foreach (var sendHistroyStream in _sendHistoryStreams)
            {
                binaryWriter.Write(sendHistroyStream.Stream.GetBuffer(),
                                   (int)(sendHistroyStream.Stream.Position - sendHistroyStream.Length), (int)sendHistroyStream.Length);
            }

            _logger.DebugFormat("send package{0}", binaryWriter.Position);

            var ret = binaryWriter.WriterLenght;

            binaryWriter.ReleaseReference();
            return(ret);
        }
Exemple #29
0
        /// <summary>
        /// 计算当前速度
        /// </summary>
        /// <param name="player"></param>
        private void CalcCurrentSpeed(PlayerEntity player)
        {
            var currentBuff = CalcuBuff(player);
            var offsetSlope = Vector3.zero;

            // 需要在斜面下滑
            if (IsSlideAloneSlope(player.characterContoller.Value, SlideSlopeOffsetLow))
            {
                offsetSlope = HandleSlideAloneSlope(CalcOnPlayerSpeed(SlideDirection, player.characterContoller.Value.transform.forward));
                KeepSlide   = true;
                // 只有在速度大于SlideSlopeMinSpeed时才播放下滑动画
                if (Mathf.Abs(CurrentVelocity.y) > SlideSlopeMinSpeed)
                {
                    player.stateInterface.State.SetSlide(true);
                    Logger.DebugFormat("set ani to slide, curvelocity:{0},IsSlideAloneSlope:{1}", CurrentVelocity.ToStringExt(), IsSlideAloneSlope(player.characterContoller.Value, SlideSlopeOffsetUp));
                }
                Logger.DebugFormat("set to move slide, slide alone slope, vec:{0}, Angle:{1}, slopeVec:{2}", CurrentVelocity.ToStringExt(), Vector3.Angle(Vector3.up, GroundInfo.groundNormal), SlideDirection.ToVector4());
            }
            else if (IsSlideFreefall(player))
            {
                KeepSlide = true;
                player.stateInterface.State.SetSlide(true);
                CalcuSpeedIfNotSlide(player, DeltaTime, currentBuff, LastVelocity);
                Logger.DebugFormat("freefall slide, curvelocity:{0}", CurrentVelocity.ToStringExt());
            }
            else
            {
                KeepSlide = false;
                player.stateInterface.State.SetSlide(false);
                CalcuSpeedIfNotSlide(player, DeltaTime, currentBuff, LastVelocity);
                if (IsHeadingOnPlain(player)) //贴合地面
                {
                    CurrentVelocity.y = SlideDirectionTan * CurrentVelocity.magnitude - 0.1f;
                }
            }

            // 计算最终的速度偏移
            CurrentVelocityOffset = player.orientation.RotationYaw * CurrentVelocityOffsetRaw + offsetSlope;

            if (IsJumpHitScene(player))
            {
                CurrentVelocity = JumpSpeedProject(player.characterContoller.Value.transform, player.characterContoller.Value.GetCharacterControllerHitInfo(HitType.Forward).HitNormal, CurrentVelocity);
                Logger.DebugFormat("project speed, curvelocity:{0}", CurrentVelocity.ToStringExt());
            }

            // debug
            if (IsVector3Evil(CurrentVelocity))
            {
                Logger.ErrorFormat("final CurrentVelocity calc is illegle, slopeDir:{0}, prevSpeed:{1}, LastNormal:{2}, set slopeDir to zero!!!, GroundInfo:{3}", CurrentVelocity.ToStringExt(), LastVelocity.ToStringExt(), LastNormal.ToStringExt(),
                                   GroundInfo.ToString());
                CurrentVelocity = Vector3.zero;
            }
        }
Exemple #30
0
 public override void OnExpend(IPlayerWeaponProcessor controller, EWeaponSlotType slot)
 {
     base.OnExpend(controller, slot);
     if (!slot.IsSlotChangeByCost())
     {
         return;
     }
     if (Logger.IsDebugEnabled)
     {
         Logger.DebugFormat("{0} OnExpend", controller.Owner);
     }
     controller.BagLockState = true;
 }