Esempio n. 1
0
        public static IEnumerator Spawn(SpawnPoint spawnPoint, SpawnerStateSetting setting, Location location, WIGroup spawnGroup, System.Random random)
        {
            switch (setting.Type)
            {
            case SpawnerType.WorldItems:
            default:
                WorldItem  newSpawnedItem = null;
                WICategory cat            = null;
                if (WorldItems.Get.Category(setting.CategoryName, out cat))
                {
                    spawnPoint.Transform.Position.y += setting.UpVectorPadding;
                    if (WorldItems.CloneRandomFromCategory(cat, spawnGroup, spawnPoint.Transform, setting.Flags, setting.NumTimesSpawned, setting.NumAttempts, out newSpawnedItem))
                    {
                        //adjust spawn point
                        spawnPoint.Transform.Rotation    = spawnPoint.Transform.Rotation + newSpawnedItem.Props.Global.BaseRotation;
                        spawnPoint.Transform.Position.y += setting.UpVectorPadding;
                        //apply to newly spawned item
                        newSpawnedItem.Props.Local.Transform.CopyFrom(spawnPoint.Transform);
                        if (setting.DropThenFreeze)
                        {
                            newSpawnedItem.Props.Local.FreezeOnStartup = false;
                            newSpawnedItem.Props.Local.FreezeOnSleep   = true;
                            newSpawnedItem.gameObject.AddComponent <FreezeOnSleep> ().worlditem = newSpawnedItem;
                        }
                        else
                        {
                            yield return(null);
                        }
                        if (!string.IsNullOrEmpty(setting.SendMessageToSpawnedItem))
                        {
                            //Debug.Log ("Sending message to item: " + setting.SendMessageToSpawnedItem);
                            newSpawnedItem.SendMessage(setting.SendMessageToSpawnedItem, SendMessageOptions.DontRequireReceiver);
                        }
                    }
                    else
                    {
                        //Debug.Log ("Couldn't clone from category " + setting.CategoryName);
                    }
                }
                else
                {
                    //Debug.Log ("Couldn't get category " + setting.CategoryName);
                }
                break;

            case SpawnerType.Characters:
                //TEMP just use bandit camp since that's the only thing that uses spawners for characters
                BanditCamp camp = null;
                if (location.worlditem.Is <BanditCamp> (out camp))
                {
                    Character character = null;
                    //if we've gotten this far we must have found or created a node, so assume it's there
                    if (Characters.SpawnRandomCharacter(spawnPoint.nodeState.actionNode, camp.State.TemplateName, setting.Flags, location.LocationGroup, out character))
                    {
                        camp.AddBandit(character);
                    }
                }
                break;


            case SpawnerType.Creatures:
                spawnPoint.Transform.Position.y += setting.UpVectorPadding;
                CreatureDen den = null;
                if (location.worlditem.Is <CreatureDen> (out den))
                {
                    Creature creature = null;
                    Creatures.SpawnCreature(den, spawnGroup, spawnPoint.Transform.Position, out creature);
                }
                break;
            }
            yield break;
        }