Exemple #1
0
        public void Run()
        {
#if DEBUG
            GunshotWound2.LastSystem = nameof(IncreasePainSystem);
#endif
            var woundConfig = _config.Data.WoundConfig;

            for (var i = 0; i < _events.EntitiesCount; i++)
            {
                var component = _events.Components1[i];
                var pedEntity = component.Entity;
                if (!_ecsWorld.IsEntityExists(pedEntity))
                {
                    _ecsWorld.RemoveEntity(_events.Entities[i]);
                    continue;
                }

                var woundedPed = _ecsWorld.GetComponent <WoundedPedComponent>(pedEntity);
                if (woundedPed != null && component.PainAmount > 0f)
                {
                    var pain = _ecsWorld.EnsureComponent <PainComponent>(pedEntity, out var firstPain);
                    if (firstPain)
                    {
                        pain.CurrentPain = 0f;
                    }

                    var newPain       = component.PainAmount;
                    var painDeviation = GunshotWound2.Random.NextFloat(
                        -woundConfig.PainDeviation * newPain,
                        woundConfig.PainDeviation * newPain);
                    pain.CurrentPain += woundConfig.PainMultiplier * newPain + painDeviation;

                    var painAnimIndex = GunshotWound2.Random.Next(1, 6);
                    PainRecoverySystem.PlayFacialAnim(woundedPed, $"pain_{painAnimIndex.ToString()}");

                    var painfulWound = woundConfig.PainfulWoundPercent * woundedPed.MaximalPain;
                    if (woundedPed.IsPlayer && newPain > painfulWound / 2f)
                    {
                        _ecsWorld.CreateEntityWith <AddCameraShakeEvent>().Length = CameraShakeLength.ONE_TIME;
                    }

                    if (newPain > painfulWound)
                    {
                        if (woundConfig.RagdollOnPainfulWound)
                        {
                            _ecsWorld.CreateEntityWith(out SetPedToRagdollEvent ragdoll);
                            ragdoll.Entity       = pedEntity;
                            ragdoll.RagdollState = RagdollStates.SHORT;
                        }

                        if (woundedPed.IsPlayer)
                        {
                            _ecsWorld.CreateEntityWith <AddFlashEvent>();
                        }
                    }
                }

                _ecsWorld.RemoveEntity(_events.Entities[i]);
            }
        }
        public void Run()
        {
            GunshotWound2.LastSystem = nameof(BaseCriticalSystem <T>);

            for (int i = 0; i < Components.EntitiesCount; i++)
            {
                int pedEntity  = Components.Components1[i].PedEntity;
                var woundedPed = EcsWorld.GetComponent <WoundedPedComponent>(pedEntity);

                if (woundedPed == null)
                {
                    EcsWorld.RemoveEntity(Components.Entities[i]);
                    continue;
                }

                if (woundedPed.DamagedParts.HasFlag(Damage))
                {
                    EcsWorld.RemoveEntity(Components.Entities[i]);
                    continue;
                }

                woundedPed.DamagedParts = woundedPed.DamagedParts | Damage;
                if (woundedPed.IsPlayer)
                {
                    ActionForPlayer(woundedPed, pedEntity);
                }
                else
                {
                    ActionForNpc(woundedPed, pedEntity);
                }

                EcsWorld.RemoveEntity(Components.Entities[i]);
            }
        }
Exemple #3
0
        private void ReceiveConnects()
        {
            for (int i = 0; i < _connectedClients.EntitiesCount; i++)
            {
                _connectedClients.Components1[i].ConnectedClient = null;
                _ecsWorld.RemoveEntity(_connectedClients.Entities[i]);
            }

            foreach (ClientInfo clientInfo in _config.Data.EcsNetworkListener.GetConnectedClients())
            {
                _ecsWorld.CreateEntityWith <ClientConnectedEvent>().ConnectedClient = clientInfo;
            }

            for (int i = 0; i < _disconnectedClients.EntitiesCount; i++)
            {
                _disconnectedClients.Components1[i].DisconnectedClient = null;
                _ecsWorld.RemoveEntity(_disconnectedClients.Entities[i]);
            }

            foreach (ClientInfo clientInfo in _config.Data.EcsNetworkListener.GetDisconnectedClients())
            {
                _ecsWorld.CreateEntityWith <ClientDisconnectedEvent>().DisconnectedClient = clientInfo;
            }

            for (int i = 0; i < _connectEvents.EntitiesCount; i++)
            {
                ConnectToEvent connectEvent = _connectEvents.Components1[i];
                _config.Data.EcsNetworkListener.Connect(connectEvent.Address, connectEvent.Port);
                _ecsWorld.RemoveEntity(_connectEvents.Entities[i]);
            }
        }
Exemple #4
0
        public void Run()
        {
            GunshotWound2.LastSystem = nameof(BaseDamageSystem <T>);

            for (int damageIndex = 0; damageIndex < HitComponents.EntitiesCount; damageIndex++)
            {
                var damage    = HitComponents.Components1[damageIndex];
                var pedEntity = damage.PedEntity;

                BodyHitComponent bodyHitComponent = null;
                for (int bodyIndex = 0; bodyIndex < BodyHitComponents.EntitiesCount; bodyIndex++)
                {
                    var bodyDamage = BodyHitComponents.Components1[bodyIndex];
                    if (bodyDamage.PedEntity != pedEntity)
                    {
                        continue;
                    }

                    bodyHitComponent = bodyDamage;
                    EcsWorld.RemoveEntity(BodyHitComponents.Entities[bodyIndex]);
                    break;
                }

                EcsWorld.RemoveEntity(HitComponents.Entities[damageIndex]);
                ProcessWound(bodyHitComponent, pedEntity);
            }
        }
 void DeleteAllBarrierAreaSpawnEvents()
 {
     foreach (var i in _barrierAreaSpawnEventFilter)
     {
         _world.RemoveEntity(_barrierAreaSpawnEventFilter.Entities[0]);
     }
 }
        private void ClearWorld()
        {
            for (var i = 0; i < _playerFilter.EntitiesCount; i++)
            {
                var component = _playerFilter.Components1[i];
                component.Transform = null;
                component.Speed     = 0;
                _world.RemoveEntity(_playerFilter.Entities[i]);
            }

            for (var i = 0; i < _checkPointFilter.EntitiesCount; i++)
            {
                _checkPointFilter.Components1[i].Coords = Vector3.zero;
                _world.RemoveEntity(_checkPointFilter.Entities[i]);
            }

            for (var i = 0; i < _userInputFilter.EntitiesCount; i++)
            {
                _userInputFilter.Components1[i].MoveDirection = Direction.Left;
                _world.RemoveEntity(_userInputFilter.Entities[i]);
            }

            for (var i = 0; i < _gameOverFilter.EntitiesCount; i++)
            {
                _world.RemoveEntity(_gameOverFilter.Entities[i]);
            }
        }
Exemple #7
0
 void IEcsInitSystem.Destroy()
 {
     foreach (var i in _scoreUiFilter)
     {
         _scoreUiFilter.Components1[i].Ui = null;
         _world.RemoveEntity(_scoreUiFilter.Entities[i]);
     }
 }
Exemple #8
0
 void IEcsInitSystem.Destroy()
 {
     for (var i = 0; i < _scoreUiFilter.EntitiesCount; i++)
     {
         _scoreUiFilter.Components1[i].Ui = null;
         _world.RemoveEntity(_scoreUiFilter.Entities[i]);
     }
 }
Exemple #9
0
        void IEcsInitSystem.Destroy()
        {
            foreach (var i in _mapFilter)
            {
                _world.RemoveEntity(_mapFilter.Entities[i]);
            }

            foreach (var i in _barrierAreaFilter)
            {
                _world.RemoveEntity(_barrierAreaFilter.Entities[i]);
            }
        }
        public void Run()
        {
            GunshotWound2.LastSystem = nameof(InstantHealSystem);

            for (int i = 0; i < _components.EntitiesCount; i++)
            {
                int pedEntity  = _components.Components1[i].PedEntity;
                var woundedPed = _ecsWorld.GetComponent <WoundedPedComponent>(pedEntity);

                if (woundedPed != null)
                {
                    if (woundedPed.IsPlayer)
                    {
                        Function.Call(Hash._SET_CAM_EFFECT, 0);
                        Function.Call(Hash.SET_PLAYER_SPRINT, Game.Player, true);
                        Function.Call(Hash._STOP_ALL_SCREEN_EFFECTS);
                        woundedPed.Health = _mainConfig.Data.PlayerConfig.MaximalHealth;
                        _ecsWorld.CreateEntityWith <AdrenalineComponent>().Revert = true;
                        Game.Player.IgnoredByEveryone = false;
                    }
                    else
                    {
                        woundedPed.Health           = _random.Next(50, _mainConfig.Data.NpcConfig.MaximalStartHealth);
                        woundedPed.ThisPed.Accuracy = woundedPed.DefaultAccuracy;
                    }

                    woundedPed.IsDead       = false;
                    woundedPed.DamagedParts = 0;
                    woundedPed.PainMeter    = 0;
                    Function.Call(Hash.CLEAR_PED_BLOOD_DAMAGE, woundedPed.ThisPed);
                    Function.Call(Hash.SET_PED_MOVE_RATE_OVERRIDE, woundedPed.ThisPed, 1f);
                    woundedPed.ThisPed.Health = (int)woundedPed.Health;
                    woundedPed.Armor          = woundedPed.ThisPed.Armor;

                    _ecsWorld.CreateEntityWith <NoPainStateComponent>().PedEntity = pedEntity;
                }

                for (int bleedIndex = 0; bleedIndex < _bleedingComponents.EntitiesCount; bleedIndex++)
                {
                    if (_bleedingComponents.Components1[bleedIndex].PedEntity != pedEntity)
                    {
                        continue;
                    }

                    _ecsWorld.RemoveEntity(_bleedingComponents.Entities[bleedIndex]);
                }

                _ecsWorld.RemoveEntity(_components.Entities[i]);
            }
        }
Exemple #11
0
        public void Run()
        {
            GunshotWound2.LastSystem = nameof(HelmetRequestSystem);

            if (_requests.EntitiesCount == 0)
            {
                return;
            }

            var player = Game.Player;

            if (player.Character.IsWearingHelmet)
            {
                player.Character.RemoveHelmet(false);
            }
            else
            {
                if (player.Money > _config.Data.PlayerConfig.MoneyForHelmet)
                {
                    player.Money -= _config.Data.PlayerConfig.MoneyForHelmet;
                    player.Character.GiveHelmet(false, HelmetType.RegularMotorcycleHelmet, Random.Next(0, 20));
                }
                else
                {
                    var message = _ecsWorld.CreateEntityWith <NotificationComponent>();
                    message.StringToShow = "You don't have enough money to buy helmet";
                    message.Level        = NotifyLevels.COMMON;
                }
            }

            for (int i = 0; i < _requests.EntitiesCount; i++)
            {
                _ecsWorld.RemoveEntity(_requests.Entities[i]);
            }
        }
Exemple #12
0
        private static void Command_HealPlayerBleedings()
        {
            EcsWorld world  = GunshotWound3.EcsWorld;
            var      filter = world.GetFilter <EcsFilter <GswPedComponent, PlayerMarkComponent> >();

            if (filter.IsEmpty())
            {
                Game.Console.Print("There is no player in GSW3!");
                return;
            }

            EcsEntity playerEntity = filter.Entities[0];
            var       info         = world.GetComponent <PedBleedingInfoComponent>(playerEntity);

            if (info == null || info.BleedingEntities.Count <= 0)
            {
                Game.Console.Print("Player doesn't have any bleedings!");
                return;
            }

            int bleedingsCount = info.BleedingEntities.Count;

            foreach (EcsEntity bleedingEntity in info.BleedingEntities)
            {
                world.RemoveEntity(bleedingEntity);
            }
            info.BleedingEntities.Clear();

            Game.Console.Print($"Healed {bleedingsCount.ToString()} bleedings of player!");
        }
Exemple #13
0
        public void Run()
        {
            for (int i = 0; i < _states.EntitiesCount; i++)
            {
                switch (_states.Components1[i].State)
                {
                case GameStates.PAUSE:
                    Time.timeScale = 0f;
                    GuiElement.SetActive(true);
                    break;

                case GameStates.START:
                    Time.timeScale = 1f;
                    GuiElement.SetActive(false);
                    break;

                case GameStates.RESTART:
                    SceneManager.LoadScene(0);
                    break;

                case GameStates.EXIT:
                    Application.Quit();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                _ecsWorld.RemoveEntity(_states.Entities[i]);
            }
        }
Exemple #14
0
 public void Run()
 {
     for (int i = 0; i < _playerFilter.EntitiesCount; i++)
     {
         var   player = _playerFilter.Components1[i];
         float x      = player.Force.X;
         float y      = player.Force.Y;
         //refactor
         Vector2 speedVector = new Vector2(player.Force.X, player.Force.Y).normalized;
         float   speedForce  = (Mathf.Abs(x) + Mathf.Abs(y)) * 0.5f;
         player.Transform.Translate(speedVector * speedForce * SpeedMultipiler * Time.deltaTime);
         //
         for (int j = 0; j < _collisionFilter.EntitiesCount; j++)
         {
             //исправил баг с множественными ентитями дублирующимися
             var entity = _collisionFilter.Entities[i];
             if (_removedEntities.Contains(entity))
             {
                 return;
             }
             _removedEntities.Add(entity);
             _collisionFilter.Components1[i].ObstacleTransform = null;
             _world.RemoveEntity(_collisionFilter.Entities[i]);
             //Debug.Log(_collisionFilter.Components1[j]);
         }
         _removedEntities.Clear();
     }
 }
Exemple #15
0
 void IEcsInitSystem.Destroy()
 {
     foreach (var i in _beatshipFilter)
     {
         _world.RemoveEntity(_beatshipFilter.Entities[i]);
     }
 }
Exemple #16
0
        public void Run()
        {
            var worldComponent = _worldEntities.Components1[0];

            foreach (var eventIndex in _collisionEvents)
            {
                var collisionEvent = _collisionEvents.Components1[eventIndex];

                var movement      = _world.GetComponent <MovementComponent>(collisionEvent.Ball);
                var ball          = _world.GetComponent <BallComponent>(collisionEvent.Ball);
                var ballTransform = _world.GetComponent <TransformComponent>(collisionEvent.Ball);

                Resources.Boop.Play(0.7f, GetNextPitch(), AudioUtil.GetPanningFromPosition(ballTransform.Position.X, worldComponent.Width));

                bool flipX = false;
                bool flipY = false;

                if (Math.Abs(collisionEvent.Direction.X) > Math.Abs(collisionEvent.Direction.Y))
                {
                    flipX = true;
                }
                else
                {
                    flipY = true;
                }

                movement.Direction = new Vector2(
                    flipX ? -movement.Direction.X : movement.Direction.X,
                    flipY ? -movement.Direction.Y : movement.Direction.Y);

                //ball.Velocity *= 1.25f;
                ball.RotationDirection *= -1f;
                _world.RemoveEntity(_collisionEvents.Entities[eventIndex]);
            }
        }
        public void Run()
        {
            for (int i = 0; i < _players.EntitiesCount; i++)
            {
                var playerPosition = _players.Components1[i].Position;

                var item = _items.GetSecondComponent(x => x.Position == playerPosition);
                if (item == null)
                {
                    continue;
                }

                item.GameObject.SetActive(false);
                int playerEntity = _players.Entities[i];
                switch (item.ItemType)
                {
                case ItemTypes.Food:
                    CreateFoodComponent(playerEntity);
                    break;

                case ItemTypes.Energizer:
                    CreateEnergizerComponent(playerEntity);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                item.GameObject = null;
                _ecsWorld.RemoveEntity(item.ItemEntity);
            }
        }
        public void Run()
        {
            GunshotWound2.LastSystem = nameof(BleedingSystem);

            for (int i = 0; i < _components.EntitiesCount; i++)
            {
                var component  = _components.Components1[i];
                int pedEntity  = _components.Components1[i].PedEntity;
                var woundedPed = _ecsWorld.GetComponent <WoundedPedComponent>(pedEntity);

                if (woundedPed == null || component.BleedSeverity <= 0f)
                {
                    _ecsWorld.RemoveEntity(_components.Entities[i]);
                    continue;
                }

                if (woundedPed.IsDead)
                {
                    continue;
                }

                woundedPed.Health        -= component.BleedSeverity * Game.LastFrameTime;
                component.BleedSeverity  -= woundedPed.StopBleedingAmount * Game.LastFrameTime;
                woundedPed.ThisPed.Health = (int)woundedPed.Health;
            }
        }
Exemple #19
0
        public void Run()
        {
            if (_updateComponents.EntitiesCount == 0)
            {
                return;
            }

            var scoreText = "";

            for (int i = 0; i < _players.EntitiesCount; i++)
            {
                var player = _players.Components1[i];

                scoreText += string.Format("P{0} Scores:{1} ", player.Num, player.Scores);

                if (!player.IsDead)
                {
                    scoreText += string.Format("Lifes:{0}\n", player.Lifes);
                }
                else
                {
                    scoreText += "IS DEAD\n";
                }
            }
            Text.text = scoreText;

            for (int i = 0; i < _updateComponents.EntitiesCount; i++)
            {
                _ecsWorld.RemoveEntity(_updateComponents.Entities[i]);
            }
        }
Exemple #20
0
        public void Run()
        {
#if DEBUG
            GunshotWound2.LastSystem = nameof(HitCleanSystem);
#endif

            for (int i = 0; i < _requestsToClean.EntitiesCount; i++)
            {
                int pedEntity = _requestsToClean.Components1[i].Entity;
                var ped       = _ecsWorld.GetComponent <WoundedPedComponent>(pedEntity).ThisPed;

                if (ped != null)
                {
                    Function.Call(Hash.CLEAR_PED_LAST_WEAPON_DAMAGE, ped);
                    Function.Call(Hash.CLEAR_PED_LAST_DAMAGE_BONE, ped);
                }

                _ecsWorld.RemoveEntity(_requestsToClean.Entities[i]);
            }

            for (int i = 0; i < _peds.EntitiesCount; i++)
            {
                _ecsWorld.RemoveComponent <HaveDamageMarkComponent>(_peds.Entities[i]);
            }
        }
Exemple #21
0
        private void RemovePeds()
        {
            for (var pedIndex = 0; pedIndex < _npcs.EntitiesCount; pedIndex++)
            {
                var woundedPed = _npcs.Components1[pedIndex];
                if (woundedPed.IsPlayer)
                {
                    return;
                }

                var ped = woundedPed.ThisPed;
                if (ped.IsAlive && !OutRemoveRange(ped))
                {
                    continue;
                }

                _world.Data.GswPeds.Remove(ped);
                woundedPed.ThisPed = null;
                _ecsWorld.RemoveComponent <PainComponent>(_npcs.Entities[pedIndex], true);
                _ecsWorld.RemoveEntity(_npcs.Entities[pedIndex]);

#if DEBUG
                ped.AttachedBlip.Delete();
#endif
            }
        }
 void IEcsInitSystem.Destroy()
 {
     foreach (var i in _obstacles)
     {
         _obstacles.Components1[i].Transform = null;
         _world.RemoveEntity(_obstacles.Entities[i]);
     }
 }
        public void Run()
        {
            GunshotWound2.LastSystem = nameof(RagdollSystem);

            for (int i = 0; i < _requests.EntitiesCount; i++)
            {
                var pedEntity  = _requests.Components1[i].PedEntity;
                var woundedPed = _ecsWorld
                                 .GetComponent <WoundedPedComponent>(pedEntity);

                if (woundedPed == null)
                {
                    _ecsWorld.RemoveEntity(_requests.Entities[i]);
                    continue;
                }

                if (_requests.Components1[i].Enable)
                {
                    if (woundedPed.ThisPed.IsRagdoll)
                    {
                        continue;
                    }

                    SendDebug($"Set {pedEntity} to ragdoll");
                    Function.Call(Hash.SET_PED_TO_RAGDOLL, woundedPed.ThisPed, -1, -1, 0, 0, 0, 0);
                    woundedPed.GivesInToPain = true;

                    _ecsWorld.RemoveEntity(_requests.Entities[i]);
                }
                else
                {
                    if (woundedPed.GivesInToPain)
                    {
                        SendDebug($"Unset {pedEntity} from ragdoll");
                        Function.Call(Hash.SET_PED_TO_RAGDOLL, woundedPed.ThisPed, 1, 1, 1, 0, 0, 0);
                        woundedPed.GivesInToPain = false;
                        if (woundedPed.ThisPed.IsPlayer)
                        {
                            Game.Player.IgnoredByEveryone = false;
                        }
                    }

                    _ecsWorld.RemoveEntity(_requests.Entities[i]);
                }
            }
        }
Exemple #24
0
 void IEcsInitSystem.Destroy()
 {
     for (var i = 0; i < _snakeSegmentFilter.EntitiesCount; i++)
     {
         _snakeSegmentFilter.Components1[i].Transform = null;
         _world.RemoveEntity(_snakeSegmentFilter.Entities[i]);
     }
 }
Exemple #25
0
 void IEcsInitSystem.Destroy()
 {
     foreach (var i in _foodFilter)
     {
         _foodFilter.Components1[i].Transform = null;
         _world.RemoveEntity(_foodFilter.Entities[i]);
     }
 }
Exemple #26
0
 void IEcsInitSystem.Destroy()
 {
     for (var i = 0; i < _obstacles.EntitiesCount; i++)
     {
         _obstacles.Components1[i].Transform = null;
         _world.RemoveEntity(_obstacles.Entities[i]);
     }
 }
Exemple #27
0
 public static void HandleEvents <T>(this EcsFilter <T> filter, EcsWorld _world, Action <T> action) where T : class, new()
 {
     foreach (var idx in filter)
     {
         action(filter.Components1[idx]);
         _world.RemoveEntity(filter.Entities[idx]);
     }
 }