Beispiel #1
0
 public static ExploreMode Instance()
 {
     if (instance == null)
     {
         instance = new ExploreMode();
         manager  = SL.Get <GameManager>();
         control  = SL.Get <IVRControl>();
         shared   = SL.Get <WorldBuilderMain>();
     }
     return(instance);
 }
Beispiel #2
0
    public void ButtonActivate(Node n, bool shift = false)
    {
        switch (n.fileName)
        {
        case "Builder":
            SetupFileSelectMode();
            break;

        case "Exit":
            Application.Quit();
            break;

        case "Viewer":
            SetupArtistSelection();
            break;

        case "Options":
            manager.quality--;
            if (manager.quality < 1)
            {
                manager.quality = QualitySettings.names.Length - 1;
            }
            QualitySettings.SetQualityLevel(manager.quality, true);
            manager.SetToolTip(QualitySettings.names[manager.quality] + " Setting Selected");
            PlayerPrefs.SetInt("Quality", manager.quality);
            PlayerPrefs.Save();
            break;

        case "TitleNext":
            fileId++;
            if (fileId >= allWorlds.Count)
            {
                fileId = 0;
            }
            manager.titleScreen.mainText.text = allWorlds[fileId];
            break;

        case "NextGroup":
            dioArtistId++;
            if (dioArtistId >= dioArtist.Count)
            {
                dioArtistId = 0;
            }
            manager.titleScreen.mainText.text = dioArtist[dioArtistId];
            break;

        case "BackTitle":
            SetupTitleSelectMode();
            break;

        case "TitleLoad":
            if (fileId == 0)
            {
                manager.EnableKeyboard();
                manager.titleScreen.gameObject.SetActive(false);
            }
            else
            {
                LoadWorld();
            }
            break;

        case "DioListLoad":
            z = LoadWorld(Globals.LEGACYPATH).zones.FindAll(x => x.name.IndexOf(dioArtist[dioArtistId].Substring(0, 4)) >= 0);
            selectedZoneID = 0;
            SetupDioramaSelection();
            break;

        case "DioLoad":
            LoadZone();
            ExploreMode.Instance().SetupMode();
            break;

        case "NextDiorama":
            selectedZoneID += 1;
            if (selectedZoneID >= z.Count)
            {
                selectedZoneID = 0;
            }
            manager.titleScreen.mainText.text = GetZoneName();
            break;

        default:
            manager.SetToolTip("Coming Soon");
            break;
        }
    }
        public string WhatNext(Game game)
        {
            var room = game.CurrentRoom;
            var node = GetOrCreateRoomNode(room);

            while (true)
            {
                switch (_mode)
                {
                case ExploreMode.GatherAllItems:
                {
                    // Pick up anything non-dangerous
                    var pickUpItem = room.Items.FirstOrDefault(x => !DangerousItems.Contains(x));
                    if (pickUpItem != null)
                    {
                        return($"take {pickUpItem}");
                    }

                    // Follow any unexplored door
                    var door = room.Doors.Except(node.Explored).FirstOrDefault() ?? node.Explored.First();
                    node.Explored.Add(door);
                    _wayBack = Backwards(door);

                    if (door != null)
                    {
                        return(door);
                    }

                    // A bit brute: simply forget all rooms and search for the checkpoint
                    _nodes.Clear();
                    _wayBack = null;
                    node     = GetOrCreateRoomNode(room);
                    _mode    = ExploreMode.FindSecurityCheckpoint;
                }
                break;

                case ExploreMode.FindSecurityCheckpoint:
                {
                    if (room.IsSecurityCheckpoint)
                    {
                        _mode           = ExploreMode.PrepareToPassSecurityCheckpoint;
                        _checkpointDoor = room.Doors.First(d => d != _wayBack);
                    }
                    else
                    {
                        var door = room.Doors.Except(node.Explored).FirstOrDefault() ?? node.Explored.First();
                        node.Explored.Add(door);
                        _wayBack = Backwards(door);
                        return(door);
                    }
                }
                break;

                case ExploreMode.PrepareToPassSecurityCheckpoint:
                {
                    var inventory = game.Inventory;
                    var n         = inventory.Count();

                    var prevmask = (1 << n) - 1;                                     // set all bits because all items are currently taken
                    for (var combo = 0; combo < 1 << n; combo++)
                    {
                        var keepmask = combo ^ (combo >> 1);
                        for (var i = 0; i < n; i++)
                        {
                            var itemmask = 1 << i;
                            var use      = (keepmask & itemmask) != 0;
                            var has      = (prevmask & itemmask) != 0;
                            if (use && !has)
                            {
                                _checkpointAttempts.Enqueue($"take {inventory[i]}");
                            }
                            else if (!use && has)
                            {
                                _checkpointAttempts.Enqueue($"drop {inventory[i]}");
                            }
                        }
                        _checkpointAttempts.Enqueue(_checkpointDoor);
                        prevmask = keepmask;
                    }
                    _mode = ExploreMode.PassSecurityCheckpoint;
                }
                break;

                case ExploreMode.PassSecurityCheckpoint:
                    return(_checkpointAttempts.Dequeue());
                }
            }
        }
Beispiel #4
0
    private void RightDetailText()
    {
        if (mode == ExploreMode.Instance())
        {
            string   timeText = "Viewer Mode\nLeft and Right change the Time of Day\n\n";
            TimeSpan timeSpan = TimeSpan.FromHours(TOD_Sky.Instance.Cycle.Hour);
            timeText += string.Format("{0:D2}:{1:D2}", (timeSpan.Hours % 12) + 1, timeSpan.Minutes) + (((int)timeSpan.Hours / 12) == 1 ? " PM" : " AM");

            timeText += "\n\nLeft Hand Trigger to Exit ";

            rightText.text = timeText;
            return;
        }

        string text = "Current Mode: " + modeStringEnum.ToString().Replace("_", " ") + "\n";

        if (mode == TitleScreenMode.Instance())
        {
            text += "\n\nQuality Level: " + QualitySettings.names[quality] + "\n";
        }

        if (WorldBuilderMain.currentZone != null)
        {
            if (WorldBuilderMain.currentZone.mapType != MapTag.None)
            {
                text += "Tag: " + WorldBuilderMain.currentZone.mapType.ToString() + "\n";
            }
            else
            {
                text += "\n";
            }

            if (WorldBuilderMain.currentZone.name != "")
            {
                text += "Name: " + WorldBuilderMain.currentZone.name + "\n";
            }
            else
            {
                text += "\n";
            }
        }
        else
        {
            text += "\n";
        }

        if (builderModes.Contains(modeStringEnum))
        {
            text += "ZoneID: " + WorldBuilderMain.currentZoneId + "\n";
            text += "Working Layer: " + WorldBuilderMain.currentLayer.ToString() + "\n";
            text += "Lock Mode: ";
            if (PlaceObjectMode.posLock == PlaceObjectMode.PosLock.Grid)
            {
                text += "Grid Locked\n";
            }
            else if (PlaceObjectMode.posLock == PlaceObjectMode.PosLock.RotLock)
            {
                text += "Rotation Locked\n";
            }
            else
            {
                text += "Unlocked\n";
            }
        }

        text += DateTime.Now.ToString("hh:mm tt") + " - Last Save: " + (lastSaveTime == null ? "NA" : ((DateTime)lastSaveTime).ToString("hh:mm tt"));

        rightText.text = text;
    }
Beispiel #5
0
    public void ButtonActivate(Node n, bool shift = false)
    {
        if (n.nodeType == "prefab")
        {
            if (shift)
            {
                if (!manager.favorites.Contains(n.todID))
                {
                    manager.favorites.Add(n.todID);
                    manager.SetToolTip("Added " + n.fileName + " to favorites.");
                }
                else
                {
                    manager.favorites.Remove(n.todID);
                    manager.SetToolTip("Removed " + n.fileName + " from favorites.");
                }
                TODV2.SaveGeneric <List <int> >(Globals.FAVPATH, manager.favorites);
            }
            else
            {
                SpawnNewObject(n);
                ChoosePlaceMode();
            }
        }
        else if (n.nodeType == "zone")
        {
            int id       = -1;
            int lastChar = n.fileName.IndexOf(":");
            if (lastChar < 0 || !int.TryParse(n.fileName.Substring(0, lastChar), out id))
            {
                id = currentWorld.zones.Max(x => x.zoneId) + 1;
            }


            if (shift)
            {
                currentZoneId = id;
                LoadZone();
                manager.activeFM.LoadZoneList();
                return;
            }

            SpawnNewObject(n);
            TextMeshPro tmp = selectedObject.GetComponentInChildren <TextMeshPro>();
            if (tmp)
            {
                tmp.text = id.ToString();
            }
            manager.activeFM.CloseFolder();
            ChoosePlaceMode();
        }
        else if (n.nodeType == "button")
        {
            switch (n.fileName)
            {
            case "QUALITYUP":
                manager.quality++;
                if (manager.quality >= QualitySettings.names.Length)
                {
                    manager.quality = QualitySettings.names.Length - 1;
                }
                QualitySettings.SetQualityLevel(manager.quality, true);
                manager.SetToolTip(QualitySettings.names[manager.quality] + " Setting Selected (For this session only)");
                return;

            case "QUALITYDOWN":
                manager.quality--;
                if (manager.quality < 0)
                {
                    manager.quality = 0;
                }
                QualitySettings.SetQualityLevel(manager.quality, true);
                manager.SetToolTip(QualitySettings.names[manager.quality] + " Setting Selected (For this session only)");
                return;

            case "EXPLORE":
                ExploreMode.Instance().SetupMode();
                return;

            case "LIGHTSETUP":
                LightSetupMode.Instance().SetupMode();
                return;

            case "RESETLIGHT":
                TOD_Sky.Instance.Day.LightIntensity   = 1;
                TOD_Sky.Instance.Night.LightIntensity = 5;
                TOD_Sky.Instance.Cycle.Hour           = 12;
                PlayerPrefs.SetFloat("DayIntensity", TOD_Sky.Instance.Day.LightIntensity);
                PlayerPrefs.SetFloat("NightIntensity", TOD_Sky.Instance.Night.LightIntensity);
                PlayerPrefs.SetFloat("TimeOfDay", TOD_Sky.Instance.Cycle.Hour);
                PlayerPrefs.Save();
                return;

            case "VIEWPOINT":
                manager.SetToolTip("Coming Soon");
                return;

            case "UpFolder":
                manager.activeFM.CloseFolder();
                return;

            case "NextPage":
                manager.activeFM.NextPage();
                break;

            case "LastPage":
                manager.activeFM.LastPage();
                break;

            case "FavTest":
                manager.activeFM.LoadFavList(manager.favorites);
                break;

            case "ZONES":
                manager.activeFM.LoadZoneList();
                break;


            //WristTop
            case "SAVE":
                SaveWorld();
                break;

            case "ZONENAME":
                manager.keyboard.gameObject.SetActive(true);
                manager.builderObjects.SetActive(false);
                manager.Diorama.SetActive(false);
                manager.StartCoroutine(ZoneNameWait());
                break;

            case "ZONETAG":
                CycleZoneTag();
                break;

            case "UNLOCKLOCK":
                PlaceObjectMode.posLock = PlaceObjectMode.PosLock.Free;
                manager.SetToolTip("Position Unlocked");
                break;

            case "ROTATIONLOCK":
                PlaceObjectMode.posLock = PlaceObjectMode.PosLock.RotLock;
                manager.SetToolTip("Rotation Locked");
                break;

            case "GRIDLOCK":
                PlaceObjectMode.posLock = PlaceObjectMode.PosLock.Grid;
                if (selectedObject)
                {
                    Vector3 e = selectedObject.transform.localRotation.eulerAngles;
                    objAngleY = Mathf.RoundToInt(e.y / 90) * 90;
                    objAngleX = 0f;
                    objAngleZ = 0f;
                    selectedObject.transform.localRotation = Quaternion.Euler(new Vector3(objAngleX, objAngleY, objAngleZ));
                }
                manager.SetToolTip("Grid Mode Activated");
                break;

            case "LAYERDOWN":
                ChangeLayer(-1);
                break;

            case "LAYERVISIBLE":
                manager.SetToolTip("Coming Soon");
                break;

            case "LAYERUP":
                ChangeLayer(1);
                break;

            //Botton Menu
            case "SAVEEXIT":
                SaveWorld();
                manager.DestroyDioReset();
                TitleScreenMode.Instance().SetupMode();
                break;

            case "SPAWNMODE":
                SaveWorld();
                AdventureTester.Instance().SetupMode();
                manager.SetToolTip("Play Test Mode Activated");
                break;

            case "TOGGLEGRID":
                manager.grid.SetActive(!manager.grid.activeInHierarchy);
                manager.SetToolTip("Grid " + (manager.grid.activeInHierarchy ? "Visible" : "Hidden"));
                break;

            //Front Menu
            case "EXITNOSAVE":
                Application.Quit();
                return;


            //case "Clear All Viewpoints":
            //    currentZone.viewpoints.Clear();
            //    break;

            //case "Show Help Panels On":
            //    manager.showControls = false;
            //    PlayerPrefs.SetInt("BM Show Controls", (manager.showControls ? 0 : 1));
            //    PlayerPrefs.Save();

            //    break;
            //case "Show Help Panels Off":
            //    manager.showControls = true;
            //    PlayerPrefs.SetInt("BM Show Controls", (manager.showControls ? 0 : 1));
            //    PlayerPrefs.Save();

            //    break;

            //case "SetView":
            //    SetView();
            //    //manager.UpdateLog("View Saved");
            //    break;
            //case "LoadView":
            //    LoadView();
            //    break;
            default:
                n.ActivateNode();
                break;
            }
        }
        else
        {
            n.ActivateNode();
        }
    }