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); }
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); } }
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); } }
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(); }
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(); }
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; } } } } } } }
public CBrushEditor(string AssetName) { mAssetName = AssetName; _brushAsset = CGame.AssetManager.GetAsset <CBrushAsset>(AssetName); }