Пример #1
0
        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;
            }
        }
Пример #2
0
        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);
            }
        }