/// <summary>
 /// Gets the type of event based on the passed in EVETTTYPEC.
 /// </summary>
 /// <returns>The event of type specified.</returns>
 /// <param name="eventType">The event type.</param>
 public PlaygroundEventC GetEventFromType(EVENTTYPEC eventType)
 {
     for (int i = 0; i < playgroundSystem.events.Count; i++)
     {
         if (playgroundSystem.events[i].eventType == eventType)
         {
             return(playgroundSystem.events[i]);
         }
     }
     return(null);
 }
        void SendEvent(EVENTTYPEC eventType, int p, Vector3 preEventVelocity, Transform collisionTransform, Collider collisionCollider, Collider2D collisionCollider2D)
        {
            Vector3 eventPosition = Vector3.zero;
            Vector3 eventVelocity = Vector3.zero;
            Color32 eventColor = Color.white;

            // Loop through available events
            for (int i = 0; i<events.Count; i++) {
                if (events[i].enabled && events[i].eventType==eventType) {

                    // Check thresholds
                    if (events[i].eventType==EVENTTYPEC.Collision)
                        if (events[i].collisionThreshold>preEventVelocity.sqrMagnitude)
                            return;

                    // Set event position
                    switch (events[i].eventInheritancePosition) {
                        case EVENTINHERITANCEC.User:
                        eventPosition = events[i].eventPosition;
                        break;
                        case EVENTINHERITANCEC.Particle:
                        eventPosition = eventType==EVENTTYPEC.Death?playgroundCache.previousParticlePosition[p]:playgroundCache.position[p];
                        break;
                        case EVENTINHERITANCEC.Source:
                        eventPosition = playgroundCache.targetPosition[p];
                        break;
                    }

                    // Set event velocity
                    switch (events[i].eventInheritanceVelocity) {
                        case EVENTINHERITANCEC.User:
                        eventVelocity = events[i].eventVelocity;
                        break;
                        case EVENTINHERITANCEC.Particle:
                        eventVelocity = playgroundCache.velocity[p];
                        break;
                        case EVENTINHERITANCEC.Source:
                        if (applyInitialLocalVelocity)
                            eventVelocity = playgroundCache.initialLocalVelocity[p];
                        if (applyInitialVelocity)
                            eventVelocity += playgroundCache.initialVelocity[p];
                        if (applyLifetimeVelocity)
                            eventVelocity += lifetimeVelocity.Evaluate(Mathf.Clamp01(playgroundCache.life[p]/lifetime), lifetimeVelocityScale);
                        if (applyInitialVelocityShape)
                            eventVelocity = Vector3.Scale(eventVelocity, initialVelocityShape.Evaluate((p*1f)/(particleCount*1f), initialVelocityShapeScale));
                        break;
                    }

                    // Apply multiplier
                    eventVelocity *= events[i].velocityMultiplier;

                    // Set event color
                    switch (events[i].eventInheritanceColor) {
                        case EVENTINHERITANCEC.User:
                        eventColor = events[i].eventColor;
                        break;
                        case EVENTINHERITANCEC.Particle:
                        eventColor = particleCache[p].color;
                        break;
                        case EVENTINHERITANCEC.Source:
                        eventColor = playgroundCache.initialColor[p];
                        break;
                    }

                    // Send the event to any Event Listeners
                    if (events[i].broadcastType==EVENTBROADCASTC.EventListeners || events[i].broadcastType==EVENTBROADCASTC.Both) {

                        UpdateEventParticle(eventParticle, p);
                        eventParticle.collisionCollider = collisionCollider;
                        eventParticle.collisionCollider2D = collisionCollider2D;
                        eventParticle.collisionTransform = collisionTransform;

                        events[i].SendParticleEvent(eventParticle);

                        // Send the event to the Playground Manager
                        if (events[i].sendToManager) {
                            switch (events[i].eventType) {
                                case EVENTTYPEC.Birth:
                                PlaygroundC.SendParticleEventBirth(eventParticle);
                                break;
                                case EVENTTYPEC.Death:
                                PlaygroundC.SendParticleEventDeath(eventParticle);
                                break;
                                case EVENTTYPEC.Collision:
                                PlaygroundC.SendParticleEventCollision(eventParticle);
                                break;
                                case EVENTTYPEC.Time:
                                PlaygroundC.SendParticleEventTime(eventParticle);
                                break;
                            }
                        }
                    }

                    // Send the event to target
                    if (events[i].initializedTarget && (events[i].broadcastType==EVENTBROADCASTC.Target || events[i].broadcastType==EVENTBROADCASTC.Both)) {
                        events[i].target.ThreadSafeEmit(eventPosition, eventVelocity, eventColor);
                    }
                }
            }
        }
 void SendEvent(EVENTTYPEC eventType, int p, Vector3 preEventVelocity, Transform collisionTransform, Collider2D collisionCollider2D)
 {
     SendEvent(eventType, p, preEventVelocity, collisionTransform, null, collisionCollider2D);
 }
 void SendEvent(EVENTTYPEC eventType, int p, Vector3 preEventVelocity)
 {
     SendEvent(eventType, p, preEventVelocity, null, null, null);
 }
 // Sends an event to Event- Targets and Listeners
 void SendEvent(EVENTTYPEC eventType, int p)
 {
     SendEvent(eventType, p, playgroundCache.velocity[p], null, null, null);
 }
		/// <summary>
		/// Gets the type of event based on the passed in EVETTTYPEC.
		/// </summary>
		/// <returns>The event of type specified.</returns>
		/// <param name="eventType">The event type.</param>
		public PlaygroundEventC GetEventFromType (EVENTTYPEC eventType)
		{
			for (int i = 0; i<playgroundSystem.events.Count; i++)
				if (playgroundSystem.events[i].eventType == eventType)
					return playgroundSystem.events[i];
			return null;
		}
		void SendEvent (EVENTTYPEC eventType, int p, Vector3 preEventVelocity, Transform collisionTransform, Collider collisionCollider, Collider2D collisionCollider2D) {
			Vector3 eventPosition = Vector3.zero;
			Vector3 eventVelocity = Vector3.zero;
			Color32 eventColor = Color.white;

			// Loop through available events
			for (int i = 0; i<events.Count; i++) {
				if (events[i].enabled && events[i].eventType==eventType) {

					// Check thresholds
					if (events[i].eventType==EVENTTYPEC.Collision)
						if (events[i].collisionThreshold>preEventVelocity.sqrMagnitude)
							return;
					
					// Set event position
					switch (events[i].eventInheritancePosition) {
						case EVENTINHERITANCEC.User:
						eventPosition = events[i].eventPosition;
						break;
						case EVENTINHERITANCEC.Particle:
						eventPosition = playgroundCache.position[p];
						break;
						case EVENTINHERITANCEC.Source:
						eventPosition = playgroundCache.targetPosition[p];
						break;
					}

					// Set event velocity
					switch (events[i].eventInheritanceVelocity) {
						case EVENTINHERITANCEC.User:
						eventVelocity = events[i].eventVelocity;
						break;
						case EVENTINHERITANCEC.Particle:
						eventVelocity = playgroundCache.velocity[p];
						break;
						case EVENTINHERITANCEC.Source:
						if (applyInitialLocalVelocity)
							eventVelocity = playgroundCache.initialLocalVelocity[p];
						if (applyInitialVelocity)
							eventVelocity += playgroundCache.initialVelocity[p];
						if (applyLifetimeVelocity)
							eventVelocity += lifetimeVelocity.Evaluate(Mathf.Clamp01(playgroundCache.life[p]/lifetime));
						if (applyInitialVelocityShape)
							eventVelocity = Vector3.Scale(eventVelocity, initialVelocityShape.Evaluate((p*1f)/(particleCount*1f)));
						break;
					}

					// Apply multiplier
					eventVelocity *= events[i].velocityMultiplier;

					// Set event color
					switch (events[i].eventInheritanceColor) {
						case EVENTINHERITANCEC.User:
						eventColor = events[i].eventColor;
						break;
						case EVENTINHERITANCEC.Particle:
						eventColor = particleCache[p].color;
						break;
						case EVENTINHERITANCEC.Source:
						eventColor = playgroundCache.initialColor[p];
						break;
					}

					// Send the event to any Event Listeners
					if (events[i].initializedEvent && (events[i].broadcastType==EVENTBROADCASTC.EventListeners || events[i].broadcastType==EVENTBROADCASTC.Both)) {

						eventParticle.particleId = p;
						eventParticle.birth = playgroundCache.birth[p];
						eventParticle.birthDelay = playgroundCache.birthDelay[p];
						eventParticle.changedByProperty = playgroundCache.changedByProperty[p];
						eventParticle.changedByPropertyColor = playgroundCache.changedByPropertyColor[p];
						eventParticle.changedByPropertyColorKeepAlpha = playgroundCache.changedByPropertyColorKeepAlpha[p];
						eventParticle.changedByPropertyColorLerp = playgroundCache.changedByPropertyColorLerp[p];
						eventParticle.changedByPropertyDeath = playgroundCache.changedByPropertyDeath[p];
						eventParticle.changedByPropertySize = playgroundCache.changedByPropertySize[p];
						eventParticle.changedByPropertyTarget = playgroundCache.changedByPropertyTarget[p];
						eventParticle.collisionParticlePosition = playgroundCache.collisionParticlePosition[p];
						eventParticle.color = particleCache[p].color;
						eventParticle.scriptedColor = playgroundCache.scriptedColor[p];
						eventParticle.death = playgroundCache.death[p];
						eventParticle.emission = playgroundCache.emission[p];
						eventParticle.initialColor = playgroundCache.initialColor[p];
						eventParticle.initialLocalVelocity = playgroundCache.initialLocalVelocity[p];
						eventParticle.initialRotation = playgroundCache.initialRotation[p];
						eventParticle.initialSize = playgroundCache.initialSize[p];
						eventParticle.initialVelocity = playgroundCache.initialVelocity[p];
						eventParticle.initialLocalVelocity = playgroundCache.initialLocalVelocity[p];
						eventParticle.life = playgroundCache.life[p];
						eventParticle.lifetimeColorId = playgroundCache.lifetimeColorId[p];
						eventParticle.lifetimeOffset = playgroundCache.lifetimeOffset[p];
						eventParticle.localSpaceMovementCompensation = playgroundCache.localSpaceMovementCompensation[p];
						eventParticle.position = playgroundCache.position[p];
						eventParticle.previousParticlePosition = playgroundCache.previousParticlePosition[p];
						eventParticle.previousTargetPosition = playgroundCache.previousTargetPosition[p];
						eventParticle.propertyColorId = playgroundCache.propertyColorId[p];
						eventParticle.propertyId = playgroundCache.propertyId[p];
						eventParticle.propertyTarget = playgroundCache.propertyTarget[p];
						eventParticle.rebirth = playgroundCache.rebirth[p];
						eventParticle.rotation = playgroundCache.rotation[p];
						eventParticle.rotationSpeed = playgroundCache.rotationSpeed[p];
						eventParticle.scatterPosition = playgroundCache.scatterPosition[p];
						eventParticle.size = playgroundCache.size[p];
						eventParticle.targetDirection = playgroundCache.targetDirection[p];
						eventParticle.targetPosition = playgroundCache.targetPosition[p];
						eventParticle.velocity = playgroundCache.velocity[p];
						eventParticle.collisionCollider = collisionCollider;
						eventParticle.collisionCollider2D = collisionCollider2D;
						eventParticle.collisionTransform = collisionTransform;
						eventParticle.isMasked = playgroundCache.isMasked[p];
						eventParticle.maskAlpha = playgroundCache.maskAlpha[p];

						events[i].SendParticleEvent(eventParticle);
					}

					// Send the event to target
					if (events[i].initializedTarget && (events[i].broadcastType==EVENTBROADCASTC.Target || events[i].broadcastType==EVENTBROADCASTC.Both)) {
						events[i].target.ThreadSafeEmit(eventPosition, eventVelocity, eventColor);
					}
				}
			}
		}