public override void Play(EffectData effectData) { BurnInfo burnInfo = (BurnInfo)effectData.Map["burnInfo"]; if (Time.time > lastTime + FrequencyMillis / 1000f) { var ps = particleSystemContainer.NextAndPlay(); var emission = ps.emission; emission.rateOverTimeMultiplier = 100 * burnInfo.Power; var main = ps.main; main.startSizeMultiplier = burnInfo.Power; ps.transform.position = new Vector3(burnInfo.Point.x, burnInfo.Point.y, Z_POSSITION); lastTime = Time.time; } }
private void handleBurn(Collider2D wheelCollider, SpriteRenderer spriteRenderer, BurnInfo.WhichWheelEnum whichWheel, BurnInfo.DirectionEnum direction, float wheelKmPerH, float velocityInKmPerH, ContactPoint2D[] burnContacts, PiekaMaterial piekaMaterial) { if (wheelCollider.IsTouchingLayers(Consts.FloorLayerMask)) { var carSpeedPlusAcceptableDifference = velocityInKmPerH + AcceptableSpeedDifference; var wheelSpeed = wheelKmPerH; if (wheelSpeed > carSpeedPlusAcceptableDifference) { var filter = new ContactFilter2D(); filter.layerMask = Consts.FloorLayerMask; var numberOfContacts = wheelCollider.GetContacts(filter, burnContacts); for (int i = 0; i < numberOfContacts; i++) { SEventSystem.FireEvent(EventNames.TEST); var gameObject = burnContacts[i].collider.gameObject; var point = burnContacts[i].point; var power = Mathf.Clamp((wheelSpeed - carSpeedPlusAcceptableDifference) / BurnSpeedRange, 0, 1); var burnInfo = new BurnInfo(whichWheel, direction, point, power, gameObject, piekaMaterial); SEventSystem.FireEvent(EventNames.WHEEL_BURN, new PMEventArgs(burnInfo)); } } } }