Beispiel #1
0
        public static void OnSelectionChanged()
        {
            if (Selection.activeObject == null)
            {
                return;
            }
            var assetPath = FileAndPathUtils.MakeProjectRelative(AssetDatabase.GetAssetPath(Selection.activeObject));

            if (GameDataTracker.IsGameDataFile(assetPath) == false)
            {
                return;
            }

            try
            {
                var selectedAssetType   = Selection.activeObject.GetType();
                var inspectorWindowType = typeof(PopupWindow).Assembly.GetType("UnityEditor.InspectorWindow");
                var inspectorWindow     = EditorWindow.GetWindow(inspectorWindowType);
                var activeEditorTracker = inspectorWindow.HasProperty("tracker") ?
                                          inspectorWindow.GetPropertyValue("tracker") :
                                          inspectorWindow.GetFieldValue("m_Tracker");
                var customEditorAttributesType = typeof(PopupWindow).Assembly.GetType("UnityEditor.CustomEditorAttributes");
                var customEditorsList          = (System.Collections.IList)customEditorAttributesType.GetFieldValue("kSCustomEditors");
                var cachedCustomEditorsList    = customEditorAttributesType.HasField("kCachedEditorForType") ?
                                                 (Dictionary <Type, Type>)customEditorAttributesType.GetFieldValue("kCachedEditorForType") :
                                                 null;

                foreach (var customEditor in customEditorsList)
                {
                    if (customEditor == null || (Type)customEditor.GetFieldValue("m_InspectedType") != selectedAssetType)
                    {
                        continue;
                    }

                    var originalInspectorType = (Type)customEditor.GetFieldValue("m_InspectorType");
                    // override inspector
                    customEditor.SetFieldValue("m_InspectorType", typeof(GameDataInspector));
                    if (cachedCustomEditorsList != null)
                    {
                        cachedCustomEditorsList[selectedAssetType] = typeof(GameDataInspector);
                    }
                    // force rebuild editor list
                    activeEditorTracker.Invoke("ForceRebuild");
                    inspectorWindow.Repaint();
                    // restore original inspector
                    customEditor.SetFieldValue("m_InspectorType", originalInspectorType);
                    if (cachedCustomEditorsList != null)
                    {
                        cachedCustomEditorsList.Remove(selectedAssetType);
                    }
                }
            }
            catch (Exception updateEditorError)
            {
                if (Settings.Current.Verbose)
                {
                    Debug.LogError(updateEditorError);
                }
            }
        }
Beispiel #2
0
 private void OnTriggerEnter(Collider trig)
 {
     if (trig.CompareTag("Player") && GameDataTracker.cutsceneMode == GameDataTracker.cutsceneModeOptions.Mobile)
     {
         GameDataTracker.AddItem(ItemID);
         GameDataTracker.playerData.GatheredItemsDictionary[sceneName].Add(instanceID);
         Destroy(gameObject);
     }
 }
Beispiel #3
0
 public void Start()
 {
     GameDataTracker.spawnLastTransitionObject();
     //SpawnsPartner
     if (GameDataTracker.playerData.CurrentCompanion > 0)
     {
         SpawnPartner(GameDataTracker.playerData.CurrentCompanion);
     }
 }
Beispiel #4
0
    //public static List<Character> EnemyList;

    void Awake()
    {
        //MAKES THIS OBJECT PERSIST IN EVERY SCENE
        if (DataTracker == null)
        {
            DontDestroyOnLoad(gameObject);
            DataTracker = this;
        }
        else if (DataTracker != this)
        {
            Destroy(gameObject);
        }
    }
Beispiel #5
0
 public void StartGame(string saveFileName)
 {
     GameDataTracker.saveFileName = saveFileName;
     GameDataTracker.Load();
     if (GameDataTracker.playerData.fileName == "New Game")
     {
         FirstMenu.SetActive(false);
         FileNameMenu.SetActive(true);
     }
     else
     {
         SceneManager.LoadScene(startSceneName, LoadSceneMode.Single);
     }
 }
Beispiel #6
0
    override public bool Activate()
    {
        Animator animatorStorage;

        if (string.IsNullOrEmpty(TargetName))
        {
            animatorStorage = parent.GetComponent <Animator>();
        }
        else
        {
            animatorStorage = GameDataTracker.findCharacterByName(TargetName, GameDataTracker.CharacterList).CharacterObject.GetComponent <Animator>();
        }
        animatorStorage.SetTrigger(TriggerName);
        return(false);
    }
Beispiel #7
0
        private static bool OnOpenAsset(int instanceID, int exceptionId)
        {
            var gameDataPath = AssetDatabase.GetAssetPath(instanceID);

            if (GameDataTracker.IsGameDataFile(gameDataPath) == false)
            {
                return(false);
            }

            var reference = ValidationException.GetReference(exceptionId);

            loadEditorTask = new Coroutine <bool>(LoadEditor(gameDataPath, reference, loadEditorTask));
            loadEditorTask.ContinueWith(t => EditorUtility.ClearProgressBar());

            return(true);
        }
Beispiel #8
0
        // ReSharper disable once UnusedMember.Local
        // ReSharper disable once IdentifierTypo
        private static void OnPostprocessAllAssets(string[] _, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
        {
            if (Settings.Current == null)
            {
                return;
            }

            foreach (var deletedPath in deletedAssets)
            {
                if (!GameDataTracker.Untrack(deletedPath))
                {
                    continue;
                }

                if (Settings.Current.Verbose)
                {
                    Debug.Log("GameData deleted: " + deletedPath);
                }

                GameDataHashByPath.Remove(deletedPath);
            }
            for (var i = 0; i < movedAssets.Length; i++)
            {
                var fromPath = FileAndPathUtils.MakeProjectRelative(movedFromAssetPaths[i]);
                var toPath   = FileAndPathUtils.MakeProjectRelative(movedAssets[i]);
                if (fromPath == null || toPath == null)
                {
                    continue;
                }

                if (!GameDataTracker.IsTracked(fromPath))
                {
                    continue;
                }

                GameDataTracker.Untrack(fromPath);
                GameDataTracker.Track(toPath);

                if (Settings.Current.Verbose)
                {
                    Debug.Log("GameData moved: " + toPath + " from: " + fromPath);
                }

                GameDataHashByPath.Remove(fromPath);
                GameDataHashByPath.Remove(toPath);
            }
        }
Beispiel #9
0
    // Update is called once per frame
    void Update()
    {
        //text.text = "Score: " + score;
        text.text = "Score: " + GameDataTracker.GameScore;
        if (GameDataTracker.Lives <= 0)
        {           //SHOW STARTAPP INTERSTIATIAL EVERY 2 RUNS
            if (GameDataTracker.GameRuns % 3 == 0 && GameDataTracker.AD_AlreadyShown == false)
            {
                //if true => Show ad
                                #if UNITY_ANDROID
                StartAppWrapper.showAd();
                StartAppWrapper.loadAd();
                                #endif
                GameDataTracker.AD_AlreadyShown = true;
            }
            //Report Score to leaderboard


            //
            GameObject ExitDoor = GameObject.FindGameObjectWithTag("ExitDoor");
            Destroy(ExitDoor);
            GameObject BALL = GameObject.FindGameObjectWithTag("Ball");
            DestroyObject(BALL);
            // ... tell the animator the game is over.
            anim.SetTrigger("GameOver");

            // .. increment a timer to count up to restarting.
            restartTimer += Time.deltaTime;
            //ADD SUCCES SCREEN MOT GAMER OVER AND SHOW PROGRESS
            // .. if it reaches the restart delay...
            if (restartTimer >= restartDelay)
            {
                GameDataTracker.Reset();
                // .. then reload the currently loaded level.
                //Application.LoadLevel(Application.loadedLevel);
                UnityEngine.SceneManagement.SceneManager.LoadScene("MainMenu", UnityEngine.SceneManagement.LoadSceneMode.Single);
            }
        }
    }
Beispiel #10
0
    override public bool Activate()
    {
        if (TargetObject == string.Empty)
        {
            TObject       = OverworldController.Player;
            agent         = TObject.GetComponent <NavMeshAgent>();
            agent.enabled = true;
        }
        else
        {
            TObject = GameDataTracker.findCharacterByName(TargetObject, GameDataTracker.CharacterList).CharacterObject;
            agent   = TObject.GetComponent <NavMeshAgent>();
        }

        if (ReferenceObject == string.Empty)
        {
            RObject = parent;
        }
        else
        {
            RObject = GameObject.Find(ReferenceObject);
            if (RObject == null)
            {
                RObject = GameDataTracker.findCharacterByName(TargetObject, GameDataTracker.CharacterList).CharacterObject;
            }
        }

        waypointPosition  = RObject.transform.position;
        waypointPosition += PositionOffset;
        NavMeshHit hit;

        NavMesh.SamplePosition(waypointPosition, out hit, 2, NavMesh.AllAreas);
        waypointPosition = hit.position;
        agent.SetDestination(waypointPosition);

        active = true;
        return(Wait);
    }
Beispiel #11
0
    private void DialogueNodeRead()
    {
        GameObject textbox = Resources.Load <GameObject>("TextBox");

        Character findCharacter = GameDataTracker.findCharacterByName(speakerName, GameDataTracker.CharacterList);

        if (GameDataTracker.combatExecutor != null)
        {
            GameDataTracker.combatExecutor.FocusOnCharacter(findCharacter.CharacterObject);
        }
        FriendlyNPCClass friendlyNPC = findCharacter.CharacterObject.GetComponent <FriendlyNPCClass>();

        if (friendlyNPC != null)
        {
            letter_noises          = friendlyNPC.ObjectInfo.LetterNoises;
            letters_per_noise_list = friendlyNPC.ObjectInfo.LetterNoisesPerList;
        }
        else
        {
            letter_noises          = null;
            letters_per_noise_list = null;
        }
        Transform target;
        float     dialogueHeight;

        target         = findCharacter.CharacterObject.transform;
        dialogueHeight = findCharacter.ObjectInfo.GetDialogueHeightOverSpeaker();

        spawnedTextBox = Instantiate <GameObject>(textbox, new Vector3(target.position.x, target.position.y + dialogueHeight, target.position.z + 0.2f), Quaternion.identity);
        TextBoxController tbController = spawnedTextBox.GetComponent <TextBoxController>();

        tbController.textfile               = inputText;
        tbController.choices                = currentLinks;
        tbController.speakerName            = speakerName;
        tbController.scriptSource           = deconstructerSource;
        tbController.letter_noises          = letter_noises;
        tbController.letters_per_noise_list = letters_per_noise_list;
    }
Beispiel #12
0
 public override void OverWorldUse(int itemIndex)
 {
     base.OverWorldUse(itemIndex);
     GameDataTracker.ChangeHealth(2);
 }
Beispiel #13
0
    public void Awake()
    {
        AllMorganTorches = new List <MorganTorchScript>();
        MorganMaterialReset();
        AreaInfo = AreaInfoInput;
        controls = new GameControls();
        GameDataTracker.clearCharacterList();
        PauseMenu = Instantiate(pauseMenu, Vector3.zero, Quaternion.identity);
        PauseMenu.SetActive(false);
        if (GameDataTracker.lastAreaWasCombat == false)
        {
            if (GameDataTracker.previousArea != null)
            {
                foreach (GameObject sceneTransfer in SceneTransfers)
                {
                    //SPAWNS PLAYER AT THE DESIGNATED AREA ENTRANCE
                    if (sceneTransfer.GetComponent <SceneMover>().sceneName == GameDataTracker.previousArea)
                    {
                        Player = Instantiate(playerInput, sceneTransfer.transform.position, Quaternion.identity);

                        GameDataTracker.cutsceneMode = GameDataTracker.cutsceneModeOptions.Cutscene;
                        PlayerTravelDirection           pm = ScriptableObject.CreateInstance <PlayerTravelDirection>();
                        SceneMover.exitDirectionOptions entranceDirection = sceneTransfer.GetComponent <SceneMover>().exitDirection;
                        if (entranceDirection == SceneMover.exitDirectionOptions.up)
                        {
                            pm.endPosition     = Player.transform.position + new Vector3(0, 0, -2);
                            pm.travelDirection = SceneMover.exitDirectionOptions.down;
                        }
                        else if (entranceDirection == SceneMover.exitDirectionOptions.left)
                        {
                            pm.endPosition     = Player.transform.position + new Vector3(2, 0, 0);
                            pm.travelDirection = SceneMover.exitDirectionOptions.right;
                        }
                        else if (entranceDirection == SceneMover.exitDirectionOptions.right)
                        {
                            pm.endPosition     = Player.transform.position + new Vector3(-2, 0, 0);
                            pm.travelDirection = SceneMover.exitDirectionOptions.left;
                        }
                        else if (entranceDirection == SceneMover.exitDirectionOptions.down)
                        {
                            pm.endPosition     = Player.transform.position + new Vector3(0, 0, 2);
                            pm.travelDirection = SceneMover.exitDirectionOptions.up;
                        }
                        CutsceneController.addCutsceneEvent(pm, Player, true, GameDataTracker.cutsceneModeOptions.Cutscene);
                    }
                }
            }
            else
            {
                //SPAWNS PLAYERS AT A SPAWNPOINT
                Player = Instantiate(playerInput, spawnPoint.transform.position, Quaternion.identity);
            }
        }
        else
        {
            //SPAWNS PLAYER WHERE THEY STARTED COMBAT
            Player = Instantiate(playerInput, GameDataTracker.combatStartPosition, Quaternion.identity);
            GameDataTracker.lastAreaWasCombat = false;
        }
        trackingCamera = Instantiate <GameObject>(trackingCameraInput, Player.transform.position + new Vector3(0, 1, -2), Quaternion.Euler(25f, 0, 0));
        trackingCamera.GetComponent <CameraFollow>().ObjectToTrack = Player;
        trackingCamera.GetComponent <CameraFollow>().combat        = false;
        updateTrackingCameraY(Player.transform.position.y);
    }
Beispiel #14
0
    //private void OnEnable()
    //{
    //EventSystem.current.SetSelectedGameObject(null);
    //EventSystem.current.SetSelectedGameObject(characterMenuFirstFocus);
    //}

    public void SaveGame()
    {
        GameDataTracker.Save();
    }
Beispiel #15
0
 public void DeleteSave(string deleteFileName)
 {
     GameDataTracker.DeleteFile(deleteFileName);
     UpdateAllFileName();
 }
Beispiel #16
0
 public void StartNewGame()
 {
     GameDataTracker.playerData.fileName = NewGameTextField.GetComponent <TMP_InputField>().text;
     GameDataTracker.Save();
     SceneManager.LoadScene(startSceneName, LoadSceneMode.Single);
 }
Beispiel #17
0
        public override void OnInspectorGUI()
        {
            var gameDataAsset = (Object)this.target;
            var gameDataPath  = FileAndPathUtils.MakeProjectRelative(AssetDatabase.GetAssetPath(gameDataAsset));

            var assetPath = FileAndPathUtils.MakeProjectRelative(AssetDatabase.GetAssetPath(Selection.activeObject));

            if (GameDataTracker.IsGameDataFile(assetPath) == false)
            {
                this.DrawDefaultInspector();
                return;
            }

            if (this.lastAsset != gameDataAsset || this.gameDataSettings == null)
            {
                this.gameDataSettings = GameDataSettings.Load(gameDataPath);
                this.gameDataSettings.ScriptingAssemblies = this.gameDataSettings.ScriptingAssemblies ?? new string[0];
                this.lastAsset                = gameDataAsset;
                this.newScriptingAssembly     = null;
                this.newScriptingAssemblyName = null;
            }
            GUI.enabled = true;
            GUILayout.Label(Path.GetFileName(gameDataPath), EditorStyles.boldLabel);
            this.gameDataSettings.Generator = (int)(GameDataSettings.CodeGenerator)EditorGUILayout.EnumPopup(Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_GENERATOR, (GameDataSettings.CodeGenerator) this.gameDataSettings.Generator);
            if (this.gameDataSettings.Generator != (int)GameDataSettings.CodeGenerator.None)
            {
                this.codeGenerationFold = EditorGUILayout.Foldout(this.codeGenerationFold, Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_GENERATION_LABEL);
                if (this.codeGenerationFold)
                {
                    this.gameDataSettings.AutoGeneration = EditorGUILayout.Toggle(Resources.UI_UNITYPLUGIN_INSPECTOR_AUTO_GENERATION,
                                                                                  this.gameDataSettings.AutoGeneration);
                    var codeAsset  = !string.IsNullOrEmpty(this.gameDataSettings.CodeGenerationPath) && File.Exists(this.gameDataSettings.CodeGenerationPath) ? AssetDatabase.LoadAssetAtPath <TextAsset>(this.gameDataSettings.CodeGenerationPath) : null;
                    var assetAsset = !string.IsNullOrEmpty(this.gameDataSettings.AssetGenerationPath) && File.Exists(this.gameDataSettings.AssetGenerationPath) ? AssetDatabase.LoadAssetAtPath <ScriptableObject>(this.gameDataSettings.AssetGenerationPath) : null;

                    if (codeAsset != null)
                    {
                        this.gameDataSettings.CodeGenerationPath = AssetDatabase.GetAssetPath(EditorGUILayout.ObjectField(Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_GENERATION_PATH, codeAsset, typeof(TextAsset), false));
                    }
                    else
                    {
                        this.gameDataSettings.CodeGenerationPath = EditorGUILayout.TextField(Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_GENERATION_PATH,
                                                                                             this.gameDataSettings.CodeGenerationPath);
                    }

                    if (this.gameDataSettings.Generator == (int)GameDataSettings.CodeGenerator.CSharpCodeAndAsset)
                    {
                        if (assetAsset != null)
                        {
                            this.gameDataSettings.AssetGenerationPath = AssetDatabase.GetAssetPath(EditorGUILayout.ObjectField(Resources.UI_UNITYPLUGIN_INSPECTOR_ASSET_GENERATION_PATH, assetAsset, typeof(ScriptableObject), false));
                        }
                        else
                        {
                            this.gameDataSettings.AssetGenerationPath = EditorGUILayout.TextField(Resources.UI_UNITYPLUGIN_INSPECTOR_ASSET_GENERATION_PATH, this.gameDataSettings.AssetGenerationPath);
                        }
                    }

                    if ((this.gameDataSettings.Generator == (int)GameDataSettings.CodeGenerator.CSharp ||
                         this.gameDataSettings.Generator == (int)GameDataSettings.CodeGenerator.CSharpCodeAndAsset) &&
                        Path.GetExtension(this.gameDataSettings.CodeGenerationPath) != ".cs")
                    {
                        this.gameDataSettings.CodeGenerationPath = Path.ChangeExtension(this.gameDataSettings.CodeGenerationPath, ".cs");
                    }
                    if (this.gameDataSettings.Generator == (int)GameDataSettings.CodeGenerator.CSharpCodeAndAsset &&
                        Path.GetExtension(this.gameDataSettings.AssetGenerationPath) != ".asset")
                    {
                        this.gameDataSettings.AssetGenerationPath = Path.ChangeExtension(this.gameDataSettings.AssetGenerationPath, ".asset");
                    }

                    this.gameDataSettings.Namespace = EditorGUILayout.TextField(Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_NAMESPACE,
                                                                                this.gameDataSettings.Namespace);
                    this.gameDataSettings.GameDataClassName = EditorGUILayout.TextField(Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_API_CLASS_NAME,
                                                                                        this.gameDataSettings.GameDataClassName);
                    this.gameDataSettings.DocumentClassName = EditorGUILayout.TextField(Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_DOCUMENT_CLASS_NAME,
                                                                                        this.gameDataSettings.DocumentClassName);
                    this.gameDataSettings.LineEnding = (int)(GameDataSettings.LineEndings)EditorGUILayout.EnumPopup(
                        Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_LINE_ENDINGS, (GameDataSettings.LineEndings) this.gameDataSettings.LineEnding);
                    this.gameDataSettings.Indentation = (int)(GameDataSettings.Indentations)EditorGUILayout.EnumPopup(
                        Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_INDENTATION, (GameDataSettings.Indentations) this.gameDataSettings.Indentation);
                    this.gameDataSettings.Options = (int)(CodeGenerationOptions)EditorGUILayout.EnumMaskField(
                        Resources.UI_UNITYPLUGIN_INSPECTOR_CODE_OPTIONS, (CodeGenerationOptions)this.gameDataSettings.Options);
                }
            }

            this.scriptingAssembliesFold = EditorGUILayout.Foldout(this.scriptingAssembliesFold, Resources.UI_UNITYPLUGIN_INSPECTOR_SCRIPTING_ASSEMBLIES_LABEL);
            if (this.scriptingAssembliesFold)
            {
                for (var i = 0; i < this.gameDataSettings.ScriptingAssemblies.Length; i++)
                {
                    var watchedAssetPath = this.gameDataSettings.ScriptingAssemblies[i];
                    var assetExists      = !string.IsNullOrEmpty(watchedAssetPath) && (File.Exists(watchedAssetPath) || Directory.Exists(watchedAssetPath));
                    var watchedAsset     = assetExists ? AssetDatabase.LoadMainAssetAtPath(watchedAssetPath) : null;
                    if (watchedAsset != null)
                    {
                        this.gameDataSettings.ScriptingAssemblies[i] = AssetDatabase.GetAssetPath(EditorGUILayout.ObjectField(Resources.UI_UNITYPLUGIN_INSPECTOR_ASSET_LABEL, watchedAsset, typeof(Object), false));
                    }
                    else
                    {
                        this.gameDataSettings.ScriptingAssemblies[i] = EditorGUILayout.TextField(Resources.UI_UNITYPLUGIN_INSPECTOR_NAME_LABEL, watchedAssetPath);
                    }
                }
                EditorGUILayout.Space();
                this.newScriptingAssembly = EditorGUILayout.ObjectField("<" + Resources.UI_UNITYPLUGIN_INSPECTOR_ADD_ASSET_BUTTON + ">", this.newScriptingAssembly, typeof(Object), false);
                if (Event.current.type == EventType.repaint && this.newScriptingAssembly != null)
                {
                    var assemblies = new HashSet <string>(this.gameDataSettings.ScriptingAssemblies);
                    assemblies.Remove("");
                    assemblies.Add(AssetDatabase.GetAssetPath(this.newScriptingAssembly));
                    this.gameDataSettings.ScriptingAssemblies = assemblies.ToArray();
                    this.newScriptingAssembly = null;
                    GUI.changed = true;
                }
                EditorGUILayout.BeginHorizontal();
                this.newScriptingAssemblyName = EditorGUILayout.TextField("<" + Resources.UI_UNITYPLUGIN_INSPECTOR_ADD_NAME_BUTTON + ">", this.newScriptingAssemblyName);
                if (GUILayout.Button(Resources.UI_UNITYPLUGIN_INSPECTOR_ADD_BUTTON, EditorStyles.toolbarButton, GUILayout.Width(70), GUILayout.Height(18)))
                {
                    var assemblies = new HashSet <string>(this.gameDataSettings.ScriptingAssemblies);
                    assemblies.Remove("");
                    assemblies.Add(this.newScriptingAssemblyName);
                    this.gameDataSettings.ScriptingAssemblies = assemblies.ToArray();
                    this.newScriptingAssemblyName             = null;
                    GUI.changed = true;
                    this.Repaint();
                }
                GUILayout.Space(5);
                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.Space();
            GUILayout.Label(Resources.UI_UNITYPLUGIN_INSPECTOR_ACTIONS_GROUP, EditorStyles.boldLabel);

            if (EditorApplication.isCompiling)
            {
                EditorGUILayout.HelpBox(Resources.UI_UNITYPLUGIN_COMPILING_WARNING, MessageType.Warning);
            }
            else if (CoroutineScheduler.IsRunning)
            {
                EditorGUILayout.HelpBox(Resources.UI_UNITYPLUGIN_COROUTINE_IS_RUNNIG_WARNING, MessageType.Warning);
            }

            EditorGUILayout.BeginHorizontal();
            GUI.enabled = !CoroutineScheduler.IsRunning && !EditorApplication.isCompiling;
            if (GUILayout.Button(Resources.UI_UNITYPLUGIN_INSPECTOR_EDIT_BUTTON))
            {
                AssetDatabase.OpenAsset(gameDataAsset);
                this.Repaint();
            }
            if (this.gameDataSettings.Generator != (int)GameDataSettings.CodeGenerator.None && string.IsNullOrEmpty(this.gameDataSettings.CodeGenerationPath) == false)
            {
                if (GUILayout.Button(Resources.UI_UNITYPLUGIN_INSPECTOR_RUN_GENERATOR_BUTTON))
                {
                    CoroutineScheduler.Schedule(Menu.GenerateCodeAndAssetsAsync(gameDataPath, ProgressUtils.ReportToLog(Resources.UI_UNITYPLUGIN_INSPECTOR_GENERATION_PREFIX + " ")), "generation::" + gameDataPath)
                    .ContinueWith(_ => this.Repaint());
                }
            }
            GUI.enabled = !CoroutineScheduler.IsRunning && !EditorApplication.isCompiling;
            if (GUILayout.Button(Resources.UI_UNITYPLUGIN_INSPECTOR_VALIDATE_BUTTON))
            {
                CoroutineScheduler.Schedule(Menu.ValidateAsync(gameDataPath, ProgressUtils.ReportToLog(Resources.UI_UNITYPLUGIN_INSPECTOR_VALIDATION_PREFIX + " ")), "validation::" + gameDataPath)
                .ContinueWith(_ => this.Repaint());
            }
            if (GUILayout.Button(Resources.UI_UNITYPLUGIN_INSPECTOR_BACKUP_BUTTON))
            {
                this.Backup(gameDataPath);
            }
            if (GUILayout.Button(Resources.UI_UNITYPLUGIN_INSPECTOR_RESTORE_BUTTON))
            {
                this.Restore(gameDataPath);
            }
            EditorGUILayout.EndHorizontal();
            GUI.enabled = true;

            if (GUI.changed)
            {
                this.gameDataSettings.Save(gameDataPath);
            }
        }
Beispiel #18
0
        private static void Update()
        {
            if (Settings.Current == null)
            {
                return;
            }

            if (LastWatchedGameDataTrackerVersion != GameDataTracker.Version)
            {
                var gameDataPaths = new HashSet <string>(GameDataTracker.All);
                foreach (var gameDataPath in gameDataPaths)
                {
                    if (Watchers.ContainsKey(gameDataPath) || File.Exists(gameDataPath) == false)
                    {
                        continue;
                    }

                    try
                    {
                        var fullPath      = Path.GetFullPath(gameDataPath);
                        var directoryName = Path.GetDirectoryName(fullPath);
                        var watcher       = new FileSystemWatcher(directoryName)
                        {
                            NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size
                        };
                        watcher.Filter   = Path.GetFileName(fullPath);
                        watcher.Changed += GameDataChanged;
                        Watchers.Add(gameDataPath, watcher);

                        try { GameDataHashByPath[gameDataPath] = FileAndPathUtils.ComputeHash(gameDataPath); }
                        catch
                        {
                            // ignored
                        }
                        watcher.EnableRaisingEvents = true;
                    }
                    catch (Exception e)
                    {
                        Debug.LogError("Failed to create FileSystemWatcher for GameData " + gameDataPath + ": " + e);
                    }
                }

                foreach (var gameDataPath in Watchers.Keys.ToArray())
                {
                    if (gameDataPaths.Contains(gameDataPath))
                    {
                        continue;
                    }

                    var watcher = Watchers[gameDataPath];
                    Watchers.Remove(gameDataPath);
                    try { watcher.Dispose(); }
                    catch (Exception e) { Debug.LogError("Failed to dispose FileSystemWatcher of GameData: " + e); }
                }
                LastWatchedGameDataTrackerVersion = GameDataTracker.Version;
            }

            var changedAssetsCopy = default(string[]);

            lock (ChangedAssetPaths)
            {
                if (ChangedAssetPaths.Count > 0)
                {
                    changedAssetsCopy = ChangedAssetPaths.ToArray();
                    ChangedAssetPaths.Clear();
                }
            }

            if (changedAssetsCopy != null)
            {
                foreach (var changedAsset in changedAssetsCopy)
                {
                    if (Settings.Current.Verbose)
                    {
                        Debug.Log("Changed Asset: " + changedAsset);
                    }

                    if (!File.Exists(changedAsset) || GameDataTracker.IsTracked(changedAsset) == false)
                    {
                        continue;
                    }
                    var gameDataSettings = GameDataSettings.Load(changedAsset);
                    if (!gameDataSettings.AutoGeneration)
                    {
                        continue;
                    }

                    var assetHash = default(string);
                    try
                    {
                        assetHash = FileAndPathUtils.ComputeHash(changedAsset);
                    }
                    catch (Exception e)
                    {
                        Debug.LogWarning("Failed to compute hash of " + changedAsset + ": " + e);
                        continue;
                    }

                    var oldAssetHash = default(string);
                    if (GameDataHashByPath.TryGetValue(changedAsset, out oldAssetHash) && assetHash == oldAssetHash)
                    {
                        continue;                         // not changed
                    }
                    if (EditorApplication.isUpdating)
                    {
                        continue;
                    }

                    if (Settings.Current.Verbose)
                    {
                        Debug.Log("Asset's " + changedAsset + " hash has changed from " + (oldAssetHash ?? "<none>") + " to " + assetHash);
                    }

                    GameDataHashByPath[changedAsset] = assetHash;
                    CoroutineScheduler.Schedule
                    (
                        Menu.GenerateCodeAndAssetsAsync(
                            path: changedAsset,
                            progressCallback: ProgressUtils.ReportToLog("Generation(Auto): ")),
                        "generation::" + changedAsset
                    );
                }
            }
        }
Beispiel #19
0
        public static void OnSelectionChanged()
        {
            if (Selection.activeObject == null)
            {
                return;
            }
            var assetPath = FileAndPathUtils.MakeProjectRelative(AssetDatabase.GetAssetPath(Selection.activeObject));

            if (GameDataTracker.IsGameDataFile(assetPath) == false)
            {
                return;
            }

            try
            {
                var selectedAssetType   = Selection.activeObject.GetType();
                var inspectorWindowType = typeof(PopupWindow).Assembly.GetType("UnityEditor.InspectorWindow");
                var inspectorWindow     = EditorWindow.GetWindow(inspectorWindowType);
                var activeEditorTracker = inspectorWindow.HasProperty("tracker") ?
                                          inspectorWindow.GetPropertyValue("tracker") :
                                          inspectorWindow.GetFieldValue("m_Tracker");
                var customEditorAttributesType = typeof(PopupWindow).Assembly.GetType("UnityEditor.CustomEditorAttributes");
                var customEditorsList          = customEditorAttributesType.GetFieldValue("kSCustomEditors") as IList;
                var customEditorsDictionary    = customEditorAttributesType.GetFieldValue("kSCustomEditors") as IDictionary;
                var monoEditorType             = customEditorAttributesType.GetNestedType("MonoEditorType", BindingFlags.NonPublic);

                // after unity 2018.*
                if (customEditorsDictionary != null)
                {
                    foreach (IEnumerable customEditors in customEditorsDictionary.Values)
                    {
                        foreach (var customEditor in customEditors)
                        {
                            if (customEditor == null || (Type)customEditor.GetFieldValue("m_InspectedType") != selectedAssetType)
                            {
                                continue;
                            }

                            var originalInspectorType = (Type)customEditor.GetFieldValue("m_InspectorType");

                            // override inspector
                            customEditor.SetFieldValue("m_InspectorType", typeof(GameDataInspector));

                            // force rebuild editor list
                            activeEditorTracker.Invoke("ForceRebuild");
                            inspectorWindow.Repaint();

                            // restore original inspector
                            customEditor.SetFieldValue("m_InspectorType", originalInspectorType);
                            break;
                        }
                    }

                    var newMonoEditorType = Activator.CreateInstance(monoEditorType);
                    newMonoEditorType.SetFieldValue("m_InspectedType", selectedAssetType);
                    newMonoEditorType.SetFieldValue("m_InspectorType", typeof(GameDataInspector));
                    newMonoEditorType.SetFieldValue("m_EditorForChildClasses", false);
                    if (monoEditorType.HasField("m_IsFallback"))
                    {
                        newMonoEditorType.SetFieldValue("m_IsFallback", false);
                    }
                    var newMonoEditorTypeList = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(monoEditorType));
                    newMonoEditorTypeList.Add(newMonoEditorType);

                    // override inspector
                    customEditorsDictionary[selectedAssetType] = newMonoEditorTypeList;

                    // force rebuild editor list
                    activeEditorTracker.Invoke("ForceRebuild");
                    inspectorWindow.Repaint();

                    // restore original inspector
                    customEditorsDictionary.Remove(selectedAssetType);
                }
                // prior to unity 2018.*
                else if (customEditorsList != null)
                {
                    var cachedCustomEditorsByType = customEditorAttributesType.HasField("kCachedEditorForType") ?
                                                    (IDictionary <Type, Type>)customEditorAttributesType.GetFieldValue("kCachedEditorForType") :
                                                    null;

                    foreach (var customEditor in customEditorsList)
                    {
                        if (customEditor == null || (Type)customEditor.GetFieldValue("m_InspectedType") != selectedAssetType)
                        {
                            continue;
                        }

                        var originalInspectorType = (Type)customEditor.GetFieldValue("m_InspectorType");

                        // override inspector
                        customEditor.SetFieldValue("m_InspectorType", typeof(GameDataInspector));
                        if (cachedCustomEditorsByType != null)
                        {
                            cachedCustomEditorsByType[selectedAssetType] = typeof(GameDataInspector);
                        }

                        // force rebuild editor list
                        activeEditorTracker.Invoke("ForceRebuild");
                        inspectorWindow.Repaint();

                        // restore original inspector
                        customEditor.SetFieldValue("m_InspectorType", originalInspectorType);
                        if (cachedCustomEditorsByType != null)
                        {
                            cachedCustomEditorsByType.Remove(selectedAssetType);
                        }
                        break;
                    }

                    var newMonoEditorType = Activator.CreateInstance(monoEditorType);
                    newMonoEditorType.SetFieldValue("m_InspectedType", selectedAssetType);
                    newMonoEditorType.SetFieldValue("m_InspectorType", typeof(GameDataInspector));
                    newMonoEditorType.SetFieldValue("m_EditorForChildClasses", false);
                    if (monoEditorType.HasField("m_IsFallback"))
                    {
                        newMonoEditorType.SetFieldValue("m_IsFallback", false);
                    }

                    // override inspector
                    customEditorsList.Insert(0, newMonoEditorType);
                    if (cachedCustomEditorsByType != null)
                    {
                        cachedCustomEditorsByType[selectedAssetType] = typeof(GameDataInspector);
                    }
                    // force rebuild editor list
                    activeEditorTracker.Invoke("ForceRebuild");
                    inspectorWindow.Repaint();

                    // restore original inspector
                    customEditorsList.Remove(newMonoEditorType);
                    if (cachedCustomEditorsByType != null)
                    {
                        cachedCustomEditorsByType.Remove(selectedAssetType);
                    }
                }
            }
            catch (Exception updateEditorError)
            {
                if (Settings.Current.Verbose)
                {
                    Debug.LogError(updateEditorError);
                }
            }
        }
Beispiel #20
0
    public turnPhases NextTurn()
    {
        foreach (TurnsPassedTriggerInfo turnsPassedTrigger in CombatExecutor.CutsceneDataManager.TurnsPassedTriggers)
        {
            if (turnsPassedTrigger.Turns == turnCount)
            {
                if (CombatExecutor.CutsceneDataManager.TriggerATrigger(turnsPassedTrigger.Label))
                {
                    GameDataTracker.combatExecutor.AddCutsceneToQueue(Resources.Load <DialogueContainer>(turnsPassedTrigger.CutscenePath), name, null);
                }
            }
        }

        if (GameDataTracker.combatExecutor.DialogueContainerList.Count > 0)
        {
            return(turnPhases.Cutscene);
        }
        if (GameDataTracker.combatExecutor.Clip.GetComponent <FighterClass>().Dead&&
            GameDataTracker.combatExecutor.Partner.GetComponent <FighterClass>().Dead)
        {
            GameDataTracker.GameOver();
            SceneManager.LoadScene("MainMenu", LoadSceneMode.Single);
            return(turnPhases.GameOver);
        }
        if (requiredEnemiesDead() && goalType == 0)
        {
            if (CombatEndDialogue())
            {
                return(turnPhases.Cutscene);
            }
            SceneManager.LoadScene(GameDataTracker.previousArea);
            return(turnPhases.GameOver);
        }
        if (goalType == 1)
        {
            foreach (GoalBlock goalBlock in CombatExecutor.goalBlockList)
            {
                if (goalBlock.active == true)
                {
                    if (CombatEndDialogue())
                    {
                        return(turnPhases.Cutscene);
                    }
                    SceneManager.LoadScene(GameDataTracker.previousArea);
                    return(turnPhases.GameOver);
                }
            }
        }
        if (goalType == 2)
        {
            bool allActive = true;
            if (CombatExecutor.goalBlockList.Count == 0)
            {
                allActive = false;
            }
            foreach (GoalBlock goalBlock in CombatExecutor.goalBlockList)
            {
                if (goalBlock.active == false)
                {
                    allActive = false;
                    break;
                }
            }
            if (allActive)
            {
                if (CombatEndDialogue())
                {
                    return(turnPhases.Cutscene);
                }
                SceneManager.LoadScene(GameDataTracker.previousArea);
                return(turnPhases.GameOver);
            }
        }

        turnQueue.Add(turnQueue[0]);
        turnQueue.RemoveAt(0);
        if (turnQueue[0] == turnPhases.RoundOver)
        {
            turnCount++;
            turnQueue.Add(turnQueue[0]);
            turnQueue.RemoveAt(0);
        }
        Debug.Log(turnQueue[0]);
        return(turnQueue[0]);
    }
Beispiel #21
0
 void UpdateFileName(string fileName, GameObject textUI)
 {
     GameDataTracker.saveFileName = fileName;
     GameDataTracker.Load();
     textUI.GetComponent <Text>().text = GameDataTracker.playerData.fileName;
 }