예제 #1
0
    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);
    }
예제 #2
0
    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);
    }
예제 #3
0
    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);
    }
예제 #4
0
    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);
    }
예제 #5
0
    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);
    }
예제 #6
0
    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);
    }