Ejemplo n.º 1
0
        public void Replace(PrefabReplacer replacer)
        {
            List <GameObject> allPrefabObjectsInScene = new List <GameObject>();

            foreach (Transform t in GameObject.FindObjectsOfType <Transform>())
            {
                if (PrefabUtility.IsAnyPrefabInstanceRoot(t.gameObject))
                {
                    allPrefabObjectsInScene.Add(t.gameObject);
                }
            }

            foreach (GameObject go in allPrefabObjectsInScene)
            {
                GameObject instanceSource = PrefabUtility.GetCorrespondingObjectFromSource(go);
                foreach (var replacement in replacer.Replacements)
                {
                    GameObject source = replacer.SwitchOrder ? replacement.TargetPrefab : replacement.SourcePrefab;
                    GameObject target = replacer.SwitchOrder ? replacement.SourcePrefab : replacement.TargetPrefab;

                    if (instanceSource == source)
                    {
                        // Create the instance
                        GameObject instance = PrefabUtility.InstantiatePrefab(target) as GameObject;
                        instance.transform.SetParent(go.transform.parent);
                        instance.transform.position   = go.transform.position;
                        instance.transform.rotation   = go.transform.rotation;
                        instance.transform.localScale = go.transform.localScale;

                        Undo.RegisterCreatedObjectUndo(instance, "prefab replace");
                        Undo.DestroyObjectImmediate(go);
                    }
                }
            }
        }
Ejemplo n.º 2
0
    public void StartGame(List <GlobalPlayer> players)
    {
        AirConsoleBridge.Instance.BroadcastLoadingScreen("WATCH THE MAIN SCREEN");
        if (players == null)
        {
            Debug.LogError("NO PLAYERS PROVIDED!");
        }
        if (players.Count <= 0)
        {
            Debug.LogError("NO PLAYERS GIVEN!");
        }
        List <PrefabReplacer> humanSpawns  = new List <PrefabReplacer>();
        List <PrefabReplacer> playerSpawns = new List <PrefabReplacer>();

        foreach (PrefabReplacer replacer in GameObject.FindObjectsOfType <PrefabReplacer>())
        {
            if (replacer.gameObject.name.Contains("Human"))
            {
                humanSpawns.Add(replacer);
            }
            else if (replacer.gameObject.name.Contains("Player"))
            {
                playerSpawns.Add(replacer);
            }
        }

        if (humanSpawns.Count < 0)
        {
            Debug.LogError("NO HUMAN SPAWNS FOUND!");
        }
        if (playerSpawns.Count < 0)
        {
            Debug.LogError("NO PLAYER SPAWNS FOUND!");
        }


        int playersToSpawn = players.Count;

        for (int playerId = 0; playerId < playersToSpawn; playerId++)
        {
            int replacerIndex = Mathf.RoundToInt(Random.value * (playerSpawns.Count - 1));
            while (replacerIndex >= playerSpawns.Count)
            {
                replacerIndex = Mathf.RoundToInt(Random.value * (playerSpawns.Count - 1));
            }
            PrefabReplacer replacer = playerSpawns[replacerIndex];
            playerSpawns.Remove(replacer);
            GameObject   newPlayer  = replacer.SpawnPrefab();
            GlobalPlayer thisPlayer = players[playerId];
            newPlayer.GetComponent <MonsterAnimationController>().SetCharacter(thisPlayer.LobbyPlayerData.Character);
            newPlayer.GetComponent <ScoreTracker>().Character = thisPlayer.LobbyPlayerData.Character;

            SpawnPositionEffect effect = Instantiate(spawnPositionEffect);
            effect.transform.SetParent(effectCanvas.transform);
            effect.transform.localScale = Vector3.one;
            Debug.Log("New Spawn effect! " + thisPlayer.LobbyPlayerData.Character + " " + newPlayer + " " + AirConsole.instance.GetNickname(thisPlayer.LobbyPlayerData.Id));
            effect.SetCharacter(thisPlayer.LobbyPlayerData.Character, newPlayer, AirConsole.instance.GetNickname(thisPlayer.LobbyPlayerData.Id), playerId * effect.displayTime);
        }
        float totalDisplayTime = spawnPositionEffect.displayTime * playersToSpawn;

        foreach (PrefabReplacer replacer in playerSpawns)
        {
            Destroy(replacer.gameObject);
        }
        int humansToSpawn = humansToSpawnPerPlayer[playersToSpawn - 1];

        for (int humanId = 0; humanId < humansToSpawn; humanId++)
        {
            PrefabReplacer replacer = humanSpawns[Mathf.RoundToInt(Random.value * (humanSpawns.Count - 1))];
            humanSpawns.Remove(replacer);
            replacer.SpawnPrefab();
        }
        foreach (PrefabReplacer replacer in humanSpawns)
        {
            Destroy(replacer.gameObject);
        }

        GameObject.FindObjectOfType <LeaderboardTracker>().OnGameStart();

        StartCoroutine(StartInASecond(totalDisplayTime));
    }