public static GameObject CreateKnownEffect(string effectName, string instanceId = null) { if (KnownEffectsBuilder != null) { EffectParameters.GetEffectNameAndParameters(ref effectName, out string parameters); GameObject result = KnownEffectsBuilder.Create(effectName, instanceId); EffectParameters.ApplyAfterCreation(result, parameters); return(result); } else { Talespire.Log.Error($"KnownEffectsBuilder == null!!!"); } return(null); }
public GameObject CreateOrFindUnsafe(string instanceId = null, CharacterPosition sourcePosition = null, CharacterPosition targetPosition = null, GameObject parentInstance = null) { //if (ExistingChildName != null) // Talespire.Log.Debug($"Finding {ExistingChildName}..."); //else // Talespire.Log.Debug($"Creating {PrefabToCreate}..."); this.targetPosition = targetPosition; this.sourcePosition = sourcePosition; GameObject instance = null; if (PrefabToCreate != null) { Talespire.Log.Debug($"instance = Talespire.Prefabs.Clone(\"{PrefabToCreate}\", instanceId);"); instance = Talespire.Prefabs.Clone(PrefabToCreate, instanceId); // TODO: Figure out spell effect motion/positioning... if (targetPosition != null && instance.transform != null) { instance.transform.position = targetPosition.Position.GetVector3(); } else { if (instance.transform == null) { Talespire.Log.Error($"Prefab {PrefabToCreate}'s instance.transform == null!"); return(null); } } } else if (ExistingChildName != null) { if (parentInstance != null && parentInstance.transform != null) { Talespire.Log.Debug($"Transform childTransform = parentInstance.transform.Find(\"{ExistingChildName}\");"); Transform childTransform = parentInstance.transform.Find(ExistingChildName); instance = childTransform?.gameObject; } else { Talespire.Log.Debug($"parentInstance == null!"); } } else if (ItemToClone != null) { Talespire.Log.Debug($"instance = Talespire.GameObjects.Clone(\"{ItemToClone}\", instanceId);"); instance = Talespire.GameObjects.Clone(ItemToClone, instanceId); // TODO: Figure out spell effect motion/positioning... if (targetPosition != null && instance.transform != null) { instance.transform.position = targetPosition.Position.GetVector3(); } else { if (instance.transform == null) { Talespire.Log.Error($"Clone {ItemToClone}'s instance.transform == null!"); return(null); } } } else if (ItemToBorrow != null) { Talespire.Log.Debug($"instance = Talespire.GameObjects.Get(\"{ItemToBorrow}\");"); instance = Talespire.GameObjects.Get(ItemToBorrow); } else if (EffectNameToCreate != null) { if (KnownEffectsBuilder != null) { Talespire.Log.Debug($"instance = KnownEffectsBuilder.Create(\"{EffectNameToCreate}\", instanceId);"); instance = KnownEffectsBuilder.Create(EffectNameToCreate, instanceId); } } //Talespire.Log.Debug($"Creation complete!"); if (instance != null) { //Talespire.Log.Debug($"ModifyProperties(instance)...."); ModifyProperties(instance); } //Talespire.Log.Debug($"Repeat with children..."); if (Children != null) { foreach (CompositeEffect nestedEffectDto in Children) { if (nestedEffectDto != null) { nestedEffectDto.CreateOrFindUnsafe(instanceId, sourcePosition, targetPosition, instance); } else { Talespire.Log.Error($"nestedEffectDto == null!"); } } } if (instance != null) { //Talespire.Log.Warning($"compositeEffectMap[{instance}] = this ({this});"); compositeEffectMap[instance] = this; } else { Talespire.Log.Error($"Unable to map newly-created composite effect to instance {instance}."); } // TODO: Worried about a slow memory leak here. If we can hook a unity event for when GOs are destroyed, we could plug the leak by removing those elements from compositeEffectMap. return(instance); }