Example #1
0
    private void FillWindow()
    {
        //  Hierarchy
        //
        //   -- Window
        //  |  -- container
        //    |  -- prototype
        //

        container     = gameObject.GetElement <Transform>("container");
        itemPrototype = gameObject.GetElement <Button>("prototype");
        itemPrototype.gameObject.SetActive(ResourceUtility.Blocks.blocks.Count != 0);

        for (int i = 0; i < ResourceUtility.Blocks.blocks.Count; i++)
        {
            BlockResourceItem block           = ResourceUtility.Blocks.blocks[i];
            GameObject        blockGameObject = (i == 0) ? itemPrototype.gameObject : Instantiate(itemPrototype.gameObject);

            Button   itemButton = blockGameObject.GetComponent <Button>();
            RawImage iconImage  = blockGameObject.GetElement <RawImage>("icon");
            Text     nameText   = blockGameObject.GetElement <Text>("name");

            if (itemButton != null)
            {
                itemButton.onClick.AddListener(() => { BuildManager.Instance.BeginBuild((int)block.type, currentShip); Hide(); });
            }

            if (iconImage != null)
            {
                if (block.usePreview == true)
                {
                    iconImage.texture = block.preview;
                    iconImage.uvRect  = new Rect(0, 0, 1, 1);
                }
                else if (block.useAtlas == true)
                {
                    iconImage.texture = ResourceUtility.atlas;
                    iconImage.uvRect  = block.uv;
                }
            }

            if (nameText != null)
            {
                nameText.text = (block.type).ToString();
            }

            blockGameObject.transform.SetParent(container, false);
        }
    }
Example #2
0
    private Vector2[] GetUV(BlockResourceItem item)
    {
        if (item.useAtlas == true)
        {
            return(new Vector2[]
            {
                new Vector2(item.uv.xMin, item.uv.yMin),
                new Vector2(item.uv.xMin, item.uv.yMax),
                new Vector2(item.uv.xMax, item.uv.yMax),
                new Vector2(item.uv.xMax, item.uv.yMin)
            });
        }

        return(ServiceData.defaultUV);
    }
    public override void OnInspectorGUI()
    {
        BlockResourceItem item = target as BlockResourceItem;
        Rect       uv          = item.uv;
        Texture    preview     = item.preview;
        GameObject prefab      = item.prefab;

        var type = (Blocks)EditorGUILayout.EnumPopup(item.type);

        EditorGUILayout.Space();

        var width  = EditorGUILayout.IntField("Width", item.Width);
        var height = EditorGUILayout.IntField("Height", item.Height);

        EditorGUILayout.Space();

        var useAtlas   = EditorGUILayout.Toggle("Use atlas", item.useAtlas);
        var usePreview = EditorGUILayout.Toggle("Use custom prewiew", item.usePreview);
        var usePrefab  = EditorGUILayout.Toggle("Use prefab", item.usePrefab);

        EditorGUILayout.Space();

        if (useAtlas == true)
        {
            uv = EditorGUILayout.RectField(item.uv);
        }

        if (usePreview == true)
        {
            preview = (Texture)EditorGUILayout.ObjectField("Preview", item.preview, typeof(Texture), false);
        }

        if (usePrefab == true)
        {
            prefab = (GameObject)EditorGUILayout.ObjectField("Prefab", item.prefab, typeof(GameObject), false);
        }


        if (item.type != type)
        {
            item.type = type;

            EditorUtility.SetDirty(item);
        }

        if (item.Width != width || item.Height != height)
        {
            item.Width  = width;
            item.Height = height;

            EditorUtility.SetDirty(item);
        }

        if (item.useAtlas != useAtlas || item.uv != uv)
        {
            item.useAtlas = useAtlas;
            item.uv       = uv;

            EditorUtility.SetDirty(item);
        }

        if (item.usePrefab != usePrefab || item.prefab != prefab)
        {
            item.usePrefab = usePrefab;
            item.prefab    = prefab;

            EditorUtility.SetDirty(item);
        }

        if (item.usePreview != usePreview || item.preview != preview)
        {
            item.usePreview = usePreview;
            item.preview    = preview;

            EditorUtility.SetDirty(item);
        }
    }
Example #4
0
    public static GameObject Build(IShipDataContainer data, IEnumerable <ShipBlock> shipBlocks)
    {
        List <int>     triangles = new List <int>();
        List <Vector2> uvs       = new List <Vector2>();
        List <Vector2> uvs2      = new List <Vector2>();
        List <Vector3> vertices  = new List <Vector3>();

        var ship = new GameObject("Ship mesh");

        var meshFilter   = ship.AddComponent <MeshFilter>();
        var meshRenderer = ship.AddComponent <MeshRenderer>();

        float delta     = 0.5F;
        float uv2Width  = 1F / data.Bounds.width;
        float uv2Height = 1F / data.Bounds.height;

        foreach (ShipBlock block in shipBlocks)
        {
            BlockResourceItem blockResource = ResourceUtility.Blocks.GetBlock(block.ID);

            if (blockResource == null)
            {
                continue;
            }

            Vector3    localPosition = new Vector3(block.X, block.Y);
            Quaternion localRotation = Quaternion.Euler(0, 0, block.Rotation);

            if (blockResource.usePrefab == true && blockResource.prefab != null)
            {
                GameObject prefab = Object.Instantiate(blockResource.prefab);

                prefab.transform.parent        = ship.transform;
                prefab.transform.localPosition = localPosition;
                prefab.transform.localRotation = localRotation;
            }

            int       verticesIndex = vertices.Count;
            Matrix4x4 rotateMatrix  = Matrix4x4.Rotate(localRotation);

            Rect uv  = Rect.zero;
            Rect uv2 = new Rect((block.X - data.Bounds.x) / (float)data.Bounds.width, (block.Y - data.Bounds.y) / (float)data.Bounds.height, uv2Width, uv2Height);

            if (blockResource.useAtlas == true)
            {
                uv = blockResource.uv;
            }

            Vector2 uv_center = new Vector2(uv.x + uv.width * 0.5F, uv.y + uv.height * 0.5F);
            Vector2 uv_up     = rotateMatrix.MultiplyPoint(new Vector2(0, uv.height * 0.5F));
            Vector2 uv_right  = rotateMatrix.MultiplyPoint(new Vector2(uv.width * 0.5F, 0));


            vertices.Add(localPosition + new Vector3(-delta, -delta));
            vertices.Add(localPosition + new Vector3(-delta, delta));
            vertices.Add(localPosition + new Vector3(delta, delta));
            vertices.Add(localPosition + new Vector3(delta, -delta));


            triangles.Add(verticesIndex);
            triangles.Add(verticesIndex + 1);
            triangles.Add(verticesIndex + 2);
            triangles.Add(verticesIndex);
            triangles.Add(verticesIndex + 2);
            triangles.Add(verticesIndex + 3);


            uvs.Add(uv_center - uv_up - uv_right);
            uvs.Add(uv_center + uv_up - uv_right);
            uvs.Add(uv_center + uv_up + uv_right);
            uvs.Add(uv_center - uv_up + uv_right);

            uvs2.Add(new Vector2(uv2.xMin, uv2.yMin));
            uvs2.Add(new Vector2(uv2.xMin, uv2.yMax));
            uvs2.Add(new Vector2(uv2.xMax, uv2.yMax));
            uvs2.Add(new Vector2(uv2.xMax, uv2.yMin));
        }

        Mesh mesh = new Mesh();

        mesh.vertices  = vertices.ToArray();
        mesh.triangles = triangles.ToArray();
        mesh.uv        = uvs.ToArray();
        mesh.uv2       = uvs2.ToArray();

        mesh.RecalculateNormals();
        mesh.RecalculateBounds();

        meshFilter.sharedMesh = mesh;
        meshRenderer.material = ResourceUtility.shipMaterial;

        return(ship);
    }