Пример #1
0
        void ShowWaitingForNextMatch()
        {
            GameObject loadingIndicator = GameObject.CreatePrimitive(PrimitiveType.Plane);

            loadingIndicator.transform.parent        = world;
            loadingIndicator.transform.localScale    = new Vector3(1, 1, .1f);
            loadingIndicator.transform.eulerAngles   = new Vector3(90, 180, 0);
            loadingIndicator.transform.localPosition = new Vector3(0, 2, 0);
            var      mr = loadingIndicator.GetComponent <MeshRenderer>();
            Material loadingMaterial = Resources.Load("Materials/LoadingMaterial") as Material;

            mr.sharedMaterial = loadingMaterial;
            sceneID++;
            hsdkc         = GetComponent <HyperSDKController>();
            hsdkc.sceneID = sceneID;
        }
Пример #2
0
        public void StartMatch()
        {
            // TextAsset gameJson = Resources.Load(filePath) as TextAsset;
            // Debug.Log(gameJson);
            // game = JsonUtility.FromJson<SlippiGame>(gameJson.text);
            //Debug.Log(game.settings.stageId);
            foreach (Transform child in world.transform)
            {
                GameObject.Destroy(child.gameObject);
            }
            if (game == null)
            {
                Debug.LogWarning("You need to set a game in order to play it back");
            }
            player1Index = game.settings.players[0].playerIndex;
            player2Index = game.settings.players[1].playerIndex;

            string stageName = SlippiLookupTable.GetStageName(game.settings.stageId);
            string p1Name    = SlippiLookupTable.GetCharacterName(game.settings.players[0].characterId);
            string p2Name    = SlippiLookupTable.GetCharacterName(game.settings.players[1].characterId);

            Debug.Log(stageName);
            Debug.Log(p1Name);
            Debug.Log(p2Name);

            // Load Stage
            UnityEngine.Object stagePrefab = Resources.Load("StagePrefabs/" + stageName + "/" + stageName);
            GameObject         stage       = Instantiate(stagePrefab) as GameObject;

            stage.transform.parent        = world;
            world.transform.position      = new Vector3(0, -1, 7);
            stage.transform.localPosition = new Vector3(0, 0, 0);
            stage.transform.eulerAngles   = new Vector3(0, 180, 0);
            // Load Characters

            UnityEngine.Object p1Prefab = Resources.Load("CharacterPrefabs/" + p1Name + "/" + p1Name);
            GameObject         p1;

            if (p1Prefab == null)
            {
                p1 = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            }
            else
            {
                p1 = Instantiate(p1Prefab) as GameObject;
            }
            Animation _1Animation = p1.AddComponent(typeof(Animation)) as Animation;

            p1Animation = _1Animation;
            GameObject p1G = new GameObject();

            player1 = p1G.transform;
            GameObject p2G = new GameObject();

            player2                    = p2G.transform;
            player1.parent             = world;
            player2.parent             = world;
            p1.transform.parent        = player1;
            p1.transform.localPosition = new Vector3(0, 0, 0);
            p1.transform.localScale    = new Vector3(100, 100, 100);

            // Apply Red Material to P1
            Material p1Material = Resources.Load("Materials/Player1Material") as Material;

            foreach (Transform child in p1.transform)
            {
                SkinnedMeshRenderer meshRenderer = child.GetComponent <SkinnedMeshRenderer>();
                if (meshRenderer == null)
                {
                    continue;
                }
                meshRenderer.sharedMaterial = p1Material;
            }


            UnityEngine.Object p2Prefab = Resources.Load("CharacterPrefabs/" + p2Name + "/" + p2Name);

            GameObject p2;

            if (p2Prefab == null)
            {
                p2 = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            }
            else
            {
                p2 = Instantiate(p2Prefab) as GameObject;
            }

            Animation _2Animation = p2.AddComponent(typeof(Animation)) as Animation;

            p2Animation = _2Animation;

            p2.transform.parent        = player2;
            p2.transform.localPosition = new Vector3(0, 0, 0);
            p2.transform.localScale    = new Vector3(100, 100, 100);

            // Apply Blue Material to P2
            Material p2Material = Resources.Load("Materials/Player2Material") as Material;

            foreach (Transform child in p2.transform)
            {
                SkinnedMeshRenderer meshRenderer = child.GetComponent <SkinnedMeshRenderer>();
                if (meshRenderer == null)
                {
                    continue;
                }
                meshRenderer.sharedMaterial = p2Material;
            }

            // ================= Initiate Shield Stuff
            UnityEngine.Object shieldPrefab = Resources.Load("CharacterPrefabs/" + p2Name + "/" + p2Name);

            player1Shield = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            player2Shield = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            Material p1ShieldMaterial = Resources.Load("Materials/Player1ShieldMaterial") as Material;
            Material p2ShieldMaterial = Resources.Load("Materials/Player2ShieldMaterial") as Material;

            player1Shield.GetComponent <MeshRenderer>().material = p1ShieldMaterial;
            player2Shield.GetComponent <MeshRenderer>().material = p2ShieldMaterial;

            player1Shield.transform.parent        = p1.transform;
            player2Shield.transform.parent        = p2.transform;
            player1Shield.name                    = "Shield";
            player2Shield.name                    = "Shield";
            player1Shield.transform.localPosition = new Vector3(0, .07f, 0);
            player2Shield.transform.localPosition = new Vector3(0, .07f, 0);
            player1Shield.transform.localScale    = new Vector3(.12f, .12f, .12f);
            player2Shield.transform.localScale    = new Vector3(.12f, .12f, .12f);
            player1Shield.SetActive(false);
            player2Shield.SetActive(false);

            // ================ End Shield Stuff

            DirectoryInfo p1Dir = new DirectoryInfo("Assets/Resources/CharacterPrefabs/" + p1Name + "/Animation/");

            FileInfo[] p1files = p1Dir.GetFiles("*.fbx");


            foreach (FileInfo f in p1files)
            {
                string        animationName = Path.GetFileNameWithoutExtension(f.ToString());
                AnimationClip clip          = Resources.Load <AnimationClip>("CharacterPrefabs/" + p1Name + "/Animation/" + animationName);
                clip.legacy = true;
                p1Animation.AddClip(clip, animationName);
            }


            // Prepare Animations
            DirectoryInfo p2Dir = new DirectoryInfo("Assets/Resources/CharacterPrefabs/" + p2Name + "/Animation/");

            FileInfo[] p2files = p2Dir.GetFiles("*.fbx");


            foreach (FileInfo f in p2files)
            {
                string        animationName = Path.GetFileNameWithoutExtension(f.ToString());
                AnimationClip clip          = Resources.Load <AnimationClip>("CharacterPrefabs/" + p2Name + "/Animation/" + animationName);
                clip.legacy = true;
                p2Animation.AddClip(clip, animationName);
            }


            // Lock Animations for offending objects that change entire model location
            foreach (Transform child in p1.transform.GetComponentsInChildren <Transform>())
            {
                if (child.name == "JOBJ_1")
                {
                    PositionConstraint pc = child.gameObject.AddComponent(typeof(PositionConstraint)) as PositionConstraint;
                    ConstraintSource   constraintSource = new ConstraintSource();
                    constraintSource.sourceTransform = child.parent;
                    pc.AddSource(constraintSource);
                    pc.constraintActive = true;
                }
                if (child.name == "JOBJ_2")
                {
                    p1RotationToReset = child;
                }
            }
            ;
            foreach (Transform child in p2.transform.GetComponentsInChildren <Transform>())
            {
                if (child.name == "JOBJ_1")
                {
                    PositionConstraint pc = child.gameObject.AddComponent(typeof(PositionConstraint)) as PositionConstraint;
                    ConstraintSource   constraintSource = new ConstraintSource();
                    constraintSource.sourceTransform = child.parent;
                    pc.AddSource(constraintSource);
                    pc.constraintActive = true;
                }
                if (child.name == "JOBJ_2")
                {
                    p2RotationToReset = child;
                }
            }
            ;


            SlippiPost post1 = game.frames[0].players[player1Index].post;

            stockHolder = new GameObject("Stocks");
            stockHolder.transform.parent = world.transform;

            player1Stocks = new List <GameObject>();
            player2Stocks = new List <GameObject>();
            InstantiateStocks(post1.stocksRemaining, 1, p1Material, player1Stocks);
            InstantiateStocks(post1.stocksRemaining, 2, p2Material, player2Stocks);
            stockHolder.transform.localScale    = new Vector3(5, 5, 2);
            stockHolder.transform.localPosition = new Vector3(0, 0, -28);
            player1Stock = post1.stocksRemaining;
            player2Stock = post1.stocksRemaining;


            world.localScale = new Vector3(1 * worldScale, 1 * worldScale, 1 * worldScale);
            matchStarted     = true;

            // Tell Hypersdk players to reload
            hsdkc = GetComponent <HyperSDKController>();
            sceneID++;
            hsdkc.sceneID = sceneID;
        }