Exemple #1
0
 public void CleanupPlayer(PlayerState player)
 {
     if (player.controlledEntity != Entity.Null)
     {
         CharacterDespawnRequest.Create(m_world, player.controlledEntity);
     }
 }
Exemple #2
0
    void Spawn(bool keepCharPosition)
    {
        var playerEntity = m_Player.gameObject.GetComponent <GameObjectEntity>().Entity;
        var charControl  = EntityManager.GetComponentObject <PlayerCharacterControl>(playerEntity);

        if (keepCharPosition && m_Player.controlledEntity != Entity.Null &&
            m_world.GetEntityManager().HasComponent <CharacterInterpolatedData>(m_Player.controlledEntity))//m_world.GetEntityManager() == EntityManager
        {
            var charPresentationState = m_world.GetEntityManager().GetComponentData <CharacterInterpolatedData>(m_Player.controlledEntity);
            m_SpawnPos = charPresentationState.position;
            m_SpawnRot = Quaternion.Euler(0f, charPresentationState.rotation, 0f);
        }

        // Despawn old controlled
        if (m_Player.controlledEntity != Entity.Null)
        {
            if (EntityManager.HasComponent <Character>(m_Player.controlledEntity))
            {
                CharacterDespawnRequest.Create(PostUpdateCommands, m_Player.controlledEntity);
            }

            m_Player.controlledEntity = Entity.Null;
        }

        CharacterSpawnRequest.Create(PostUpdateCommands, charControl.RequestedMechSettings, m_SpawnPos, m_SpawnRot, playerEntity);
    }
Exemple #3
0
    void Spawn(bool keepCharPosition)
    {
        var playerEntity = m_Player.gameObject.GetComponent<GameObjectEntity>().Entity;
        var charControl = EntityManager.GetComponentObject<PlayerCharacterControl>(playerEntity);

        var controlledTrans = m_Player.controlledEntity != Entity.Null
            ? EntityManager.GetComponentObject<Transform>(m_Player.controlledEntity)
            : null;
         
        if (keepCharPosition && controlledTrans != null)
        {
            m_SpawnPos = controlledTrans.position;
            m_SpawnRot = controlledTrans.rotation;
        } 
        else
            FindSpawnTransform();

        // Despawn old controlled
        if (m_Player.controlledEntity != Entity.Null)
        {
            if (EntityManager.HasComponent<CharacterPredictedState>(m_Player.controlledEntity))
            {
                CharacterDespawnRequest.Create(PostUpdateCommands, m_Player.controlledEntity);
            }  
            
            m_Player.controlledEntity = Entity.Null;
        }

        if (charControl.characterType == 1000)
        {
            SpectatorCamSpawnRequest.Create(PostUpdateCommands, m_SpawnPos, m_SpawnRot, playerEntity);
        }
        else
            CharacterSpawnRequest.Create(PostUpdateCommands, charControl.characterType, m_SpawnPos, m_SpawnRot, playerEntity);
    }
Exemple #4
0
    public static void ServerCleanupPlayer(World world, EntityCommandBuffer ecb, Entity player)
    {
        var playerState = world.EntityManager.GetComponentData <Player.State>(player);

        if (playerState.controlledEntity != Entity.Null)
        {
            CharacterDespawnRequest.Create(ecb, playerState.controlledEntity);
        }
    }
Exemple #5
0
    public static void Create(EntityCommandBuffer commandBuffer, Entity characterEntity)
    {
        var data = new CharacterDespawnRequest()
        {
            characterEntity = characterEntity,
        };

        commandBuffer.AddComponent(commandBuffer.CreateEntity(), data);
    }
Exemple #6
0
    public static void Create(GameWorld world, Entity characterEntity)
    {
        var data = new CharacterDespawnRequest()
        {
            characterEntity = characterEntity,
        };
        var entity = world.GetEntityManager().CreateEntity(typeof(CharacterDespawnRequest));

        world.GetEntityManager().SetComponentData(entity, data);
    }
Exemple #7
0
    public void RespawnPlayer(PlayerState player)
    {
        if (player.controlledEntity == Entity.Null)
        {
            return;
        }

        if (m_GameWorld.GetEntityManager().HasComponent <Character>(player.controlledEntity))
        {
            CharacterDespawnRequest.Create(m_GameWorld, player.controlledEntity);
        }

        player.controlledEntity = Entity.Null;
    }
Exemple #8
0
    void Spawn(bool keepCharPosition)
    {
        var playerEntity = m_Player.gameObject.GetComponent <GameObjectEntity>().Entity;
        var charControl  = EntityManager.GetComponentObject <PlayerCharacterControl>(playerEntity);

        if (keepCharPosition && m_Player.controlledEntity != Entity.Null &&
            m_world.GetEntityManager().HasComponent <PresentationState>(m_Player.controlledEntity))
        {
            var charPresentationState = m_world.GetEntityManager().GetComponentData <PresentationState>(m_Player.controlledEntity);
            m_SpawnPos = charPresentationState.position;
            m_SpawnRot = Quaternion.Euler(0f, charPresentationState.rotation, 0f);
        }
        else
        {
            FindSpawnTransform();
        }

        // Despawn old controlled
        if (m_Player.controlledEntity != Entity.Null)
        {
            if (EntityManager.HasComponent <Character>(m_Player.controlledEntity))
            {
                CharacterDespawnRequest.Create(PostUpdateCommands, m_Player.controlledEntity);
            }

            m_Player.controlledEntity = Entity.Null;
        }

        if (charControl.characterType == 1000)
        {
            SpectatorCamSpawnRequest.Create(PostUpdateCommands, m_SpawnPos, m_SpawnRot, playerEntity);
        }
        else
        {
            CharacterSpawnRequest.Create(PostUpdateCommands, charControl.characterType, m_SpawnPos, m_SpawnRot, playerEntity);
        }
    }
Exemple #9
0
    protected override void OnUpdate()
    {
        //newGDV.GetCharValue();

        // Handle change of game mode
        if (m_CurrentGameModeName != modeName.Value)
        {
            m_CurrentGameModeName = modeName.Value;

            switch (m_CurrentGameModeName)
            {
            case "deathmatch":
                m_GameMode = new GameModeDeathmatch();
                break;

            case "assault":
                m_GameMode = new GameModeAssault();
                break;

            default:
                m_GameMode = new NullGameMode();
                break;
            }
            m_GameMode.Initialize(m_World, this);
            GameDebug.Log("New gamemode : '" + m_GameMode.GetType().ToString() + "'");
            Restart();
            return;
        }

        // Handle joining players
        var playerStates = m_PlayersComponentGroup.GetComponentArray <PlayerState>();

        for (int i = 0, c = playerStates.Length; i < c; ++i)
        {
            var player = playerStates[i];
            if (!player.gameModeSystemInitialized)
            {
                player.score            = 0;
                player.displayGameScore = true;
                player.goalCompletion   = -1.0f;
                m_GameMode.OnPlayerJoin(player);
                player.gameModeSystemInitialized = true;
            }
        }

        m_GameMode.Update();

        // General rules
        gameModeState.gameTimerSeconds = GetGameTimer();

        var playerEntities          = m_PlayersComponentGroup.GetEntityArray();
        var playerCharacterControls = m_PlayersComponentGroup.GetComponentArray <PlayerCharacterControl>();

        for (int i = 0, c = playerStates.Length; i < c; ++i)
        {
            var player           = playerStates[i];
            var controlledEntity = player.controlledEntity;
            var playerEntity     = playerEntities[i];


            player.actionString = player.enableCharacterSwitch ? "Press H to change character" : "";

            var charControl = playerCharacterControls[i];

            // Spawn contolled entity (character) any missing
            if (controlledEntity == Entity.Null)
            {
                var position = new Vector3(0.0f, 0.2f, 0.0f);
                var rotation = Quaternion.identity;
                GetRandomSpawnTransform(player.teamIndex, ref position, ref rotation);

                m_GameMode.OnPlayerRespawn(player, ref position, ref rotation);

                if (charControl.characterType == -1)
                {
                    charControl.characterType = Game.characterType.IntValue;
                    if (Game.allowCharChange.IntValue == 1)
                    {
                        charControl.characterType = 3;
                        //charControl.characterType = SelectedCharacter;                                                                              //Change spawned character here
                    }
                }

                if (charControl.characterType == 1000)
                {
                    SpectatorCamSpawnRequest.Create(PostUpdateCommands, position, rotation, playerEntity);
                }
                else
                {
                    CharacterSpawnRequest.Create(PostUpdateCommands, charControl.characterType, position, rotation, playerEntity);
                }

                continue;
            }

            // Has new new entity been requested
            if (charControl.requestedCharacterType != -1)
            {
                if (charControl.requestedCharacterType != charControl.characterType)
                {
                    charControl.characterType = charControl.requestedCharacterType;
                    if (player.controlledEntity != Entity.Null)
                    {
                        // Despawn current controlled entity. New entity will be created later
                        if (EntityManager.HasComponent <Character>(controlledEntity))
                        {
                            var predictedState = EntityManager.GetComponentData <CharacterPredictedData>(controlledEntity);
                            var rotation       = predictedState.velocity.magnitude > 0.01f ? Quaternion.LookRotation(predictedState.velocity.normalized) : Quaternion.identity;

                            CharacterDespawnRequest.Create(PostUpdateCommands, controlledEntity);
                            CharacterSpawnRequest.Create(PostUpdateCommands, charControl.characterType, predictedState.position, rotation, playerEntity);
                        }
                        player.controlledEntity = Entity.Null;
                    }
                }
                charControl.requestedCharacterType = -1;
                continue;
            }

            if (EntityManager.HasComponent <HealthStateData>(controlledEntity))
            {
                // Is character dead ?
                var healthState = EntityManager.GetComponentData <HealthStateData>(controlledEntity);
                if (healthState.health == 0)
                {
                    // Send kill msg
                    if (healthState.deathTick == m_World.worldTime.tick)
                    {
                        var         killerEntity = healthState.killedBy;
                        var         killerIndex  = FindPlayerControlling(ref playerStates, killerEntity);
                        PlayerState killerPlayer = null;
                        if (killerIndex != -1)
                        {
                            killerPlayer = playerStates[killerIndex];
                            var format = s_KillMessages[Random.Range(0, s_KillMessages.Length)];
                            var l      = StringFormatter.Write(ref _msgBuf, 0, format, killerPlayer.playerName, player.playerName, m_TeamColors[killerPlayer.teamIndex], m_TeamColors[player.teamIndex]);
                            chatSystem.SendChatAnnouncement(new CharBufView(_msgBuf, l));
                        }
                        else
                        {
                            var format = s_SuicideMessages[Random.Range(0, s_SuicideMessages.Length)];
                            var l      = StringFormatter.Write(ref _msgBuf, 0, format, player.playerName, m_TeamColors[player.teamIndex]);
                            chatSystem.SendChatAnnouncement(new CharBufView(_msgBuf, l));
                        }
                        m_GameMode.OnPlayerKilled(player, killerPlayer);
                    }

                    // Respawn dead players except if in ended mode
                    if (m_EnableRespawning && (m_World.worldTime.tick - healthState.deathTick) *
                        m_World.worldTime.tickInterval > respawnDelay.IntValue)
                    {
                        // Despawn current controlled entity. New entity will be created later
                        if (EntityManager.HasComponent <Character>(controlledEntity))
                        {
                            CharacterDespawnRequest.Create(PostUpdateCommands, controlledEntity);
                        }
                        player.controlledEntity = Entity.Null;
                    }
                }
            }
        }
    }