public override void End(ActionUsingNode node) { base.End(node); _vitalStat = null; var tr = node.ActionEvent.Action.Entity.Get <TransformComponent>(); if (tr != null) { ItemPool.Despawn(tr.gameObject); node.ActionEvent.Action.Entity.Remove(tr); node.ActionEvent.Action.Entity.Remove <RenderingComponent>(); } var blockDamage = node.Entity.Get <BlockDamage>(); if (blockDamage != null) { if (_isWaiting) { blockDamage.DamageBlockers.Remove(BlockDamageFlat); } else { blockDamage.CollisionHandlers.Remove(EvadeDamageWithStats); } } }
public void Clear() { ClearMods(); _dict.Clear(); _vitals.Clear(); HealthStat = null; }
public override void Start(ActionUsingNode node) { base.Start(node); var model = ItemPool.Spawn(UnityDirs.Models, ModelData, Vector3.zero, Quaternion.identity); if (model != null) { node.ParentSpawn(model.Transform); node.ActionEvent.Action.Entity.Add(new RenderingComponent(model.GetComponent <IRenderingComponent>())); node.ActionEvent.Action.Entity.Add(new TransformComponent(model.transform)); } var dmgComponent = node.Entity.GetOrAdd <BlockDamage>(); if (!node.Entity.Tags.Contain(EntityTags.Player)) { dmgComponent.DamageBlockers.Add(BlockDamageFlat); _isWaiting = true; _vitalStat = null; return; } _vitalStat = node.Stats.GetVital(TargetVital); var skillMulti = 1f; if (!string.IsNullOrEmpty(_skill)) { var skillValue = node.Entity.FindStatValue(_skill); skillMulti = Mathf.Clamp(1 - (skillValue * CostVital.SkillPercent), CostVital.SkillMaxReduction, 1); } dmgComponent.CollisionHandlers.Add(EvadeDamageWithStats); _fxComponent = node.ActionEvent.Action.Fx; _finalCost = Cost * skillMulti; }
public static void SetupVitalStats(StatsContainer stats) { var owner = stats.GetEntity(); for (int i = 0; i < GameData.Vitals.Count; i++) { var vital = new VitalStat(owner, GameData.Vitals.Names[i], GameData.Vitals.GetID(i), GameData.Vitals.GetAssociatedValue(i), GameData.Vitals.GetValue <float>(i, "Recovery")); stats.Add(vital); } }
public static void SetupVitalStats(StatsContainer stats) { var owner = stats.GetEntity(); for (int i = 0; i < Vitals.Count; i++) { var vital = new VitalStat(owner, Vitals.GetNameAt(i), Vitals.GetID(i), Vitals.GetStartingValue(i), Vitals.GetRecoveryValue(i)); stats.Add(vital); } stats.SetMax(); }
public void Remove(BaseStat item) { List.Remove(item); _dict.Remove(item.ID); if (item is VitalStat vital) { if (item.ID == GameOptions.Get(RpgSettings.HealthStat, "Vitals.Health")) { HealthStat = null; } _vitals.Remove(vital.ID); } }
public void Add(BaseStat item) { if (item == null || _dict.ContainsKey(item.ID)) { return; } List.Add(item); _dict.Add(item.ID, item); if (item is VitalStat vital) { if (item.ID == GameOptions.Get(RpgSettings.HealthStat, "Vitals.Health")) { HealthStat = vital; } _vitals.Add(vital.ID, vital); } }
public override void OnExit() { base.OnExit(); _vitalStat = null; var tr = _actionEntity.Get <TransformComponent>(); if (tr != null) { ItemPool.Despawn(tr.gameObject); _actionEntity.Remove(tr); _actionEntity.Remove <RenderingComponent>(); } if (_isWaiting) { Graph.Entity.Remove <BlockDamageFlat>(); } else { Graph.Entity.Get <RuleEventListenerComponent>().Handlers.Remove(this); } }
public override void OnEnter(RuntimeStateNode lastNode) { base.OnEnter(lastNode); var action = Graph.Entity.Get <CurrentAction>()?.Value; if (action == null) { return; } _actionEntity = action.Entity; _owner = Graph.Entity.GetTemplate <ActionUsingTemplate>(); _config = _actionEntity.Get <BlockDamageAction>(); var model = ItemPool.Spawn(UnityDirs.Models, _config.ModelData, Vector3.zero, Quaternion.identity); if (model != null) { var spawnPivot = _actionEntity.Get <SpawnPivotComponent>(); spawnPivot.SetNewChild(model.Transform); _actionEntity.Add(new RenderingComponent(model.GetComponent <IRenderingComponent>())); _actionEntity.Add(new TransformComponent(model.transform)); } if (!Graph.Entity.Tags.Contain(EntityTags.Player)) { Graph.Entity.Add(new BlockDamageFlat()); _isWaiting = true; _vitalStat = null; return; } _vitalStat = _owner.Stats.GetVital(_config.TargetVital); var skillMulti = 1f; if (!string.IsNullOrEmpty(_config.Skill)) { var skillValue = _owner.Entity.FindStatValue(_config.Skill); skillMulti = Mathf.Clamp(1 - (skillValue * CostVital.SkillPercent), CostVital.SkillMaxReduction, 1); } Graph.Entity.GetOrAdd <RuleEventListenerComponent>().Handlers.Add(this); _fxComponent = action.Fx?.Value; _finalCost = _config.Cost * skillMulti; }
public VitalStatCost(VitalStat stat, float amount) { _amount = amount; _stat = new CachedStat <VitalStat>(stat); }
private void FinishProcess(VitalStat v) { v.Current -= VitalAmount; }