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]); } }
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]); } }
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]); } }
void IEcsInitSystem.Destroy() { foreach (var i in _scoreUiFilter) { _scoreUiFilter.Components1[i].Ui = null; _world.RemoveEntity(_scoreUiFilter.Entities[i]); } }
void IEcsInitSystem.Destroy() { for (var i = 0; i < _scoreUiFilter.EntitiesCount; i++) { _scoreUiFilter.Components1[i].Ui = null; _world.RemoveEntity(_scoreUiFilter.Entities[i]); } }
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]); } }
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]); } }
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!"); }
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]); } }
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(); } }
void IEcsInitSystem.Destroy() { foreach (var i in _beatshipFilter) { _world.RemoveEntity(_beatshipFilter.Entities[i]); } }
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; } }
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]); } }
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]); } }
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]); } } }
void IEcsInitSystem.Destroy() { for (var i = 0; i < _snakeSegmentFilter.EntitiesCount; i++) { _snakeSegmentFilter.Components1[i].Transform = null; _world.RemoveEntity(_snakeSegmentFilter.Entities[i]); } }
void IEcsInitSystem.Destroy() { foreach (var i in _foodFilter) { _foodFilter.Components1[i].Transform = null; _world.RemoveEntity(_foodFilter.Entities[i]); } }
void IEcsInitSystem.Destroy() { for (var i = 0; i < _obstacles.EntitiesCount; i++) { _obstacles.Components1[i].Transform = null; _world.RemoveEntity(_obstacles.Entities[i]); } }
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]); } }