示例#1
0
 /** Convert a sprite into a renderable sprite */
 public nSpriteMesh Convert(nSprite sprite)
 {
     nSpriteMesh rtn = null;
       var exists = _cache.ContainsKey (sprite.Id);
       if (sprite.Invalid || !exists)
     rtn = CreateMesh (sprite, exists);
       else
     rtn = _cache [sprite.Id];
       return rtn;
 }
示例#2
0
        /** Build a new mesh for a sprite */
        public nSpriteMesh CreateMesh(nSprite sprite, bool exists)
        {
            nSpriteMesh rtn = null;
              if (!exists) {
            var shader = Shader.Find("Custom/nPropShader");
            rtn = new nSpriteMesh() {
              Material = new Material(shader),
              Mesh = new Mesh(),
              Position = new Vector3(),
              Scale = new Vector3()
            };

            /* setup default rotation to avoid errors */
            rtn.Rotation = Quaternion.AngleAxis(sprite.Rotation, new Vector3(0, 0, 1f));

            _cache[sprite.Id] = rtn;
              }
              else
            rtn = _cache[sprite.Id];
              UpdateMesh(rtn, sprite);
              return rtn;
        }
示例#3
0
 public nSpriteData(nSprite parent, nSpriteTags flag, int size)
 {
     _data = new float[size];
       _parent = parent;
       _flag = flag;
 }
示例#4
0
        /** Rebuild parts of a mesh without creating a new one */
        public void UpdateMesh(nSpriteMesh sm, nSprite sprite)
        {
            /* mesh, uvs, etc */
              if ((sprite.Flags & nSpriteTags.POINTS) > 0) {
            var verticies = new Vector3[4] {
              new Vector3(sprite.Points [0], sprite.Points [1], sprite.Depth),
              new Vector3(sprite.Points [2], sprite.Points [3], sprite.Depth),
              new Vector3(sprite.Points [4], sprite.Points [5], sprite.Depth),
              new Vector3(sprite.Points [6], sprite.Points [7], sprite.Depth)
            };
            sm.Mesh.vertices = verticies;

            /* Must set triangles after verticies */
            var triangles = new int[6] { 0, 1, 2, 0, 2, 3 };
            sm.Mesh.triangles = triangles;
            sm.Mesh.normals = new Vector3[4] {
              new Vector3(0f, 0f, 1f),
              new Vector3(0f, 0f, 1f),
              new Vector3(0f, 0f, 1f),
              new Vector3(0f, 0f, 1f)
            };
              }
              if ((sprite.Flags & nSpriteTags.UV) > 0) {
            var uvs = new UnityEngine.Vector2[4] {
              new UnityEngine.Vector2(sprite.UV [0], sprite.UV [1]),
              new UnityEngine.Vector2(sprite.UV [2], sprite.UV [3]),
              new UnityEngine.Vector2(sprite.UV [4], sprite.UV [5]),
              new UnityEngine.Vector2(sprite.UV [6], sprite.UV [7])
            };
            sm.Mesh.uv = uvs;
              }

              /* material */
              if ((sprite.Flags & nSpriteTags.COLOR) > 0)
            sm.Material.color = new Color(sprite.Color [0], sprite.Color [1], sprite.Color [2], sprite.Color [3]);
              if ((sprite.Flags & nSpriteTags.TEXTURE) > 0)
            sm.Material.mainTexture = sprite.Texture;

              /* position */
              if ((sprite.Flags & nSpriteTags.POSITION) > 0) {
            sm.Position [0] = sprite.Position [0];
            sm.Position [1] = sprite.Position [1];
              }
              if ((sprite.Flags & nSpriteTags.DEPTH) > 0) {
            //sm.Position [2] = sprite.Depth;
            sm.Mesh.vertices[0][2] = sprite.Depth;
            sm.Mesh.vertices[1][2] = sprite.Depth;
            sm.Mesh.vertices[2][2] = sprite.Depth;
            sm.Mesh.vertices[3][2] = sprite.Depth;
              }

              /* position */
              if ((sprite.Flags & nSpriteTags.SCALE) > 0) {
            sm.Scale [0] = sprite.Scale [0];
            sm.Scale [1] = sprite.Scale [1];
            sm.Scale [2] = 1.0f;
              }

              /* rotation */
              if ((sprite.Flags & nSpriteTags.ROTATION) > 0)
            sm.Rotation = Quaternion.AngleAxis(sprite.Rotation, new Vector3(0, 0, 1f));

              /* cache result */
              sprite.Reset();
        }