private void MergeUserCmd(PlayerEntity player) { var tempList = player.userCmd.UserCmdStepList; UserCmd last = UserCmd.Allocate(); last.ReInit(); ((UserCmd)tempList.Last()).CopyTo(last); last.Seq = _userCmdSeq++; last.FrameInterval = 0; last.DeltaYaw = 0; last.DeltaPitch = 0; foreach (var cmd in tempList) { last.DeltaYaw += cmd.DeltaYaw; last.DeltaPitch += cmd.DeltaPitch; last.FrameInterval += cmd.FrameInterval; last.Buttons |= cmd.Buttons; last.RenderTime = cmd.RenderTime; last.ClientTime = cmd.ClientTime; last.SnapshotId = cmd.SnapshotId; last.PredicatedOnce = cmd.PredicatedOnce; last.MoveHorizontal = cmd.MoveHorizontal; last.MoveVertical = cmd.MoveVertical; last.MoveUpDown = cmd.MoveUpDown; last.ChangedSeat = cmd.ChangedSeat > 0 ? cmd.ChangedSeat : last.ChangedSeat; last.ChangeChannel = cmd.ChangeChannel > 0 ? cmd.ChangeChannel : last.ChangeChannel; last.CurWeapon = cmd.CurWeapon == 0 ? last.CurWeapon : cmd.CurWeapon; last.ManualPickUpEquip = cmd.ManualPickUpEquip > 0 ? cmd.ManualPickUpEquip : last.ManualPickUpEquip; last.AutoPickUpEquip = UserCmd.CopyList(last.AutoPickUpEquip, cmd.AutoPickUpEquip); last.UseEntityId = cmd.UseEntityId > 0 ? cmd.UseEntityId : last.UseEntityId; last.UseVehicleSeat = cmd.UseVehicleSeat > 0 ? cmd.UseVehicleSeat : last.UseVehicleSeat; last.UseType = cmd.UseType > 0 ? cmd.UseType : last.UseType; last.BagIndex = cmd.BagIndex > 0 ? cmd.BagIndex : last.BagIndex; //_logger.ErrorFormat("cmd;{0} {1}",cmd.CurWeapon,last.CurWeapon); cmd.ReleaseReference(); } tempList.Clear(); player.userCmd.AddLatest(last); last.ReleaseReference(); }
public void SyncToEntity(IPlayerUserCmdGetter getter, UpdateLatestPacakge package) { PlayerEntity playerEntity = getter.OwnerEntity as PlayerEntity; IGameEntity gameEntity = playerEntity.entityAdapter.SelfAdapter; int count = package.UpdateComponents.Count; for (var i = 0; i < count; i++) { IUpdateComponent component = package.UpdateComponents[i]; var id = component.GetComponentId(); var target = gameEntity.GetComponent(id); if (target == null) { target = gameEntity.AddComponent(id); } var p = GetProfile(component.GetComponentId()); try { p.BeginProfileOnlyEnableProfile(); ((INetworkObject)target).CopyFrom(component); if (id == (int)EComponentIds.SendUserCmd) { UserCmd cmd = UserCmd.Allocate(); CopyForm(cmd, component as SendUserCmdComponent); playerEntity.userCmd.AddLatest(cmd); cmd.Seq = package.Head.LastUserCmdSeq; cmd.SnapshotId = package.Head.LastSnapshotId; cmd.ReleaseReference(); } } finally { p.EndProfileOnlyEnableProfile(); } } }
public void SyncToEntity(IUserCmdOwner owner, UpdateLatestPacakge package) { PlayerEntity playerEntity = owner.OwnerEntity as PlayerEntity; IGameEntity gameEntity = playerEntity.entityAdapter.SelfAdapter; foreach (var component in package.UpdateComponents) { var target = gameEntity.GetComponent(component.GetComponentId()); if (target == null) { target = gameEntity.AddComponent(component.GetComponentId()); } ((INetworkObject)target).CopyFrom(component); if (component is SendUserCmdComponent) { UserCmd cmd = UserCmd.Allocate(); CopyForm(cmd, component as SendUserCmdComponent); playerEntity.userCmd.AddLatest(cmd); cmd.Seq = package.Head.UserCmdSeq; cmd.SnapshotId = package.Head.LastSnapshotId; cmd.ReleaseReference(); } } }