Example #1
0
        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);
        }
Example #2
0
        // = 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");
        }
Example #3
0
        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;
        }