private IEnumerator BurnRoutine() { // TODO - fire particles FireDamageArgs args = new FireDamageArgs(spreadingBurnDuration, spreadingBurnDps); float timePassed = 0f; while (true) { yield return(new WaitForSeconds(burningSpreadPeriod)); timePassed += burningSpreadPeriod; if (timePassed >= destroyAfterBurningTime) { break; } Collider2D[] spreadTargets = Physics2D.OverlapCircleAll(transform.position, burningSpreadRadius, Physics2D.GetLayerCollisionMask(gameObject.layer)); for (int i = 0; i < spreadTargets.Length; ++i) { spreadTargets[i].gameObject.SendMessage("OnFireDamage", args, SendMessageOptions.DontRequireReceiver); } } Destroy(gameObject); }
public void OnFireDamage(FireDamageArgs args) { FreezeStatus freeze = GetComponent <FreezeStatus>(); if (freeze != null) { freeze.duration = 0f; return; } BurnStatus burn = GetComponent <BurnStatus>(); if (burn != null) { if (args.duration > burn.duration) { burn.duration = args.duration; burn.damagePerSecond = args.dps; } } else { burn = gameObject.AddComponent <BurnStatus>(); burn.duration = args.duration; burn.damagePerSecond = args.dps; } }
public void OnFireDamage(FireDamageArgs args) { spreadingBurnDuration = args.duration; spreadingBurnDps = args.dps; StartCoroutine(BurnRoutine()); }
public void OnFireDamage(FireDamageArgs args) { lit = true; }
public void OnFireDamage(FireDamageArgs args) { frozen = false; }