Exemplo n.º 1
0
    private void CreateEntity()
    {
        Debug.Log("Creating entity...");

        m_showHolderWarningAlert = false;

        if (!m_errorOnModel)
        {
            //If there is no error with the model. Create the entity prefab and the entity data
            string absoluteAssetPath   = Application.dataPath;
            string relativePath        = "/MobaStorm/Prefabs/Entities/" + m_characterName;
            string characterFolderPath = absoluteAssetPath + relativePath;
            Debug.Log("Creating Entity folder at " + characterFolderPath);
            System.IO.Directory.CreateDirectory(characterFolderPath);
            CreateCharacter(relativePath, CharacterEditorWindow.m_entityHolderPrefab);
        }
        else
        {
            //Generate only the entity data
            var         selectedLogicType = m_entityTypesLogics[m_entityLogicChoice];
            System.Type logicType         = CharacterEditorWindow.GetType(selectedLogicType);
            GameObject  dummyModel        = new GameObject();
            Logic       logic             = dummyModel.AddComponent(logicType) as Logic;
            CreateCharacterData(logic);
            GameObject.DestroyImmediate(dummyModel);
        }
        m_holderCreated = true;
    }
Exemplo n.º 2
0
    private void CreateCharacter(string folderPath, PrefabHolder holder)
    {
        folderPath = "Assets" + folderPath;

        // CLIENT PREFAB

        GameObject clientTemp  = new GameObject();
        GameObject modelClient = CharacterEditorWindow.Instantiate(m_characterModel);

        modelClient.name = m_characterName + " - Idle";
        modelClient.transform.SetParent(clientTemp.transform);
        clientTemp.name  = "Entity_" + m_characterName + "Client";
        clientTemp.layer = LayerMask.NameToLayer("Entity");


        clientTemp.AddComponent <EntityCanvas>();
        clientTemp.AddComponent <EntityBehaviour>();
        NetworkIdentity networkIdentity = clientTemp.GetComponent <NetworkIdentity>();


        BoxCollider boxColliderClient = clientTemp.AddComponent <BoxCollider>();

        boxColliderClient.center    = new Vector3(0, 0.5f, 0);
        boxColliderClient.size      = new Vector3(0.5f, 1, 0.5f);
        boxColliderClient.isTrigger = true;

        var selectedLogicType = m_entityTypesLogics[m_entityLogicChoice];

        System.Type logicType = CharacterEditorWindow.GetType(selectedLogicType);
        Logic       logic     = clientTemp.AddComponent(logicType) as Logic;

        logic.SetMobaEntity(clientTemp);
        networkIdentity.localPlayerAuthority = logic.IsLocalPlayerAuthority();

        EntityTransform modelTransform = modelClient.AddComponent <EntityTransform>();

        modelTransform.EntityTransformType = EEntityTransform.Model;

        GameObject transformLeftHandGOClient = new GameObject();

        transformLeftHandGOClient.name = "Transform_" + EEntityTransform.LeftHand;
        EntityTransform leftHandTransformClient = transformLeftHandGOClient.AddComponent <EntityTransform>();

        leftHandTransformClient.EntityTransformType = EEntityTransform.LeftHand;

        GameObject transformRightHandGOClient = new GameObject();

        transformRightHandGOClient.name = "Transform_" + EEntityTransform.RightHand;
        EntityTransform rightHandTransformClient = transformRightHandGOClient.AddComponent <EntityTransform>();

        rightHandTransformClient.EntityTransformType = EEntityTransform.RightHand;

        GameObject transformCenterGOClient = new GameObject();

        transformCenterGOClient.name = "Transform_" + EEntityTransform.Center;
        EntityTransform centerTransformClient = transformCenterGOClient.AddComponent <EntityTransform>();

        centerTransformClient.EntityTransformType = EEntityTransform.Center;

        GameObject transformCanvasGOClient = new GameObject();

        transformCanvasGOClient.name = "Transform_" + EEntityTransform.Head;
        EntityTransform canvasTransformClient = transformCanvasGOClient.AddComponent <EntityTransform>();

        canvasTransformClient.EntityTransformType = EEntityTransform.Head;

        GameObject transformFloorGOClient = new GameObject();

        transformFloorGOClient.name = "Transform_" + EEntityTransform.Floor;
        EntityTransform floorTransformClient = transformFloorGOClient.AddComponent <EntityTransform>();

        floorTransformClient.EntityTransformType = EEntityTransform.Floor;

        GameObject transformSkyGOClient = new GameObject();

        transformSkyGOClient.name = "Transform_" + EEntityTransform.Sky;
        EntityTransform skyTransformClient = transformSkyGOClient.AddComponent <EntityTransform>();

        skyTransformClient.EntityTransformType = EEntityTransform.Sky;



        transformRightHandGOClient.transform.SetParent(clientTemp.transform);
        transformRightHandGOClient.transform.localPosition = new Vector3(0, 0.5f, 0.25f);
        transformLeftHandGOClient.transform.SetParent(clientTemp.transform);
        transformLeftHandGOClient.transform.localPosition = new Vector3(0, 0.5f, 0.25f);

        transformCenterGOClient.transform.SetParent(clientTemp.transform);
        transformCenterGOClient.transform.localPosition = new Vector3(0, 0.5f, 0);

        transformCanvasGOClient.transform.SetParent(clientTemp.transform);
        transformCanvasGOClient.transform.localPosition = new Vector3(0, 1.3f, 0);

        transformFloorGOClient.transform.SetParent(clientTemp.transform);
        transformSkyGOClient.transform.SetParent(clientTemp.transform);
        transformSkyGOClient.transform.localPosition = new Vector3(0, 5f, 0);


        Debug.Log("Create Client prefab at " + folderPath + "/" + clientTemp.name + ".prefab");
        UnityEngine.Object emptyPrefab  = PrefabUtility.CreateEmptyPrefab(folderPath + "/" + clientTemp.name + ".prefab");
        GameObject         clientPrefab = PrefabUtility.ReplacePrefab(clientTemp, emptyPrefab, ReplacePrefabOptions.ConnectToPrefab);

        CreateCharacterData(clientTemp.GetComponent <Logic>());

        GameObject.DestroyImmediate(GameObject.Find(clientTemp.name));

        // SERVER PREFAB

        GameObject serverTemp  = new GameObject();
        GameObject modelServer = CharacterEditorWindow.Instantiate(m_characterModel);

        modelServer.name = m_characterName + " - Idle";
        modelServer.transform.SetParent(serverTemp.transform);
        serverTemp.name  = "Entity_" + m_characterName;
        serverTemp.layer = LayerMask.NameToLayer("Entity");

        serverTemp.AddComponent <EntityCanvas>();
        serverTemp.AddComponent <EntityBehaviour>();
        NetworkIdentity networkIdentityServer = serverTemp.GetComponent <NetworkIdentity>();

        networkIdentityServer.localPlayerAuthority = true;

        BoxCollider boxColliderServer = serverTemp.AddComponent <BoxCollider>();

        boxColliderServer.center    = new Vector3(0, 0.5f, 0);
        boxColliderServer.size      = new Vector3(0.5f, 1, 0.5f);
        boxColliderServer.isTrigger = true;

        Logic serverLogic = serverTemp.AddComponent(logicType) as Logic;

        serverLogic.SetMobaEntity(serverTemp);
        networkIdentityServer.localPlayerAuthority = serverLogic.IsLocalPlayerAuthority();

        EntityTransform modelServerTransform = modelServer.AddComponent <EntityTransform>();

        modelServerTransform.EntityTransformType = EEntityTransform.Model;

        GameObject transformLeftHandGOServer = new GameObject();

        transformLeftHandGOServer.name = "Transform_" + EEntityTransform.LeftHand;
        EntityTransform leftHandTransformServer = transformLeftHandGOServer.AddComponent <EntityTransform>();

        leftHandTransformServer.EntityTransformType = EEntityTransform.LeftHand;

        GameObject transformRightHandGOServer = new GameObject();

        transformRightHandGOServer.name = "Transform_" + EEntityTransform.RightHand;
        EntityTransform rightHandTransformServer = transformRightHandGOServer.AddComponent <EntityTransform>();

        rightHandTransformServer.EntityTransformType = EEntityTransform.RightHand;

        GameObject transformCenterGOServer = new GameObject();

        transformCenterGOServer.name = "Transform_" + EEntityTransform.Center;
        EntityTransform centerTransformServer = transformCenterGOServer.AddComponent <EntityTransform>();

        centerTransformServer.EntityTransformType = EEntityTransform.Center;

        GameObject transformCanvasGOServer = new GameObject();

        transformCanvasGOServer.name = "Transform_" + EEntityTransform.Head;
        EntityTransform canvasTransformServer = transformCanvasGOServer.AddComponent <EntityTransform>();

        canvasTransformServer.EntityTransformType = EEntityTransform.Head;

        GameObject transformFloorGOServer = new GameObject();

        transformFloorGOServer.name = "Transform_" + EEntityTransform.Floor;
        EntityTransform floorTransformServer = transformFloorGOServer.AddComponent <EntityTransform>();

        floorTransformServer.EntityTransformType = EEntityTransform.Floor;

        GameObject transformSkyGOServer = new GameObject();

        transformSkyGOServer.name = "Transform_" + EEntityTransform.Sky;
        EntityTransform skyTransformServer = transformSkyGOServer.AddComponent <EntityTransform>();

        skyTransformServer.EntityTransformType = EEntityTransform.Sky;

        transformRightHandGOServer.transform.SetParent(serverTemp.transform);
        transformRightHandGOServer.transform.localPosition = new Vector3(0, 0.5f, 0.25f);
        transformLeftHandGOServer.transform.SetParent(serverTemp.transform);
        transformLeftHandGOServer.transform.localPosition = new Vector3(0, 0.5f, 0.25f);

        transformCenterGOServer.transform.SetParent(serverTemp.transform);
        transformCenterGOServer.transform.localPosition = new Vector3(0, 0.5f, 0);

        transformCanvasGOServer.transform.SetParent(serverTemp.transform);
        transformCanvasGOServer.transform.localPosition = new Vector3(0, 1.3f, 0);

        transformFloorGOServer.transform.SetParent(serverTemp.transform);
        transformSkyGOServer.transform.SetParent(serverTemp.transform);
        transformSkyGOServer.transform.localPosition = new Vector3(0, 5f, 0);


        UnityEngine.Object emptyPrefabServer = PrefabUtility.CreateEmptyPrefab(folderPath + "/" + serverTemp.name + ".prefab");
        GameObject         serverPrefab      = PrefabUtility.ReplacePrefab(serverTemp, emptyPrefabServer, ReplacePrefabOptions.ConnectToPrefab);

        GameObject.DestroyImmediate(GameObject.Find(serverTemp.name));

        PoolData clientCharacterPoolData = new PoolData();

        clientCharacterPoolData.m_quantity = 0;
        clientCharacterPoolData.m_register = false;
        clientCharacterPoolData.m_obj      = clientPrefab;

        PoolData serverCharacterPoolData = new PoolData();

        serverCharacterPoolData.m_quantity = 0;
        serverCharacterPoolData.m_register = true;
        serverCharacterPoolData.m_obj      = serverPrefab;

        holder.m_poolDataList.Add(clientCharacterPoolData);
        holder.m_poolDataList.Add(serverCharacterPoolData);

        PrefabUtility.ReplacePrefab(SpawnManager.instance.gameObject, PrefabUtility.GetPrefabParent(SpawnManager.instance), ReplacePrefabOptions.ConnectToPrefab);
    }