void EnterActiveState() { m_GameWorld.RegisterSceneEntities(); m_resourceSystem = new BundledResourceManager(m_GameWorld, "BundledResources/Client"); // Create serializers so we get errors in preview build var dataComponentSerializers = new DataComponentSerializers(); m_CharacterModule = new CharacterModulePreview(m_GameWorld, m_resourceSystem); m_PlayerModuleClient = new PlayerModuleClient(m_GameWorld); m_PlayerModuleServer = new PlayerModuleServer(m_GameWorld, m_resourceSystem); m_UpdateReplicatedOwnerFlag = m_GameWorld.GetECSWorld().CreateSystem <UpdateReplicatedOwnerFlag>(m_GameWorld); m_PlayerModuleClient.RegisterLocalPlayer(0, null); // Spawn PlayerState, Character and link up LocalPlayer m_Player = m_PlayerModuleServer.CreatePlayer(m_GameWorld, 0, "LocalMech", true); var playerEntity = m_Player.gameObject.GetComponent <GameObjectEntity>().Entity; //var charControl = m_Player.gameObject.GetComponent<PlayerCharacterControl>(); var charControl = m_GameWorld.GetEntityManager().GetComponentObject <PlayerCharacterControl>(playerEntity); charControl.RequestedMechSettings = new MechSettings(); m_Player.teamIndex = 0; m_previewGameMode = m_GameWorld.GetECSWorld().CreateSystem <PreviewGameMode>(m_GameWorld, m_Player); Game.SetMousePointerLock(true); }
public ClientGameWorld(GameWorld world, NetworkClient networkClient, NetworkStatisticsClient _networkStatistics, BundledResourceManager resourceSystem) { _gameWorld = world; _networkClient = networkClient; this._networkStatistics = _networkStatistics; m_CharacterModule = new CharacterModuleClient(_gameWorld, resourceSystem); m_PlayerModule = new PlayerModuleClient(_gameWorld); m_ReplicatedEntityModule = new ReplicatedEntityModuleClient(_gameWorld, resourceSystem); }
public ClientGameWorld(GameWorld world, NetworkClient networkClient, NetworkStatisticsClient networkStatistics, BundledResourceManager resourceSystem) { m_NetworkClient = networkClient; m_NetworkStatistics = networkStatistics; m_GameWorld = world; m_CharacterModule = new CharacterModuleClient(m_GameWorld, resourceSystem); m_ProjectileModule = new ProjectileModuleClient(m_GameWorld, resourceSystem); m_HitCollisionModule = new HitCollisionModule(m_GameWorld, 1, 1); m_PlayerModule = new PlayerModuleClient(m_GameWorld); m_SpectatorCamModule = new SpectatorCamModuleClient(m_GameWorld); m_EffectModule = new EffectModuleClient(m_GameWorld, resourceSystem); m_ReplicatedEntityModule = new ReplicatedEntityModuleClient(m_GameWorld, resourceSystem); m_ItemModule = new ItemModule(m_GameWorld); m_ragdollSystem = new RagdollModule(m_GameWorld); m_GameModeSystem = m_GameWorld.GetECSWorld().CreateManager <GameModeSystemClient>(m_GameWorld); m_ClientFrontendUpdate = m_GameWorld.GetECSWorld().CreateManager <ClientFrontendUpdate>(m_GameWorld); m_DestructiblePropSystemClient = m_GameWorld.GetECSWorld().CreateManager <DestructiblePropSystemClient>(m_GameWorld); m_ApplyGrenadePresentation = m_GameWorld.GetECSWorld().CreateManager <ApplyGrenadePresentation>(m_GameWorld); m_UpdatePresentationOwners = m_GameWorld.GetECSWorld().CreateManager <UpdatePresentationOwners>( m_GameWorld, resourceSystem); m_HandlePresentationOwnerDespawn = m_GameWorld.GetECSWorld().CreateManager <HandlePresentationOwnerDesawn>(m_GameWorld); m_moverUpdate = m_GameWorld.GetECSWorld().CreateManager <MoverUpdate>(m_GameWorld); m_TeleporterSystemClient = m_GameWorld.GetECSWorld().CreateManager <TeleporterSystemClient>(m_GameWorld); m_SpinSystem = m_GameWorld.GetECSWorld().CreateManager <SpinSystem>(m_GameWorld); m_HandleNamePlateOwnerSpawn = m_GameWorld.GetECSWorld().CreateManager <HandleNamePlateSpawn>(m_GameWorld); m_HandleNamePlateOwnerDespawn = m_GameWorld.GetECSWorld().CreateManager <HandleNamePlateDespawn>(m_GameWorld); m_UpdateNamePlates = m_GameWorld.GetECSWorld().CreateManager <UpdateNamePlates>(m_GameWorld); m_GameModeSystem.SetLocalPlayerId(m_NetworkClient.clientId); m_TwistSystem = new TwistSystem(m_GameWorld); m_FanSystem = new FanSystem(m_GameWorld); m_TranslateScaleSystem = new TranslateScaleSystem(m_GameWorld); }
public ClientGameWorld(GameWorld world, NetworkClient networkClient, NetworkStatisticsClient networkStatistics, BundledResourceManager resourceSystem) { m_NetworkClient = networkClient; m_NetworkStatistics = networkStatistics; m_GameWorld = world; m_CharacterModule = new CharacterModuleClient(m_GameWorld, resourceSystem); m_ProjectileModule = new ProjectileModuleClient(m_GameWorld, resourceSystem); m_HitCollisionModule = new HitCollisionModule(m_GameWorld, 1, 1); m_PlayerModule = new PlayerModuleClient(m_GameWorld); m_DebugPrimitiveModule = new DebugPrimitiveModule(m_GameWorld, 1.0f, 0); m_SpectatorCamModule = new SpectatorCamModuleClient(m_GameWorld); m_EffectModule = new EffectModuleClient(m_GameWorld, resourceSystem); m_ReplicatedEntityModule = new ReplicatedEntityModuleClient(m_GameWorld, resourceSystem); m_WeaponsModule = new WeaponsModule(m_GameWorld, resourceSystem, false); m_BonusModule = new BonusModuleClient(m_GameWorld, resourceSystem); m_ragdollSystem = new RagdollModule(m_GameWorld); m_GameModeSystem = m_GameWorld.GetECSWorld().CreateManager <GameModeSystemClient>(m_GameWorld, Game.game.clientFrontend.scoreboardPanel.uiBinding, Game.game.clientFrontend.gameScorePanel); m_ClientFrontendUpdate = m_GameWorld.GetECSWorld().CreateManager <ClientFrontendUpdate>(m_GameWorld); m_DestructiblePropSystemClient = m_GameWorld.GetECSWorld().CreateManager <DestructiblePropSystemClient>(m_GameWorld); m_InterpolateGrenadeSystem = m_GameWorld.GetECSWorld().CreateManager <InterpolateGrenadePresentation>(m_GameWorld); m_ApplyGrenadePresentation = m_GameWorld.GetECSWorld().CreateManager <ApplyGrenadePresentation>(m_GameWorld); m_moverUpdate = m_GameWorld.GetECSWorld().CreateManager <MoverUpdate>(m_GameWorld); m_TeleporterSystemClient = m_GameWorld.GetECSWorld().CreateManager <TeleporterSystemClient>(m_GameWorld); m_SpinSystem = m_GameWorld.GetECSWorld().CreateManager <SpinSystem>(m_GameWorld); m_HandleNamePlateOwnerSpawn = m_GameWorld.GetECSWorld().CreateManager <HandleNamePlateSpawn>(m_GameWorld); m_HandleNamePlateOwnerDespawn = m_GameWorld.GetECSWorld().CreateManager <HandleNamePlateDespawn>(m_GameWorld); m_UpdateNamePlates = m_GameWorld.GetECSWorld().CreateManager <UpdateNamePlates>(m_GameWorld); m_GameModeSystem.SetLocalPlayerId(m_NetworkClient.clientId); m_TwistSystem = new TwistSystem(m_GameWorld); m_FanSystem = new FanSystem(m_GameWorld); m_TranslateScaleSystem = new TranslateScaleSystem(m_GameWorld); }
void EnterActiveState() { m_GameWorld.RegisterSceneEntities(); m_resourceSystem = new BundledResourceManager("BundledResources/Client"); m_CharacterModule = new CharacterModulePreview(m_GameWorld, m_resourceSystem); m_ProjectileModule = new ProjectileModuleClient(m_GameWorld, m_resourceSystem); m_HitCollisionModule = new HitCollisionModule(m_GameWorld, 1, 2); m_PlayerModuleClient = new PlayerModuleClient(m_GameWorld); m_PlayerModuleServer = new PlayerModuleServer(m_GameWorld, m_resourceSystem); m_DebugPrimitiveModule = new DebugPrimitiveModule(m_GameWorld, 1.0f, 0); m_SpectatorCamModuleServer = new SpectatorCamModuleServer(m_GameWorld, m_resourceSystem); m_SpectatorCamModuleClient = new SpectatorCamModuleClient(m_GameWorld); m_EffectModule = new EffectModuleClient(m_GameWorld, m_resourceSystem); m_WeaponsModule = new WeaponsModule(m_GameWorld, m_resourceSystem, false); m_ragdollModule = new RagdollModule(m_GameWorld); m_DespawnProjectiles = m_GameWorld.GetECSWorld().CreateManager <DespawnProjectiles>(m_GameWorld); m_DamageAreaSystemServer = m_GameWorld.GetECSWorld().CreateManager <DamageAreaSystemServer>(m_GameWorld); m_TeleporterSystemServer = m_GameWorld.GetECSWorld().CreateManager <TeleporterSystemServer>(m_GameWorld); m_TeleporterSystemClient = m_GameWorld.GetECSWorld().CreateManager <TeleporterSystemClient>(m_GameWorld); m_UpdateDestructableProps = m_GameWorld.GetECSWorld().CreateManager <UpdateDestructableProps>(m_GameWorld); m_DestructiblePropSystemClient = m_GameWorld.GetECSWorld().CreateManager <DestructiblePropSystemClient>(m_GameWorld); m_HandleGrenadeRequests = m_GameWorld.GetECSWorld().CreateManager <HandleGrenadeRequest>(m_GameWorld, m_resourceSystem); m_StartGrenadeMovement = m_GameWorld.GetECSWorld().CreateManager <StartGrenadeMovement>(m_GameWorld); m_FinalizeGrenadeMovement = m_GameWorld.GetECSWorld().CreateManager <FinalizeGrenadeMovement>(m_GameWorld); m_ApplyGrenadePresentation = m_GameWorld.GetECSWorld().CreateManager <ApplyGrenadePresentation>(m_GameWorld); m_moverUpdate = m_GameWorld.GetECSWorld().CreateManager <MoverUpdate>(m_GameWorld); m_SpinSystem = m_GameWorld.GetECSWorld().CreateManager <SpinSystem>(m_GameWorld); m_HandleNamePlateOwnerSpawn = m_GameWorld.GetECSWorld().CreateManager <HandleNamePlateSpawn>(m_GameWorld); m_HandleNamePlateOwnerDespawn = m_GameWorld.GetECSWorld().CreateManager <HandleNamePlateDespawn>(m_GameWorld); m_UpdateNamePlates = m_GameWorld.GetECSWorld().CreateManager <UpdateNamePlates>(m_GameWorld); m_UpdateReplicatedOwnerFlag = m_GameWorld.GetECSWorld().CreateManager <UpdateReplicatedOwnerFlag>(m_GameWorld); m_TwistSystem = new TwistSystem(m_GameWorld); m_FanSystem = new FanSystem(m_GameWorld); m_TranslateScaleSystem = new TranslateScaleSystem(m_GameWorld); m_PlayerModuleClient.RegisterLocalPlayer(0, null); // Spawn PlayerState, Character and link up LocalPlayer m_Player = m_PlayerModuleServer.CreatePlayer(m_GameWorld, 0, "LocalHero", true); var playerEntity = m_Player.gameObject.GetComponent <GameObjectEntity>().Entity; var charControl = m_GameWorld.GetEntityManager().GetComponentObject <PlayerCharacterControl>(playerEntity); charControl.characterType = math.max(Game.characterType.IntValue, 0); m_Player.teamIndex = 0; m_previewGameMode = m_GameWorld.GetECSWorld().CreateManager <PreviewGameMode>(m_GameWorld, m_Player); Game.SetMousePointerLock(true); }
void HandleTime(float frameDuration) { // Update tick rate (this will only change runtime in test scenarios) // TODO (petera) consider use ConfigVars with Server flag for this if (m_NetworkClient.serverTickRate != m_PredictedTime.tickRate) { m_PredictedTime.tickRate = m_NetworkClient.serverTickRate; m_RenderTime.tickRate = m_NetworkClient.serverTickRate; } // Sample input into current command // The time passed in here is used to calculate the amount of rotation from stick position // The command stores final view direction bool userInputEnabled = false; PlayerModuleClient.SampleInput(m_localPlayer, userInputEnabled, Time.deltaTime, m_RenderTime.tick); int prevTick = m_PredictedTime.tick; // Increment time var deltaPredictedTime = frameDuration * frameTimeScale; m_PredictedTime.AddDuration(deltaPredictedTime); // Adjust time to be synchronized with server int preferredBufferedCommandCount = 2; int preferredTick = m_NetworkClient.serverTime + (int)(((m_NetworkClient.timeSinceSnapshot + m_NetworkStatistics.rtt.average) / 1000.0f) * m_GameWorld.worldTime.tickRate) + preferredBufferedCommandCount; bool resetTime = false; if (!resetTime && m_PredictedTime.tick < preferredTick - 3) { GameDebug.Log(string.Format("Client hard catchup ... ")); resetTime = true; } if (!resetTime && m_PredictedTime.tick > preferredTick + 6) { GameDebug.Log(string.Format("Client hard slowdown ... ")); resetTime = true; } frameTimeScale = 1.0f; if (resetTime) { GameDebug.Log(string.Format("CATCHUP ({0} -> {1})", m_PredictedTime.tick, preferredTick)); m_NetworkStatistics.notifyHardCatchup = true; m_GameWorld.nextTickTime = Game.frameTime; m_PredictedTime.tick = preferredTick; m_PredictedTime.SetTime(preferredTick, 0); } else { int bufferedCommands = m_NetworkClient.lastAcknowlegdedCommandTime - m_NetworkClient.serverTime; if (bufferedCommands < preferredBufferedCommandCount) { frameTimeScale = 1.01f; } if (bufferedCommands > preferredBufferedCommandCount) { frameTimeScale = 0.99f; } } // Increment interpolation time m_RenderTime.AddDuration(frameDuration * frameTimeScale); // Force interp time to not exeede server time if (m_RenderTime.tick >= m_NetworkClient.serverTime) { m_RenderTime.SetTime(m_NetworkClient.serverTime, 0); } // hard catchup if (m_RenderTime.tick < m_NetworkClient.serverTime - 10) { m_RenderTime.SetTime(m_NetworkClient.serverTime - 8, 0); } // Throttle up to catch up if (m_RenderTime.tick < m_NetworkClient.serverTime - 1) { m_RenderTime.AddDuration(frameDuration * 0.01f); } // If predicted time has entered a new tick the stored commands should be sent to server if (m_PredictedTime.tick > prevTick) { var oldestCommandToSend = Mathf.Max(prevTick, m_PredictedTime.tick - NetworkConfig.commandClientBufferSize); for (int tick = oldestCommandToSend; tick < m_PredictedTime.tick; tick++) { PlayerModuleClient.StoreCommand(m_localPlayer, tick); PlayerModuleClient.SendCommand(m_localPlayer, tick); } //m_PlayerModule.ResetInput(userInputEnabled); PlayerModuleClient.StoreCommand(m_localPlayer, m_PredictedTime.tick); } // Store command PlayerModuleClient.StoreCommand(m_localPlayer, m_PredictedTime.tick); }