Esempio n. 1
0
        public static bool SpawnCreature(CreatureDen den, WIGroup group, Vector3 spawnPosition, bool isDead, string causeOfDeath, float timeSinceDeath, out Creature newCreature)
        {
            if (Globals.MissionDevelopmentMode)
            {
                //we don't care about creatures in mission dev mode
                newCreature = null;
                return(false);
            }

            newCreature = null;
            CreatureTemplate template = null;

            if (mTemplateLookup.TryGetValue(den.State.NameOfCreature.ToLower().Trim(), out template))
            {
                WorldItem newCreatureWorldItem = null;
                if (WorldItems.CloneFromPrefab(Get.CreatureBase.GetComponent <WorldItem> (), group, out newCreatureWorldItem))
                {
                    //since this is the first time the creature is spawned
                    //it has no idea what it is
                    //so before we send it back we're going to set its template name
                    newCreature = newCreatureWorldItem.gameObject.GetOrAdd <Creature> ();
                    newCreature.State.TemplateName = template.Name;
                    newCreature.Template           = template;
                    if (isDead)
                    {
                        Debug.Log("Spawning dead creature");
                        newCreature.State.IsDead = true;
                        Damageable damageable = newCreature.GetComponent <Damageable> ();
                        damageable.State.CauseOfDeath = causeOfDeath;
                        damageable.State.DamageTaken  = damageable.State.Durability;
                        damageable.State.TimeKilled   = WorldClock.AdjustedRealTime - timeSinceDeath;
                    }
                    else
                    {
                        newCreature.State.IsDead = false;
                    }
                    newCreature.Den = den;
                    newCreatureWorldItem.Props.Local.Transform.Position   = spawnPosition;
                    newCreatureWorldItem.Props.Local.Transform.Rotation.y = UnityEngine.Random.Range(0f, 360f);
                    //Debug.Log ("Setting position of creature to " + spawnPosition.ToString ());
                }
            }
            //and that's it! the rest will be taken care of by the creature
            return(newCreature != null);
        }
        public IEnumerator PlayCutsceneOverTime()
        {
            double waitUntil = Frontiers.WorldClock.AdjustedRealTime + State.InitialDelay;

            while (Frontiers.WorldClock.AdjustedRealTime < waitUntil)
            {
                yield return(null);
            }
            //get the creature body - we're only using a shell here
            CreatureBody     body     = null;
            CreatureTemplate template = null;
            AnimationClip    clip     = null;

            if (Creatures.GetBody(State.CreatureBodyName, out body))
            {
                if (Creatures.GetCutsceneClip(State.CutsceneClipName, out clip))
                {
                    //create the base object and add the animation
                    //parent it under this trigger
                    CreatureCutsceneObject    = gameObject.CreateChild(State.Name + " - " + State.CreatureBodyName).gameObject;
                    CreatureCutsceneAnimation = CreatureCutsceneObject.AddComponent <Animation>();
                    CreatureCutsceneAnimation.AddClip(clip, State.CutsceneClipName);
                    //this script will implement the IBodyOwner interface
                    UnityEngineInternal.APIUpdaterRuntimeServices.AddComponent(CreatureCutsceneObject, "Assets/Scripts/GameWorld/Triggers/TriggerDestroyedHomeCutscene.cs (45,11)", State.CutsceneScriptName);
                    IBodyOwner bodyOwner = CreatureCutsceneObject.GetComponent(typeof(IBodyOwner)) as IBodyOwner;
                    //create an empty body shell
                    GameObject creatureCutsceneBodyObject = GameObject.Instantiate(body.gameObject, transform.position, Quaternion.identity) as GameObject;
                    CreatureCutsceneBody       = creatureCutsceneBodyObject.GetComponent <CreatureBody>();
                    CreatureCutsceneBody.Owner = bodyOwner;
                    //and we're off!
                    CreatureCutsceneAnimation.Play(State.CutsceneClipName, PlayMode.StopAll);
                }
            }

            while (CreatureCutsceneObject != null)
            {
                yield return(null);
            }

            GameObject.Destroy(CreatureCutsceneBody.gameObject);

            mPlayingCutscene = false;
            yield break;
        }
Esempio n. 3
0
        public void EditorLoadTemplates()
        {
            if (!Manager.IsAwake <Mods> ())
            {
                Manager.WakeUp <Mods> ("__MODS");
                Mods.Get.Editor.InitializeEditor();
            }

            CreatureTemplates.Clear();
            List <string> creatureTemplateNames = Mods.Get.Available("Creature");

            foreach (string creatureTemplateName in creatureTemplateNames)
            {
                CreatureTemplate creatureTemplate = null;
                if (Mods.Get.Editor.LoadMod(ref creatureTemplate, "Creature", creatureTemplateName))
                {
                    creatureTemplate.StateTemplate.TemplateName = creatureTemplate.Name;
                    CreatureTemplates.Add(creatureTemplate);
                }
            }
        }
Esempio n. 4
0
 public static bool GetTemplate(string templateName, out CreatureTemplate template)
 {
     return(mTemplateLookup.TryGetValue(templateName.Trim().ToLower(), out template));
 }