/// <summary> /// Called when the core has finished running and is released /// </summary> /// <param name="rCore"></param> private void OnCoreReleased(ILifeCore rCore, object rUserData = null) { TriggerAreaCore lTriggerAreaCore = rCore as TriggerAreaCore; if (lTriggerAreaCore != null && lTriggerAreaCore != null) { mTriggerAreaCores.Remove(lTriggerAreaCore); } if (mTriggerAreaCores == null || mTriggerAreaCores.Count == 0) { base.Deactivate(); } base.Deactivate(); }
/// <summary> /// Called when the object is selected in the editor /// </summary> private void OnEnable() { // Grab the serialized objects mTarget = (TriggerAreaCore)target; mTargetSO = new SerializedObject(target); }
/// <summary> /// Called when the action is first activated /// <param name="rPreviousSpellActionState">State of the action prior to this one activating</param> public override void Activate(int rPreviousSpellActionState = -1, object rData = null) { base.Activate(rPreviousSpellActionState, rData); if (mInstances != null && mInstances.Count > 0) { if (_Spell.ShowDebug) { for (int i = 0; i < mInstances.Count; i++) { mInstances[i].hideFlags = HideFlags.None; } } if (mTriggerAreaCores == null) { mTriggerAreaCores = new List <TriggerAreaCore>(); } for (int i = 0; i < mInstances.Count; i++) { //// Ensure we have a position //Vector3 lPosition = Vector3.zero; //if (_Spell.Data.Positions != null && _Spell.Data.Positions.Count > 0) //{ // lPosition = _Spell.Data.Positions[0]; //} //if (lPosition.sqrMagnitude == 0) //{ // OnFailure(); // return; //} Vector3 lForward = _Spell.Owner.transform.forward; //if (_Spell.Data.Forwards != null && _Spell.Data.Forwards.Count > 0) //{ // lForward = _Spell.Data.Forwards[0]; //} // Set the basics //mInstances[i].transform.parent = null; mInstances[i].transform.localScale = Size; //mInstance.transform.position = lPosition; mInstances[i].transform.rotation = Quaternion.LookRotation(lForward, _Spell.Owner.transform.up); // Now we want to define the area TriggerAreaCore lTriggerAreaCore = mInstances[i].GetComponent <TriggerAreaCore>(); if (lTriggerAreaCore != null) { lTriggerAreaCore.Age = 0f; if (MaxAge > 0f) { lTriggerAreaCore.MaxAge = MaxAge; } lTriggerAreaCore.Prefab = _Prefab; lTriggerAreaCore.OnReleasedEvent = OnCoreReleased; lTriggerAreaCore.OnTriggerEnterEvent = OnAreaEnter; lTriggerAreaCore.OnTriggerStayEvent = OnAreaStay; lTriggerAreaCore.OnTriggerExitEvent = OnAreaExit; lTriggerAreaCore.Play(); mTriggerAreaCores.Add(lTriggerAreaCore); } // Determine how we release the spell if (_Spell.ReleaseFromCamera && Camera.main != null) { mInstances[i].transform.rotation = Camera.main.transform.rotation; } else if (ReleaseFromCameraForward && Camera.main != null) { mInstances[i].transform.rotation = Camera.main.transform.rotation; } } } else { Deactivate(); } // Determine if we're returnning immediately if (_DeactivationIndex == EnumSpellActionDeactivation.IMMEDIATELY) { mIsShuttingDown = true; State = EnumSpellActionState.SUCCEEDED; } }