Esempio n. 1
0
    public void SelectAndAddToSplitList()
    {
        //Double Tap
        if (Input.touchCount == 1)
        {
            Touch touch = Input.GetTouch(0);

            if (touch.phase == TouchPhase.Ended)
            {
                TapCount += 1;
            }

            if (TapCount == 1)
            {
                NewTime = Time.time + MaxDubbleTapTime;
            }
            else if (TapCount == 2 && Time.time <= NewTime)
            {
                GameObject hitGO = CheckRaycast(touch.position);
                if (hitGO != null)
                {
                    SelectableElementController SEC = hitGO.GetComponentInParent <SelectableElementController>();
                    if (SEC != null && SEC.IsAlterable())
                    {
                        if (SplitSelectionList.ContainsKey(hitGO.name))
                        {
                            hitGO.GetComponent <MeshRenderer>().material.color = SplitSelectionList[hitGO.name];
                            SplitSelectionList.Remove(hitGO.name);
                        }
                        else
                        {
                            SplitSelectionPanelErrorText.SetActive(false);
                            SplitSelectionList.Add(hitGO.name, hitGO.GetComponent <MeshRenderer>().material.color);
                            hitGO.GetComponent <MeshRenderer>().material.color = Color.red;
                        }
                    }
                    else
                    {
                        SplitSelectionPanelErrorText.SetActive(true);
                    }
                }
                TapCount = 0;
            }
        }

        //Reset timer
        if (Time.time > NewTime)
        {
            TapCount = 0;
        }
    }
Esempio n. 2
0
    public static void LoadMap(byte[] datas)
    {
        //Read binary file
        SerializedScene serializedScene;

        using (MemoryStream ms = new MemoryStream(datas))
        {
            BinaryFormatter bf = new BinaryFormatter();
            serializedScene = bf.Deserialize(ms) as SerializedScene;
            ms.Close();
        }

        MapSerializable map = serializedScene.GetMap();

        //Create map
        GameObject mapGo = map.GetGameObject();

        mapGo.AddComponent <MapController>();

        //Create tiles
        foreach (MapTile tile in map.GetTiles())
        {
            GameObject tileGo = tile.GetGameObject();
            tileGo.transform.parent = mapGo.transform;
            //Mesh renderer
            MeshRenderer meshRenderer = tileGo.AddComponent <MeshRenderer>();
            meshRenderer.material = Resources.Load(tile.GetMaterialName(), typeof(Material)) as Material;
            Texture2D texture = new Texture2D(0, 0, TextureFormat.RGB24, true);
            texture.LoadImage(tile.GetTextureData());
            texture.wrapMode = TextureWrapMode.Clamp;
            meshRenderer.material.mainTexture = texture;
            //Mesh filter
            MeshFilter meshFilter = tileGo.AddComponent <MeshFilter>();
            meshFilter.mesh = tile.GetMesh();
            //Mesh collider
            tileGo.AddComponent <BoxCollider>();

            //File.WriteAllBytes("Deserialized/" + tileGo.name, tile.GetTextureData());
            //Create tile elements
            foreach (TileElement tileElement in tile.GetElements())
            {
                GameObject tileElementGo = tileElement.GetGameObject();
                tileElementGo.SetActive(false);
                tileElementGo.transform.parent = tileGo.transform;
                meshRenderer = tileElementGo.AddComponent <MeshRenderer>();
                Material tileElementMaterial = Resources.Load <Material>("Materials/" + tileElement.GetMaterialName());
                meshRenderer.material = tileElementMaterial;

                meshRenderer.material.color = tileElement.GetMaterialColor();
                meshFilter      = tileElementGo.AddComponent <MeshFilter>();
                meshFilter.mesh = tileElement.GetMesh();

                tileElementGo.SetActive(true);
                //Text mesh
                if (tileElement.GetText() != null)
                {
                    CreateTextMesh(tileElementGo, tileElement.GetText());
                }

                //Scale elements
                tileElementGo.transform.localScale = new Vector3(tileElementGo.transform.localScale.x, tileElementGo.transform.localScale.y, tileElementGo.transform.localScale.z);

                SelectableElementController selectableElementController = tileElementGo.AddComponent <SelectableElementController>();
                selectableElementController.SetAlterable(false);
                selectableElementController.SetBuilding(true);
            }
        }

        //Create additional elements
        GameObject additionalElementContainer = GameObject.Find("AdditionalElements");

        foreach (TileElement element in serializedScene.GetAdditionalElements())
        {
            GameObject tileElementGo = element.GetGameObject();
            tileElementGo.transform.SetParent(additionalElementContainer.transform, false);;
            //Mesh renderer
            MeshRenderer meshRenderer = tileElementGo.AddComponent <MeshRenderer>();
            meshRenderer.material       = Resources.Load(element.GetMaterialName(), typeof(Material)) as Material;
            meshRenderer.material.color = element.GetMaterialColor();
            //Mesh filter
            MeshFilter meshFilter = tileElementGo.AddComponent <MeshFilter>();
            meshFilter.mesh = element.GetMesh();
            //Controller
            SelectableElementController selectableElementController = tileElementGo.AddComponent <SelectableElementController>();
            selectableElementController.SetAlterable(element.IsAlterable());
            selectableElementController.SetBuilding(false);
            // Mesh Collider
            tileElementGo.AddComponent <BoxCollider>();
            //Text mesh
            if (element.GetText() != null)
            {
                CreateTextMesh(tileElementGo, element.GetText());
            }
        }
    }
Esempio n. 3
0
    private void ChangedActiveScene(Scene current, Scene next)
    {
        if (current.name == Scenes.Explorer && next.name == Scenes.EditObject)
        {
            foreach (GameObject go in current.GetRootGameObjects())
            {
                if (go.name == "Scene")
                {
                    go.SetActive(false);
                }
            }
        }
        else if (current.name == Scenes.EditObject && next.name == Scenes.Explorer)
        {
            foreach (GameObject go in next.GetRootGameObjects())
            {
                if (go.name == "Scene")
                {
                    //Activate Scene GO
                    go.SetActive(true);
                    //CameraController.instance.initializeCamera();

                    Ray        ray = Camera.main.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
                    RaycastHit hit;
                    Physics.Raycast(ray, out hit);

                    //Load from Splitter scene
                    if (Scenes.GetGOParameters().Count > 0)
                    {
                        foreach (GameObject DictionnaryGO in Scenes.GetGOParameters().Values)
                        {
                            //Set parent
                            DictionnaryGO.transform.SetParent(GameObject.Find("AdditionalElements").transform, false);
                            //Postition
                            DictionnaryGO.transform.position = Scenes.PreviousPos;
                            //Scale
                            DictionnaryGO.transform.localScale = Scenes.PreviousScale;
                            // stick to floor
                            BoxCollider collider     = DictionnaryGO.GetComponentInChildren <BoxCollider>();
                            Bounds      bounds       = collider.bounds;
                            Vector3     position     = DictionnaryGO.transform.position;
                            float       colliderMinY = bounds.min.y;
                            if (colliderMinY < 0)
                            {
                                position += new Vector3(0, -colliderMinY, 0);
                            }
                            else
                            {
                                position -= new Vector3(0, colliderMinY, 0);
                            }
                            DictionnaryGO.transform.position = position;

                            //Add tag to children
                            collider.gameObject.tag = "AdditionalElements";

                            //Add components
                            SelectableElementController selectableElement = DictionnaryGO.AddComponent <SelectableElementController>();
                            selectableElement.SetAlterable(true);
                        }
                        Scenes.GetGOParameters().Clear();
                        HistoryPanelManager.instance.Refresh();
                    }
                    break;
                }
            }
        }
    }
Esempio n. 4
0
    private void InstantiateGo(Vector3 position)
    {
        //Instantiate the a game object from the name of the UI element clicked
        GameObject GO = new GameObject(this.name + "-" + DateTime.Now.ToString("hhmmssffff"));

        //Add material
        MeshRenderer mr = GO.AddComponent <MeshRenderer>();

        mr.material = Resources.Load <Material>("Materials/BenchMat");
        //Load mesh from file
        MeshFilter mf       = GO.AddComponent <MeshFilter>();
        FileStream lStream  = new FileStream(path, FileMode.Open);
        OBJData    lOBJData = OBJLoader.LoadOBJ(lStream);

        lStream.Close();
        mf.mesh.LoadOBJ(lOBJData);
        mf.mesh.RecalculateNormals();

        //Box collider
        BoxCollider collider = GO.AddComponent <BoxCollider>();

        //Create container for rotation
        GameObject container = new GameObject("Container-" + GO.name);

        container.transform.position = collider.bounds.center;
        container.transform.SetParent(GameObject.Find("AdditionalElements").transform, true);
        //Add interactions script
        SelectableElementController selectableElement = container.AddComponent <SelectableElementController>();
        //Check if is alterable
        GameObject alterableElements = GameObject.Find("Alterable");

        if (this.transform.IsChildOf(alterableElements.transform))
        {
            selectableElement.SetAlterable(true);
        }
        else
        {
            selectableElement.SetAlterable(false);
        }

        //Set parent
        GO.transform.SetParent(container.transform, false);
        GO.transform.localPosition = Vector3.zero;
        GO.tag = "AdditionalElements";

        //Normalize scale to MIN_MAX_SIZE Unity units...
        if (collider.bounds.size.x > MIN_MAX_SIZE)
        {
            while (collider.bounds.size.magnitude >= MIN_MAX_SIZE)
            {
                container.transform.localScale -= new Vector3(0.01f, 0.01f, 0.01f);
            }
        }
        else
        {
            while (collider.bounds.size.magnitude <= MIN_MAX_SIZE)
            {
                container.transform.localScale += new Vector3(0.01f, 0.01f, 0.01f);
            }
        }

        container.transform.position = position;

        //Stick to floor
        Bounds  bounds       = collider.bounds;
        float   colliderMinY = bounds.min.y;
        Vector3 newPosition  = container.transform.position;

        if (colliderMinY < 0)
        {
            newPosition += new Vector3(0, -colliderMinY, 0);
        }
        else
        {
            newPosition -= new Vector3(0, colliderMinY, 0);
        }
        container.transform.position = newPosition;

        //Update UI
        HistoryPanelManager.instance.Refresh();
    }