示例#1
0
    private void _OnClickAddComponent()
    {
        CModelPlane p = new CModelPlane();

        p.mName                = "New Plane";
        p.mFillBrush           = CGame.AssetManager.GetAsset <CBrushAsset>(CVectorModel.DEFAULT_SURFACE_BRUSH);
        p.mPosition            = new Vector3(0, 0, 0);
        p.mRotation            = new Vector3(0, 0, 0);
        p.mCorner[0].mPosition = new Vector3(-1, 0, 1);
        p.mCorner[1].mPosition = new Vector3(1, 0, 1);
        p.mCorner[2].mPosition = new Vector3(1, 0, -1);
        p.mCorner[3].mPosition = new Vector3(-1, 0, -1);

        CBrushAsset brush = CGame.AssetManager.GetAsset <CBrushAsset>(CVectorModel.DEFAULT_EDGE_BRUSH);

        for (int i = 0; i < 4; ++i)
        {
            for (int j = 0; j < 4; ++j)
            {
                p.mEdge[j].mBrush[i] = brush;
            }
        }

        _vectorModel.mPlanes.Add(p);
        _ModifyAsset();
        _OnClickPrimitive(_vectorModel.mPlanes.Count - 1, true);
    }
示例#2
0
    public void LoadAsset()
    {
        CAsset asset = null;

        if (mType == EAssetType.AT_BRUSH)
        {
            asset = new CBrushAsset();
        }
        else if (mType == EAssetType.AT_MODEL)
        {
            asset = new CModelAsset();
        }
        else if (mType == EAssetType.AT_LEVEL)
        {
            asset = new CLevelAsset();
        }
        else if (mType == EAssetType.AT_ITEM)
        {
            asset = new CItemAsset();
        }

        if (asset != null)
        {
            asset.mName     = mName;
            asset.mFileName = mFileName;
            asset.mType     = mType;
            asset.Load();
            mAsset = asset;
        }
        else
        {
            Debug.LogError("Could not load asset: " + mName);
        }
    }
示例#3
0
    private string GetBrushName(CBrushAsset Brush)
    {
        if (Brush != null)
        {
            return(Brush.mName);
        }

        return("None");
    }
    private void _OnClickCreateNewAssetWindow(GameObject Window, EAssetType Type, string AssetName)
    {
        string errorStr;

        if (CGame.AssetManager.IsAssetNameValid(AssetName, out errorStr))
        {
            GameObject.Destroy(Window);

            CTUITreeViewItem treeItem = null;
            CAsset           asset    = null;

            if (Type == EAssetType.AT_MODEL)
            {
                treeItem = _tviModels;
                asset    = new CModelAsset();
            }
            else if (Type == EAssetType.AT_BRUSH)
            {
                treeItem = _tviBrushes;
                asset    = new CBrushAsset();
            }
            else if (Type == EAssetType.AT_LEVEL)
            {
                treeItem = _tviLevels;
                asset    = new CLevelAsset();
            }
            else if (Type == EAssetType.AT_ITEM)
            {
                treeItem = _tviItems;
                asset    = new CItemAsset();
            }

            asset.mName     = AssetName;
            asset.mFileName = CGame.DataDirectory + asset.mName + "." + CAssetManager.ASSET_FILE_EXTENSION;
            Debug.Log("New Asset Path: " + asset.mFileName);
            asset.Save();

            CAssetDeclaration decl = CGame.AssetManager.CreateAssetDeclaration(asset);
            treeItem.AddItem(decl.mName, () => OnClickAsset(decl.mName), () => mToolkit.EditAsset(decl.mName));

            treeItem.RebuildEntireTree();
            mToolkit.EditAsset(AssetName);
        }
        else
        {
            Debug.Log("Asset creation failed: " + errorStr);
        }
    }
示例#5
0
    private void _SetFillBrush(string BrushName)
    {
        if (_selectedPrimID == -1)
        {
            return;
        }

        CModelPlane p = _vectorModel.mPlanes[_selectedPrimID];
        CBrushAsset b = null;

        if (BrushName != "(None)")
        {
            b = CGame.AssetManager.GetAsset <CBrushAsset>(BrushName);
        }

        p.mFillBrush = b;
        _ModifyAsset();
    }
示例#6
0
    private void _SetEdgeBrush(string BrushName, int EdgeIndex)
    {
        if (_selectedPrimID == -1)
        {
            return;
        }

        CModelPlane p = _vectorModel.mPlanes[_selectedPrimID];
        CBrushAsset b = null;

        if (BrushName != "(None)")
        {
            b = CGame.AssetManager.GetAsset <CBrushAsset>(BrushName);
        }

        p.mEdge[EdgeIndex].mBrush[(int)_viewDirection] = b;

        _ModifyAsset();
    }
示例#7
0
    public void EdgePaintHandleMouseDown(ref SGizmoData Gizmo)
    {
        if (Gizmo.mGizmoHover != EGizmoHandleID.EDGE)
        {
            return;
        }

        if (!Gizmo.mActedOnMouseDown)
        {
            _OnClickPrimitive(-1, true);
            Gizmo.mActedOnMouseDown = true;
            CBrushAsset b = null;

            if (_edgeBrush != "(None)")
            {
                b = CGame.AssetManager.GetAsset <CBrushAsset>(_edgeBrush);
            }

            _vectorModel.mPlanes[Gizmo.mHoverID].mEdge[Gizmo.mCornerID].mBrush[(int)_viewDirection] = b;

            _ModifyAsset();
        }
    }
    public void RebuildEverything()
    {
        for (int v = 0; v < 4; ++v)
        {
            List <CQuad> _quads = new List <CQuad>();

            for (int i = 0; i < mPlanes.Count; ++i)
            {
                CModelPlane p = mPlanes[i];

                Quaternion o = Quaternion.Euler(p.mRotation);
                Matrix4x4  m = Matrix4x4.TRS(p.mPosition, o, Vector3.one);
                p.mAxisX = m.MultiplyVector(Vector3.right);
                p.mAxisY = m.MultiplyVector(Vector3.up);
                p.mAxisZ = m.MultiplyVector(Vector3.forward);

                Vector3 c1 = m.MultiplyPoint(p.mCorner[0].mPosition);
                Vector3 c2 = m.MultiplyPoint(p.mCorner[1].mPosition);
                Vector3 c3 = m.MultiplyPoint(p.mCorner[2].mPosition);
                Vector3 c4 = m.MultiplyPoint(p.mCorner[3].mPosition);
                p.c1 = c1; p.c2 = c2; p.c3 = c3; p.c4 = c4;

                Vector3 normal = p.mAxisY;

                Vector3 c1c2 = (c2 - c1).normalized;
                Vector3 c2c3 = (c3 - c2).normalized;
                Vector3 c3c4 = (c4 - c3).normalized;
                Vector3 c4c1 = (c1 - c4).normalized;

                Vector3 perp1 = Vector3.Cross(normal, c1c2);
                Vector3 perp2 = Vector3.Cross(normal, c2c3);
                Vector3 perp3 = Vector3.Cross(normal, c3c4);
                Vector3 perp4 = Vector3.Cross(normal, c4c1);
                p.perp1 = perp1; p.perp2 = perp2; p.perp3 = perp3; p.perp4 = perp4;

                Vector3 ie1_1 = Vector3.zero;
                Vector3 ie1_2 = Vector3.zero;
                Vector3 ie2_1 = Vector3.zero;
                Vector3 ie2_2 = Vector3.zero;
                Vector3 ie3_1 = Vector3.zero;
                Vector3 ie3_2 = Vector3.zero;
                Vector3 ie4_1 = Vector3.zero;
                Vector3 ie4_2 = Vector3.zero;

                if (p.mEdge[0].mBrush[v] != null)
                {
                    CBrushAsset brush = p.mEdge[0].mBrush[v];
                    ie1_1 = -c2c3 * (brush.mWeight / Vector3.Dot(-c2c3, perp1));
                    ie1_2 = c4c1 * (brush.mWeight / Vector3.Dot(c4c1, perp1));
                    CQuad q = new CQuad();
                    q.c  = brush.mColor;
                    q.v1 = c1;
                    q.v2 = c2;
                    q.v3 = c2 + ie1_1;
                    q.v4 = c1 + ie1_2;
                    q.n  = normal;

                    _quads.Add(q);
                }

                if (p.mEdge[1].mBrush[v] != null)
                {
                    CBrushAsset brush = p.mEdge[1].mBrush[v];
                    ie2_1 = c1c2 * (brush.mWeight / Vector3.Dot(c1c2, perp2));
                    ie2_2 = -c3c4 * (brush.mWeight / Vector3.Dot(-c3c4, perp2));
                    CQuad q = new CQuad();
                    q.c  = brush.mColor;
                    q.v1 = c2 + ie2_1;
                    q.v2 = c2;
                    q.v3 = c3;
                    q.v4 = c3 + ie2_2;
                    q.n  = normal;

                    _quads.Add(q);
                }

                if (p.mEdge[2].mBrush[v] != null)
                {
                    CBrushAsset brush = p.mEdge[2].mBrush[v];
                    ie3_1 = -c4c1 * (brush.mWeight / Vector3.Dot(-c4c1, perp3));
                    ie3_2 = c2c3 * (brush.mWeight / Vector3.Dot(c2c3, perp3));
                    CQuad q = new CQuad();
                    q.c  = brush.mColor;
                    q.v1 = c4 + ie3_1;
                    q.v2 = c3 + ie3_2;
                    q.v3 = c3;
                    q.v4 = c4;
                    q.n  = normal;

                    _quads.Add(q);
                }

                if (p.mEdge[3].mBrush[v] != null)
                {
                    CBrushAsset brush = p.mEdge[3].mBrush[v];
                    ie4_1 = -c1c2 * (brush.mWeight / Vector3.Dot(-c1c2, perp4));
                    ie4_2 = c3c4 * (brush.mWeight / Vector3.Dot(c3c4, perp4));
                    CQuad q = new CQuad();
                    q.c  = brush.mColor;
                    q.v1 = c1;
                    q.v2 = c1 + ie4_1;
                    q.v3 = c4 + ie4_2;
                    q.v4 = c4;
                    q.n  = normal;

                    _quads.Add(q);
                }

                if (p.mFillBrush != null)
                {
                    CQuad q = new CQuad();
                    q.c  = p.mFillBrush.mColor;
                    q.v1 = c1 + ie1_2 + ie4_1;
                    q.v2 = c2 + ie1_1 + ie2_1;
                    q.v3 = c3 + ie2_2 + ie3_2;
                    q.v4 = c4 + ie3_1 + ie4_2;
                    q.n  = normal;

                    _quads.Add(q);
                }
            }

            if (_mesh[v] == null)
            {
                _mesh[v] = new Mesh();
            }
            else
            {
                _mesh[v].Clear(true);
            }

            if (_quads.Count != 0)
            {
                Vector3[] verts = new Vector3[_quads.Count * 4];
                Color32[] cols  = new Color32[_quads.Count * 4];
                int[]     tris  = new int[_quads.Count * 6];

                for (int i = 0; i < _quads.Count; ++i)
                {
                    CQuad q = _quads[i];

                    verts[i * 4 + 0] = q.v1;
                    verts[i * 4 + 1] = q.v2;
                    verts[i * 4 + 2] = q.v3;
                    verts[i * 4 + 3] = q.v4;

                    tris[i * 6 + 0] = i * 4 + 0;
                    tris[i * 6 + 1] = i * 4 + 1;
                    tris[i * 6 + 2] = i * 4 + 2;
                    tris[i * 6 + 3] = i * 4 + 0;
                    tris[i * 6 + 4] = i * 4 + 2;
                    tris[i * 6 + 5] = i * 4 + 3;

                    cols[i * 4 + 0] = q.c;
                    cols[i * 4 + 1] = q.c;
                    cols[i * 4 + 2] = q.c;
                    cols[i * 4 + 3] = q.c;
                }

                _mesh[v].vertices  = verts;
                _mesh[v].colors32  = cols;
                _mesh[v].triangles = tris;
            }
        }
    }
    public void Deserialize(BinaryReader R, int Version)
    {
        mPlanes.Clear();

        if (Version == 2)
        {
            int planeCount = R.ReadInt32();

            for (int i = 0; i < planeCount; ++i)
            {
                CModelPlane p = new CModelPlane();

                p.mName     = R.ReadString();
                p.mPosition = new Vector3(R.ReadSingle(), R.ReadSingle(), R.ReadSingle());
                p.mRotation = new Vector3(R.ReadSingle(), R.ReadSingle(), R.ReadSingle());

                for (int c = 0; c < 4; ++c)
                {
                    p.mCorner[c].mPosition = new Vector3(R.ReadSingle(), R.ReadSingle(), R.ReadSingle());
                }

                for (int e = 0; e < 4; ++e)
                {
                    for (int b = 0; b < 4; ++b)
                    {
                        R.ReadInt32();
                        p.mEdge[e].mBrush[b] = CGame.AssetManager.GetAsset <CBrushAsset>(CVectorModel.DEFAULT_EDGE_BRUSH);
                    }
                }

                R.ReadInt32();
                p.mFillBrush = CGame.AssetManager.GetAsset <CBrushAsset>(CVectorModel.DEFAULT_SURFACE_BRUSH);

                mPlanes.Add(p);
            }
        }
        else if (Version == 3)
        {
            int planeCount      = R.ReadInt32();
            int brushTableCount = R.ReadInt32();

            string[] brushTable = new string[brushTableCount];
            for (int i = 0; i < brushTableCount; ++i)
            {
                brushTable[i] = R.ReadString();
            }

            for (int i = 0; i < planeCount; ++i)
            {
                CModelPlane p = new CModelPlane();

                p.mName     = R.ReadString();
                p.mPosition = new Vector3(R.ReadSingle(), R.ReadSingle(), R.ReadSingle());
                p.mRotation = new Vector3(R.ReadSingle(), R.ReadSingle(), R.ReadSingle());

                p.mFillBrush = null;
                int brushID = R.ReadInt32();

                if (brushID != -1)
                {
                    CBrushAsset tryBrush = CGame.AssetManager.GetAsset <CBrushAsset>(brushTable[brushID]);

                    if (tryBrush == null)
                    {
                        tryBrush = CGame.AssetManager.GetAsset <CBrushAsset>(CVectorModel.DEFAULT_SURFACE_BRUSH);
                    }

                    p.mFillBrush = tryBrush;
                }

                for (int c = 0; c < 4; ++c)
                {
                    p.mCorner[c].mPosition = new Vector3(R.ReadSingle(), R.ReadSingle(), R.ReadSingle());
                }

                for (int e = 0; e < 4; ++e)
                {
                    for (int b = 0; b < 4; ++b)
                    {
                        p.mEdge[e].mBrush[b] = null;

                        brushID = R.ReadInt32();

                        if (brushID != -1)
                        {
                            CBrushAsset tryBrush = CGame.AssetManager.GetAsset <CBrushAsset>(brushTable[brushID]);

                            if (tryBrush == null)
                            {
                                tryBrush = CGame.AssetManager.GetAsset <CBrushAsset>(CVectorModel.DEFAULT_EDGE_BRUSH);
                            }

                            p.mEdge[e].mBrush[b] = tryBrush;
                        }
                    }
                }

                mPlanes.Add(p);
            }
        }
    }
    public void Serialize(BinaryWriter W)
    {
        W.Write(mPlanes.Count);

        // Build brush index table
        List <CBrushAsset> _brushTable = new List <CBrushAsset>();

        for (int i = 0; i < mPlanes.Count; ++i)
        {
            CBrushAsset brush = mPlanes[i].mFillBrush;
            bool        found = false;

            if (brush != null)
            {
                for (int t = 0; t < _brushTable.Count; ++t)
                {
                    if (_brushTable[t] == brush)
                    {
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    _brushTable.Add(brush);
                }
            }

            for (int e = 0; e < 4; ++e)
            {
                for (int b = 0; b < 4; ++b)
                {
                    brush = mPlanes[i].mEdge[e].mBrush[b];
                    found = false;

                    if (brush != null)
                    {
                        for (int t = 0; t < _brushTable.Count; ++t)
                        {
                            if (_brushTable[t] == brush)
                            {
                                found = true;
                                break;
                            }
                        }

                        if (!found)
                        {
                            _brushTable.Add(brush);
                        }
                    }
                }
            }
        }

        W.Write(_brushTable.Count);
        for (int t = 0; t < _brushTable.Count; ++t)
        {
            W.Write(_brushTable[t].mName);
        }

        for (int i = 0; i < mPlanes.Count; ++i)
        {
            CModelPlane p = mPlanes[i];
            W.Write(p.mName);

            W.Write(p.mPosition.x);
            W.Write(p.mPosition.y);
            W.Write(p.mPosition.z);

            W.Write(p.mRotation.x);
            W.Write(p.mRotation.y);
            W.Write(p.mRotation.z);

            CBrushAsset brush = p.mFillBrush;

            if (brush == null)
            {
                W.Write((int)-1);
            }
            else
            {
                for (int t = 0; t < _brushTable.Count; ++t)
                {
                    if (_brushTable[t] == brush)
                    {
                        W.Write(t);
                        break;
                    }
                }
            }

            for (int c = 0; c < 4; ++c)
            {
                W.Write(p.mCorner[c].mPosition.x);
                W.Write(p.mCorner[c].mPosition.y);
                W.Write(p.mCorner[c].mPosition.z);
            }

            for (int e = 0; e < 4; ++e)
            {
                for (int b = 0; b < 4; ++b)
                {
                    brush = p.mEdge[e].mBrush[b];

                    if (brush == null)
                    {
                        W.Write((int)-1);
                    }
                    else
                    {
                        for (int t = 0; t < _brushTable.Count; ++t)
                        {
                            if (_brushTable[t] == brush)
                            {
                                W.Write(t);
                                break;
                            }
                        }
                    }
                }
            }
        }
    }
示例#11
0
 public CBrushEditor(string AssetName)
 {
     mAssetName  = AssetName;
     _brushAsset = CGame.AssetManager.GetAsset <CBrushAsset>(AssetName);
 }