/** Runs modifiers on path \a p */ public void RunModifiers (ModifierPass pass, Path p) { //Sort the modifiers based on priority (bubble sort (slow but since it's a small list, it works good)) bool changed = true; while (changed) { changed = false; for (int i=0;i<modifiers.Count-1;i++) { if (modifiers[i].Priority < modifiers[i+1].Priority) { IPathModifier tmp = modifiers[i]; modifiers[i] = modifiers[i+1]; modifiers[i+1] = tmp; changed = true; } } } //Call eventual delegates switch (pass) { case ModifierPass.PreProcess: if (preProcessPath != null) preProcessPath (p); break; case ModifierPass.PostProcessOriginal: if (postProcessOriginalPath != null) postProcessOriginalPath (p); break; case ModifierPass.PostProcess: if (postProcessPath != null) postProcessPath (p); break; } //No modifiers, then exit here if (modifiers.Count == 0) return; ModifierData prevOutput = ModifierData.All; IPathModifier prevMod = modifiers[0]; //Loop through all modifiers and apply post processing for (int i=0;i<modifiers.Count;i++) { //Cast to MonoModifier, i.e modifiers attached as scripts to the game object MonoModifier mMod = modifiers[i] as MonoModifier; //Ignore modifiers which are not enabled if (mMod != null && !mMod.enabled) continue; switch (pass) { case ModifierPass.PreProcess: modifiers[i].PreProcess (p); break; case ModifierPass.PostProcessOriginal: modifiers[i].ApplyOriginal (p); break; case ModifierPass.PostProcess: //Convert the path if necessary to match the required input for the modifier ModifierData newInput = ModifierConverter.Convert (p,prevOutput,modifiers[i].input); if (newInput != ModifierData.None) { modifiers[i].Apply (p,newInput); prevOutput = modifiers[i].output; } else { UnityEngine.Debug.Log ("Error converting "+(i > 0 ? prevMod.GetType ().Name : "original")+"'s output to "+(modifiers[i].GetType ().Name)+"'s input.\nTry rearranging the modifier priorities on the Seeker."); prevOutput = ModifierData.None; } prevMod = modifiers[i]; break; } if (prevOutput == ModifierData.None) { break; } } }
public void RunModifiers(Seeker.ModifierPass pass, Path p) { bool flag = true; while (flag) { flag = false; for (int i = 0; i < this.modifiers.Count - 1; i++) { if (this.modifiers[i].Priority < this.modifiers[i + 1].Priority) { IPathModifier value = this.modifiers[i]; this.modifiers[i] = this.modifiers[i + 1]; this.modifiers[i + 1] = value; flag = true; } } } switch (pass) { case Seeker.ModifierPass.PreProcess: if (this.preProcessPath != null) { this.preProcessPath(p); } break; case Seeker.ModifierPass.PostProcess: if (this.postProcessPath != null) { this.postProcessPath(p); } break; } if (this.modifiers.Count == 0) { return; } ModifierData modifierData = ModifierData.All; IPathModifier pathModifier = this.modifiers[0]; for (int j = 0; j < this.modifiers.Count; j++) { MonoModifier monoModifier = this.modifiers[j] as MonoModifier; if (!(monoModifier != null) || monoModifier.enabled) { switch (pass) { case Seeker.ModifierPass.PreProcess: this.modifiers[j].PreProcess(p); break; case Seeker.ModifierPass.PostProcess: { ModifierData modifierData2 = ModifierConverter.Convert(p, modifierData, this.modifiers[j].input); if (modifierData2 != ModifierData.None) { this.modifiers[j].Apply(p, modifierData2); modifierData = this.modifiers[j].output; } else { Debug.Log(string.Concat(new string[] { "Error converting ", (j <= 0) ? "original" : pathModifier.GetType().Name, "'s output to ", this.modifiers[j].GetType().Name, "'s input.\nTry rearranging the modifier priorities on the Seeker." })); modifierData = ModifierData.None; } pathModifier = this.modifiers[j]; break; } } if (modifierData == ModifierData.None) { break; } } } }