public void Initialize() { PlayerConfigComponent playerConfig = _playerConfig.Components1[0]; GameObject[] playerObjects = GameObject.FindGameObjectsWithTag("Player"); foreach (GameObject player in playerObjects) { PlayerComponent playerComponent; MoveComponent moveComponent; int playerEntity = _ecsWorld.CreateEntityWith(out playerComponent, out moveComponent); Vector2Int startPosition = player.transform.position.ToVector2Int(); moveComponent.Heading = playerConfig.PlayerCount % 2 != 0 ? Directions.RIGHT : Directions.LEFT; moveComponent.DesiredPosition = startPosition; moveComponent.Speed = playerConfig.StartSpeed; playerComponent.Lives = playerConfig.StartLives; playerComponent.Num = ++playerConfig.PlayerCount; playerComponent.StartPosition = startPosition; _ecsWorld.AddComponent <CreateWorldObjectEvent>(playerEntity).Transform = player.transform; } }
public void Run() { PlayerConfigComponent config = _playerConfig.Components1[0]; foreach (int i in _playerPeds) { Ped ped = _playerPeds.Components1[i].ThisPed; EcsEntity entity = _playerPeds.Entities[i]; if (Game.LocalPlayer.Character.Equals(ped)) { continue; } _ecsWorld.RemoveComponent <PlayerMarkComponent>(entity); #if DEBUG _logger.MakeLog($"PlayerMark removed from ped {entity.GetEntityName()}, 'cause different characters"); #endif } foreach (int i in _newPeds) { Ped ped = _newPeds.Components1[i].ThisPed; EcsEntity entity = _newPeds.Entities[i]; if (!ped.IsLocalPlayer) { continue; } if (config.PlayerEnabled) { MarkEntityAsPed(entity); } else { _ecsWorld.RemoveComponent <NewPedMarkComponent>(entity); #if DEBUG _logger.MakeLog($"NewPedMark removed from ped {entity.GetEntityName()}, 'cause player is disabled"); #endif } } _ecsWorld.ProcessDelayedUpdates(); if (config.PlayerEnabled && _playerPeds.IsEmpty()) { Ped playerPed = Game.LocalPlayer.Character; GswWorldComponent gswWorld = _gswWorld.Components1[0]; if (!gswWorld.PedsToEntityDict.TryGetValue(playerPed, out EcsEntity entity)) { #if DEBUG _logger.MakeLog($"No players found! PlayerPed {playerPed.Model.Name} will force create!"); #endif _ecsWorld.CreateEntityWith(out ForceCreateGswPedEvent forceCreateEvent); forceCreateEvent.TargetPed = playerPed; return; } #if DEBUG _logger.MakeLog("Entity with Player Ped already exists and will be removed!"); #endif _ecsWorld.AddComponent <RemovedPedMarkComponent>(entity); } }