Exemple #1
0
 void OnDestroy()
 {
     if (_inst == this)
     {
         _inst = null;
     }
 }
Exemple #2
0
    void Awake()
    {
        if (_inst != null)
        {
            Debug.LogError("CharacterDictionary: detected singleton instance has existed. Destroy this one " + gameObject.name);
            Destroy(this);
            return;
        }

        _inst = this;

        _activedCharacters = new System.Collections.Generic.Dictionary <string, CharacterInformation>();
    }
Exemple #3
0
        private async void compile_Click(object sender, EventArgs e)
        {
            Stopwatch trackCompileTime = new Stopwatch();

            trackCompileTime.Start();

            output.Text = "";
            outputQueue.Clear();
            compileProgress.Value = 0;

            foreach (Control control in CONTROLS_TO_DISABLE_WHEN_COMPILING)
            {
                control.Enabled = false;
            }

            Compiler.UseWaitCursor = true;
            ModelCompiler.PreScheduleTasks();

            Func <AssemblerData> assemble;

            if (compilerTypeSelect.Text == "Avatar")
            {
                var assembler  = new CharacterAssembler();
                var userAvatar = UserAvatar.FromUsername(currentUser.Username);
                assemble = new Func <AssemblerData>(() => assembler.Assemble(userAvatar));
            }
            else
            {
                var assembler = new CatalogItemAssembler();
                assemble = new Func <AssemblerData>(() => assembler.Assemble(currentAssetId));
            }

            Task <AssemblerData> buildModel = Task.Run(assemble);

            while (!buildModel.IsCompleted)
            {
                await UpdateCompilerState();
            }

            if (buildModel.IsFaulted)
            {
                LogException(buildModel, "assemble");
            }
            else
            {
                AssemblerData data         = buildModel.Result;
                Task <string> compileModel = ModelCompiler.Compile(selectedGame, data);

                while (!compileModel.IsCompleted)
                {
                    await UpdateCompilerState();
                }

                if (compileModel.IsFaulted)
                {
                    LogException(compileModel, "compile");
                }
                else
                {
                    PrintHeader("FINISHED MODEL!");
                    trackCompileTime.Stop();

                    Print("Assembled in {0} seconds.", trackCompileTime.Elapsed.TotalSeconds);

                    await UpdateCompilerState();

                    compileModel.Wait();

                    latestCompiledModel  = compileModel.Result;
                    latestCompiledOnGame = selectedGame;
                }
            }

            foreach (Control control in CONTROLS_TO_DISABLE_WHEN_COMPILING)
            {
                control.Enabled = true;
            }

            if (trackCompileTime.IsRunning)
            {
                trackCompileTime.Stop();
            }

            Compiler.UseWaitCursor = false;
            progressQueue.Clear();
        }
Exemple #4
0
    void Awake()
    {
        if (!Application.isEditor)
        {
            Cursor.visible   = false;
            Cursor.lockState = CursorLockMode.Locked;
        }

        _loadingScreen = GameObject.Instantiate(loadingScreenPrefab, new Vector3(8000, 8000, 8000), Quaternion.identity);
        _loadingScreen.gameObject.SetActive(false);

        _winPopup = GameObject.Instantiate(winPopupPrefab, Vector3.zero, Quaternion.identity);
        _winPopup.gameObject.SetActive(false);

        spawns = StageManager.instance.transform.Find("SpawnPoints").GetComponentsInChildren <Transform>().Where(x => x.name != "SpawnPoints").ToArray();

        playerInfo             = Serializacion.LoadJsonFromDisk <RegisteredPlayers>("Registered Players");
        playerInfo.playerStats = new PlayerStats[playerInfo.playerControllers.Length];
        playerCameras[playerInfo.playerControllers.Length - 2].SetActive(true);
        if (playerInfo.playerControllers.Length == 2)
        {
            for (int i = 0; i < 2; i++)
            {
                Camera c = GameObject.Find("Camera_P" + (i + 1)).GetComponent <Camera>();
                cameraTexturesForTwoPlayers[i].width = 1280;
                c.rect = new Rect(0, 0, 2, 1);
            }
        }
        else
        {
            for (int i = 0; i < 2; i++)
            {
                Camera c = GameObject.Find("Camera_P" + (i + 1)).GetComponent <Camera>();
                cameraTexturesForTwoPlayers[i].width = 640;
                c.rect = new Rect(0, 0, 1, 1);
            }
        }

        //Setting the mode!
        gameRules = Resources.Load("Scriptable Objects/GameMode_" + playerInfo.gameMode) as SO_GameRules;

        //get all the cameras
        var allCams = GameObject.FindObjectsOfType <CamFollow>().ToList();

        Utility.KnuthShuffle(spawns);

        for (int i = 0; i < playerInfo.playerControllers.Length; i++)
        {
            var URLs = Serializacion.LoadJsonFromDisk <CharacterURLs>("Player " + (playerInfo.playerControllers[i] + 1));

            //Dejo los objetos ccomo children del body por cuestiones de carga de los scripts. Assembler no debería generar problemas, ya que su parent objetivo sería el mismo.
            var player = Instantiate(Resources.Load <GameObject>("Prefabs/Bodies/" + URLs.bodyURL), spawns[i].transform.position, Quaternion.identity).GetComponent <Player>();
            var weapon = Instantiate(Resources.Load <GameObject>("Prefabs/Weapons/" + URLs.weaponURL), player.transform.position, Quaternion.identity, player.transform);
            var comp1  = Instantiate(Resources.Load <GameObject>("Prefabs/Skills/Complementary/" + URLs.complementaryURL[0]), player.transform.position, Quaternion.identity, player.transform);
            var comp2  = Instantiate(Resources.Load <GameObject>("Prefabs/Skills/Complementary/" + URLs.complementaryURL[1]), player.transform.position, Quaternion.identity, player.transform);
            var def    = Instantiate(Resources.Load <GameObject>("Prefabs/Skills/Defensive/" + URLs.defensiveURL), player.transform.position, Quaternion.identity, player.transform);

            CharacterAssembler.Assemble(player.gameObject, def, comp1, comp2, weapon);
            player.transform.forward = spawns[i].forward;

            comp1.GetComponent <ComplementarySkillBase>().RegisterInput(0);
            comp2.GetComponent <ComplementarySkillBase>().RegisterInput(1);

            player.gameObject.layer = LayerMask.NameToLayer("Player" + (playerInfo.playerControllers[i] + 1));
            player.gameObject.tag   = "Player " + (playerInfo.playerControllers[i] + 1);
            foreach (Transform t in player.transform)
            {
                t.gameObject.layer = LayerMask.NameToLayer("Player" + (playerInfo.playerControllers[i] + 1));
                t.gameObject.tag   = "Player " + (playerInfo.playerControllers[i] + 1);
            }

            player.Stats.Score  = 0;
            player.lockedByGame = true;

            player.LightsModule.SetPlayerColor(playerColors[playerInfo.playerControllers[i]]);

            CamFollow cam = allCams.Where(x => x.name == "Camera_P" + (i + 1)).First();
            allCams.Remove(cam);

            if (player.ControlModule.playerType == PlayerControlModule.PlayerType.DRONE)
            {
                cam.AssignTarget(player, player.GetCameraOffset());
            }
            else
            {
                var castedControlModule = player.ControlModule as QuadrupedControlModule;
                cam.AssignTarget(player, player.GetCameraOffset(), castedControlModule.HardcodeForCameraForward);
            }
        }

        //disable cams that are not being used
        foreach (var item in allCams)
        {
            item.gameObject.SetActive(false);
        }

        AddEvents();
        UIManager.Instance.Initialize(Players, StartFirstRound, gameRules.pointsToWin[playerInfo.playerControllers.Length - 2]);
    }
    void LoadPlayers()
    {
        var playerInfo = Serializacion.LoadJsonFromDisk <RegisteredPlayers>("Registered Players");
        var playerControllersOrdered = playerInfo.playerControllers.OrderByDescending(x => playerInfo.playerStats[Array.IndexOf(playerInfo.playerControllers, x)].Score).ToArray();
        var playerScoresOrdered      = playerInfo.playerStats.OrderByDescending(y => y.Score).ToArray();

        _players = new GameObject[playerControllersOrdered.Length];

        for (int i = 0; i < playerControllersOrdered.Length; i++)
        {
            var URLs = Serializacion.LoadJsonFromDisk <CharacterURLs>("Player " + (playerControllersOrdered[i] + 1));

            //Dejo los objetos como children del body por cuestiones de carga de los scripts. Assembler no debería generar problemas, ya que su parent objetivo sería el mismo.
            var player = Instantiate(Resources.Load <GameObject>("Prefabs/CharacterSelection/Bodies/" + URLs.bodyURL), spawnPos[i].position, Quaternion.identity);
            var weapon = Instantiate(Resources.Load <GameObject>("Prefabs/CharacterSelection/Weapons/" + URLs.weaponURL), player.transform.position, Quaternion.identity, player.transform);
            var comp1  = Instantiate(Resources.Load <GameObject>("Prefabs/CharacterSelection/Skills/Complementary/" + URLs.complementaryURL[0]), player.transform.position, Quaternion.identity, player.transform);
            var comp2  = Instantiate(Resources.Load <GameObject>("Prefabs/CharacterSelection/Skills/Complementary/" + URLs.complementaryURL[1]), player.transform.position, Quaternion.identity, player.transform);
            var def    = Instantiate(Resources.Load <GameObject>("Prefabs/CharacterSelection/Skills/Defensive/" + URLs.defensiveURL), player.transform.position, Quaternion.identity, player.transform);
            var tx     = Instantiate(playerText, player.transform.position, Quaternion.identity, player.transform);

            tx.transform.Rotate(transform.up, 180);

            CharacterAssembler.Assemble(player.gameObject, def, comp1, comp2, weapon);

            player.gameObject.layer = LayerMask.NameToLayer("Player" + (playerControllersOrdered[i] + 1));
            player.gameObject.tag   = "Player " + (playerControllersOrdered[i] + 1);
            foreach (Transform t in player.transform)
            {
                t.gameObject.layer = LayerMask.NameToLayer("Player" + (playerControllersOrdered[i] + 1));
                t.gameObject.tag   = "Player " + (playerControllersOrdered[i] + 1);
            }

            tx.gameObject.layer      = LayerMask.NameToLayer("P1ONLY");
            player.transform.forward = spawnPos[i].forward;
            _players[i] = player;
        }

        _winner = _players.First();

        var l = _players.Length;

        _resetInputs     = new bool[l];
        playerIndexes    = new PlayerIndex[l];
        previousGamePads = new GamePadState[l];
        currentGamePads  = new GamePadState[l];
        for (int i = 0; i < currentGamePads.Length; i++)
        {
            playerIndexes[i]   = (PlayerIndex)playerControllersOrdered[i];
            currentGamePads[i] = GamePad.GetState(playerIndexes[i]);
        }

        for (int i = 0; i < _players.Length; i++)
        {
            var score = playerScoresOrdered[i].Score;
            EndgamePlayerText(_players[i], _players[i].gameObject.tag, score.ToString(), i);
            _resetInputs[i] = false;
        }

        //award, award amount, player, desc
        var awards = FList.Create(Tuple.Create("", 0f, 0, ""));

        mostKills = playerInfo.playerControllers.OrderByDescending(x => playerInfo.playerStats[Array.IndexOf(playerInfo.playerControllers, x)].Kills).First();
        var killAmount = playerInfo.playerStats.OrderByDescending(y => y.Kills).First().Kills;

        awards += Tuple.Create("Most Kills", (float)killAmount, Array.IndexOf(playerControllersOrdered, mostKills), " kills");

        mostSurvived = playerInfo.playerControllers.OrderByDescending(x => playerInfo.playerStats[Array.IndexOf(playerInfo.playerControllers, x)].Survived).First();
        var survivedAmount = playerInfo.playerStats.OrderByDescending(y => y.Survived).First().Survived;

        awards += Tuple.Create("Most Survived", (float)survivedAmount, Array.IndexOf(playerControllersOrdered, mostSurvived), "survived");

        mostDamageDealt = playerInfo.playerControllers.OrderByDescending(x => playerInfo.playerStats[Array.IndexOf(playerInfo.playerControllers, x)].DamageDealt).First();
        var damageDealtAmount = playerInfo.playerStats.OrderByDescending(y => y.DamageDealt).First().DamageDealt;

        awards += Tuple.Create("Most Damage Dealt", damageDealtAmount, Array.IndexOf(playerControllersOrdered, mostDamageDealt), " dmg dealt");

        leastDamageTaken = playerInfo.playerControllers.OrderBy(x => playerInfo.playerStats[Array.IndexOf(playerInfo.playerControllers, x)].DamageTaken).First();
        var damageTakenAmount = playerInfo.playerStats.OrderBy(y => y.DamageTaken).First().DamageTaken;

        awards += Tuple.Create("Bulletproof", damageTakenAmount, Array.IndexOf(playerControllersOrdered, leastDamageTaken), " dmg taken");

        print("Psycho Killer Award goes to: Player " + (mostKills + 1) + " with " + killAmount + " kills");
        print("Survivor Award goes to: Player " + (mostSurvived + 1) + " with " + survivedAmount + " rounds survived");
        print("Dealer Award goes to: Player " + (mostDamageDealt + 1) + " with " + damageDealtAmount + " damage dealt");
        print("Bulletproof Award goes to: Player " + (leastDamageTaken + 1) + " with " + damageTakenAmount + " damage taken");

        for (int i = 0; i < playerScoresOrdered.Length; i++)
        {
            var playList = awards.Skip(1).Where(x => x.Item3 == i).ToList();
            if (playList.Any())
            {
                foreach (var item in playList)
                {
                    SetAwardsOnPedestal(item);
                }
            }
        }

        HideUnusedPedestals();
    }