public bool WaitForStructure( ) { if (TargetStructure == null) { WorldItem childItem = null; if (WIGroups.FindChildItem(TargetStructureReference.GroupPath, TargetStructureReference.FileName, out childItem)) { TargetStructure = childItem.Get <Structure> (); if (TargetStructure != null) { TargetStructure.worlditem.ActiveState = WIActiveState.Active; //TODO remove this lock, could be dangerous TargetStructure.worlditem.ActiveStateLocked = true; Structures.AddInteriorToLoad(TargetStructure); } else { Debug.LogError("Target structure " + TargetStructureReference.FullPath + " had no structure wiscript"); return(true); } } else { Debug.LogError("Couldn't find structure " + TargetStructureReference.FullPath); return(true); } } if (TargetStructure.Is(TargetLoadState)) { if (mPaddedStartTime < 0) { mPaddedStartTime = WorldClock.AdjustedRealTime + 1.5; return(true); } else if (WorldClock.AdjustedRealTime > mPaddedStartTime) { return(false); } } else { mPaddedStartTime = -1; } return(true); }
// = new GenericWorldItem (); public void CreateDarkrotSpawner(Vector3 spawnerPosition, Vector3 spawnerRotation, WIGroup group, int numDarkrotReleaesd, float releaseDelay, float releaseInterval) { StackItem spawnerStackItem = gDarkrotSpawner.ToStackItem(); spawnerStackItem.Transform.Position = spawnerPosition; spawnerStackItem.Transform.Rotation = spawnerRotation; spawnerStackItem.Props.Local.FreezeOnStartup = true; spawnerStackItem.Props.Local.Mode = WIMode.Frozen; WorldItem newSpawner = null; if (WorldItems.CloneFromStackItem(spawnerStackItem, group, out newSpawner)) { newSpawner.Initialize(); DarkrotSpawner ds = newSpawner.Get <DarkrotSpawner> (); ds.State.MaxDarkrotAtOneTime = numDarkrotReleaesd; ds.State.SpawnDelay = releaseDelay; ds.State.SpawnInterval = releaseInterval; } Debug.Log("Created spawner"); }
protected IEnumerator UpdateTransitionOverTime() { //player sets off an explosion FXManager.Get.SpawnExplosionFX(State.ExplosionFXType, transform, State.ExplosionPosition); MasterAudio.PlaySound(State.ExplosionSoundType, transform, State.ExplosionSound); Player.Local.Audio.Cough(); //explosion makes them go blind CameraFX.Get.SetBlind(true); CameraFX.Get.AddDamageOverlay(1f); double waitUntil = WorldClock.AdjustedRealTime + State.CharacterDTSDelay; while (WorldClock.AdjustedRealTime < waitUntil) { yield return(null); } //robert says some DTS Frontiers.GUI.NGUIScreenDialog.AddSpeech(State.CharacterDTSText, State.CharacterDTSName, State.CharacterDTSDuration); Player.Local.Audio.Cough(); Player.Local.MovementLocked = true; //force the two camps to rebuild for (int i = 0; i < State.ForceRebuildLocations.Count; i++) { WorldItem activeLocation = null; if (WIGroups.FindChildItem(State.ForceRebuildLocations[i], out activeLocation)) { activeLocation.Get <MissionInteriorController>().ForceRebuild(); } else { Debug.Log("Couldn't load location " + State.ForceRebuildLocations[i]); } } //wait for a bit while that settles in waitUntil = WorldClock.AdjustedRealTime + State.CharacterDTSDuration; while (WorldClock.AdjustedRealTime < waitUntil) { yield return(null); } //player is moved to temple entrance GameWorld.Get.ShowAboveGround(true); Player.Local.Surroundings.ExitUnderground(); waitUntil = WorldClock.AdjustedRealTime + 0.1f; while (WorldClock.AdjustedRealTime < waitUntil) { yield return(null); } //give gameworld a sec to catch up //lock the player's position for a moment //kill the guard at the temple door WorldTriggerState triggerState = null; List <WorldTrigger> triggers = GameWorld.Get.PrimaryChunk.Triggers; for (int i = 0; i < triggers.Count; i++) { if (triggers[i].name == "TriggerWarlockCampGuardIntervention") { //get the trigger and kill the guard //(due to the cave-in) TriggerGuardIntervention tgi = triggers[i].GetComponent <TriggerGuardIntervention>(); tgi.KillGuard(); break; } } Player.Local.Position = State.PlayerWakeUpPosition; //blindness goes away CameraFX.Get.SetBlind(false); //as the player wakes up have him look at Robert Player.Local.HijackControl(); double startHijackedTime = WorldClock.AdjustedRealTime; HijackedPosition = gameObject.CreateChild("HijackedPosition"); HijackedLookTarget = gameObject.CreateChild("HijackedLookTarget"); HijackedPosition.position = State.PlayerWakeUpPosition; HijackedLookTarget.position = State.PlayerWakeUpLookTarget; while (WorldClock.AdjustedRealTime < startHijackedTime + State.HijackedTimeDuration) { Player.Local.SetHijackTargets(HijackedPosition, HijackedLookTarget); yield return(null); } Character character = null; if (!Characters.Get.SpawnedCharacter("Robert", out character)) { //spawn Robert if we haven't already CharacterSpawnRequest spawnRequest = new CharacterSpawnRequest(); spawnRequest.ActionNodeName = "RobertPiecesTempleSpawn"; spawnRequest.FinishOnSpawn = true; spawnRequest.CharacterName = "Robert"; spawnRequest.MinimumDistanceFromPlayer = 3f; spawnRequest.SpawnBehindPlayer = false; spawnRequest.UseGenericTemplate = false; spawnRequest.CustomConversation = "Robert-Enc-Act-02-Pieces-05"; Player.Local.CharacterSpawner.AddSpawnRequest(spawnRequest); } Player.Local.RestoreControl(true); Player.Local.MovementLocked = false; GameObject.Destroy(HijackedPosition.gameObject, 0.5f); GameObject.Destroy(HijackedLookTarget.gameObject, 0.5f); //and we're done! yield break; }