private void UpdateHealth() { var health = StatHelpers.CalculateStat(m_actor, StatId.Current_Health); var totalHealth = StatHelpers.CalculateStat(m_actor, StatId.Total_Health); var perc = (health / totalHealth); m_contentImage.fillAmount = perc; }
protected override void Execute(List <GameEntity> entities) { foreach (var e in entities) { var currentHp = StatHelpers.CalculateStat(e, StatId.Current_Health); if (currentHp <= 0) { if (e.hasAnimationDirector) { var clip = e.animationDirector.director.CreateAnimationClip("miner_grunt_death_regular", new List <AnimationEvent>()); e.animationDirector.director.AddAnimation("miner_grunt_death_regular", clip); e.animationDirector.director.PlayAnim("miner_grunt_death_regular", true, false); } e.isDead = true; } } }
protected override void Execute(List <GameEntity> entities) { //Organised systems better to avoid having to do this foreach (var e in m_takeDamageComplete.GetEntities()) { e.isTakeDamageComplete = false; } foreach (var e in entities) { var attacks = e.takeDamage.attacks; var totalDamage = 0f; foreach (var atk in attacks) { totalDamage += atk.Value; } if (e.hasStatDirector == false) { Debug.LogWarning("Can't take damage without Stat Director!"); } StatHelpers.DecreaseStatValue(e, StatId.Current_Health, totalDamage); e.RemoveTakeDamage(); e.isTakeDamageComplete = true; ShakeHelpers.AddShake(e, new Vector2(.05f, .05f), .25f); foreach (var atk in attacks) { foreach (var listener in m_damageListeners.GetEntities()) { listener.listener_EntityDamaged.listener.OnEntityDamaged(e.id.value, atk.Key, totalDamage); } } } }
/*---------------------------------------------------------------------------------------------------------------------- * Assuming the prefab is setup correctly with the environment collider being solid and the ship collider being a trigger, * this will trigger when the ship collider starts to collide with something. * ----------------------------------------------------------------------------------------------------------------------*/ public override void OnTriggerEnter(Collider other) { base.OnTriggerEnter(other); // don't do anything against the object that owns the projectile or trigger behaviours if (other.gameObject == Origin || other.GetComponent <NgTriggerBehaviour>()) { return; } // destroy Mines if (other.CompareTag("Explosive")) { DestroyExplosive(other.GetComponent <Explosive>()); StatHelpers.MinesweeperStatAndAchievementHandler(Owner); } // do nothing if the rocket doesn't collide with a track or ship int layer = other.gameObject.layer; if (layer != LayerIDs.Ship) { return; } // get the other ship from the hit objects root transform Transform shipT = other.gameObject.transform.root; ShipRefs hitRef = shipT.GetComponent <ShipRefs>(); bool hitShip = ShipImpact(hitRef); // if we can increase the score from the impact (team race), increase the ships score if (hitShip && Owner && Owner.CanIncreaseScoreFrom(hitRef)) { Owner.IncreaseScore(WeaponConstants.EliminatorSettings.Mines); } // finally destroy the grenade DestroyProjectile(shipT); }
public void Execute() { foreach (var e in m_mover.GetEntities()) { var position = e.position.value; var targetPosition = e.move.value; var diff = targetPosition - position; var dist = diff.magnitude; var arriveDistance = e.arriveDistance.value; var velocity = Vector2.zero; if (e.hasVelocity) { velocity = e.velocity.value; } var speed = StatHelpers.CalculateStat(e, StatId.Movement_Speed); var targetSpeed = Vector2.zero; var force = 1f; var isSlowingDown = dist < arriveDistance; var stopMoving = false; if (isSlowingDown) { targetSpeed = diff * speed * (diff.magnitude / arriveDistance); stopMoving = dist <= 0.25; if (e.hasDeceleration) { force = e.deceleration.value; } } else { targetSpeed = diff.normalized * speed; if (e.hasAcceleration) { force = e.acceleration.value; } } var steering = targetSpeed - velocity; // steering *= force; if (e.hasSteering) { steering += e.steering.value; } if (stopMoving) { e.RemoveMove(); e.isMoveComplete = true; steering = Vector2.zero - velocity; } e.ReplaceSteering(steering); } }