Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
        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);
        }