Esempio n. 1
0
        private void UnlinkGroup(MDL0GroupNode group)
        {
            switch (group._type)
            {
            case MDLResourceType.Bones: { _boneGroup = null; _boneList = null; break; }

            case MDLResourceType.Materials: { _matGroup = null; _matList = null; break; }

            case MDLResourceType.Shaders: { _shadGroup = null; _shadList = null; break; }

            case MDLResourceType.Polygons: { _polyGroup = null; _polyList = null; break; }
                //case MDLResourceType.Textures: { _texGroup = null; _texList = null; break; }
            }
        }
 public void LinkGroup(MDL0GroupNode group)
 {
     switch (group._type)
     {
         case MDLResourceType.Definitions: { _defGroup = group; _defList = group._children; break; }
         case MDLResourceType.Bones: { _boneGroup = group; _boneList = group._children; break; }
         case MDLResourceType.Materials: { _matGroup = group; _matList = group._children; break; }
         case MDLResourceType.Shaders: { _shadGroup = group; _shadList = group._children; break; }
         case MDLResourceType.Vertices: { _vertGroup = group; _vertList = group._children; break; }
         case MDLResourceType.Normals: { _normGroup = group; _normList = group._children; break; }
         case MDLResourceType.UVs: { _uvGroup = group; _uvList = group._children; break; }
         case MDLResourceType.Colors: { _colorGroup = group; _colorList = group._children; break; }
         case MDLResourceType.Objects: { _objGroup = group; _objList = group._children; break; }
         case MDLResourceType.Textures: { _texGroup = group; _texList = group._children; break; }
         case MDLResourceType.Palettes: { _pltGroup = group; _pltList = group._children; break; }
         case MDLResourceType.FurLayerCoords: { _furPosGroup = group; _furPosList = group._children; break; }
         case MDLResourceType.FurVectors: { _furVecGroup = group; _furVecList = group._children; break; }
     }
 }
        public MDL0TextureNode FindOrCreateTexture(string name)
        {
            if (_texGroup == null)
                AddChild(_texGroup = new MDL0GroupNode(MDLResourceType.Textures), false);
            else
                foreach (MDL0TextureNode n in _texGroup.Children)
                    if (n._name == name)
                        return n;

            MDL0TextureNode node = new MDL0TextureNode(name);
            _texGroup.AddChild(node, false);

            return node;
        }
        //public void AutoMetal()
        //{
        //    ((MDL0Node)_resource).AutoMetalMaterials = true;
        //}
        public MDL0VertexNode NewVertex()
        {
            if (_modelViewerOpen)
                return null;

            MDL0Node model = ((MDL0Node)_resource);

            MDL0GroupNode g = model._vertGroup;
            if (g == null)
            {
                model.AddChild(g = new MDL0GroupNode(MDLResourceType.Vertices), true);
                model._vertGroup = g; model._vertList = g.Children;
            }

            MDL0VertexNode node = new MDL0VertexNode() { Name = "VertexSet" + ((MDL0Node)_resource)._vertList.Count };
            node.Vertices = new Vector3[] { new Vector3(0) };
            g.AddChild(node, true);
            node._forceRebuild = true;
            node.Rebuild(true);
            node.SignalPropertyChange();

            FindResource(node, true).EnsureVisible();

            return node;
        }
        public MDL0UVNode NewUV()
        {
            if (_modelViewerOpen)
                return null;

            MDL0Node model = ((MDL0Node)_resource);

            MDL0GroupNode g = model._uvGroup;
            if (g == null)
            {
                model.AddChild(g = new MDL0GroupNode(MDLResourceType.UVs), true);
                model._uvGroup = g; model._uvList = g.Children;
            }

            MDL0UVNode node = new MDL0UVNode() { Name = "#" + ((MDL0Node)_resource)._uvList.Count };
            node.Points = new Vector2[] { new Vector2(0) };
            g.AddChild(node, true);
            node._forceRebuild = true;
            node.Rebuild(true);
            node.SignalPropertyChange();

            FindResource(node, true).EnsureVisible();

            return node;
        }
        public void NewShader()
        {
            if (_modelViewerOpen)
                return;

            MDL0Node model = ((MDL0Node)_resource);

            if (model._shadGroup == null)
            {
                MDL0GroupNode g = model._shadGroup;
                if (g == null)
                {
                    model.AddChild(g = new MDL0GroupNode(MDLResourceType.Shaders), true);
                    model._shadGroup = g; model._shadList = g.Children;
                }
            }

            if (model._shadList != null && model._matList != null)
            if (model._shadList.Count < model._matList.Count)
            {
                MDL0ShaderNode shader = new MDL0ShaderNode();
                model._shadGroup.AddChild(shader);
                shader.Default();
                shader.Rebuild(true);

                BaseWrapper b = FindResource(shader, true);
                if (b != null)
                    b.EnsureVisible();
            }
        }
        public void NewMaterial()
        {
            if (_modelViewerOpen)
                return;

            MDL0Node model = ((MDL0Node)_resource);

            if (model._matGroup == null)
            {
                MDL0GroupNode g = model._matGroup;
                if (g == null)
                {
                    model.AddChild(g = new MDL0GroupNode(MDLResourceType.Materials), true);
                    model._matGroup = g; model._matList = g.Children;
                }
            }

            MDL0MaterialNode mat = new MDL0MaterialNode();
            model._matGroup.AddChild(mat);
            mat.Name = "Material" + mat.Index;
            mat.New = true;
            if (model._shadGroup == null)
            {
                MDL0GroupNode g = model._shadGroup;
                if (g == null)
                {
                    model.AddChild(g = new MDL0GroupNode(MDLResourceType.Shaders), true);
                    model._shadGroup = g; model._shadList = g.Children;
                }
            }
            if (model._shadList.Count == 0)
                NewShader();

            mat.ShaderNode = (MDL0ShaderNode)model._shadList[0];
            mat.AddChild(new MDL0MaterialRefNode() { Name = "MatRef0" });
            mat.Rebuild(true);

            BaseWrapper b = FindResource(mat, true);
            if (b != null)
                b.EnsureVisible();
        }
        public MDL0ColorNode NewColor()
        {
            if (_modelViewerOpen)
                return null;

            MDL0Node model = ((MDL0Node)_resource);

            MDL0GroupNode g = model._colorGroup;
            if (g == null)
            {
                model.AddChild(g = new MDL0GroupNode(MDLResourceType.Colors), true);
                model._colorGroup = g; model._colorList = g.Children;
            }

            MDL0ColorNode node = new MDL0ColorNode() { Name = "ColorSet" + ((MDL0Node)_resource)._colorList.Count };
            node.Colors = new RGBAPixel[] { new RGBAPixel() { A = 255, R = 128, G = 128, B = 128 } };
            g.AddChild(node, true);

            node.Rebuild(true);
            node.SignalPropertyChange();

            FindResource(node, true).EnsureVisible();

            return node;
        }