public static LValue draw_sprite(Game _assets, Domain _environment, LValue[] _arguments, Int32 _count, Stack <LValue> _stack) { LSprite _sprite = _assets.SpriteMapping[(int)_arguments[0].Number]; int _subimg = (int)_arguments[1].Number; double _x = _arguments[2].Number; double _y = _arguments[3].Number; int _texid = _sprite.TextureEntries[_subimg].GLTexture; GL.Enable(EnableCap.Texture2D); GL.BindTexture(TextureTarget.Texture2D, _texid); GL.Begin(PrimitiveType.TriangleStrip); GL.Color4((OpenTK.Graphics.Color4)_assets.CurrentColor); //the best way to do this right now is to just draw the triangles in a strip GL.TexCoord2(0.0, 0.0); GL.Vertex2(_x - _sprite.XOrigin, _y - _sprite.YOrigin); GL.TexCoord2(1.0, 0.0); GL.Vertex2(_x - _sprite.XOrigin + _sprite.Width, _y - _sprite.YOrigin); GL.TexCoord2(0.0, 1.0); GL.Vertex2(_x - _sprite.XOrigin, _y - _sprite.YOrigin + _sprite.Height); GL.TexCoord2(1.0, 1.0); GL.Vertex2(_x - _sprite.XOrigin + _sprite.Width, _y - _sprite.YOrigin + _sprite.Height); GL.End(); GL.Disable(EnableCap.Texture2D); return(LValue.Real(0)); }
public static void DrawDefaultObject(Game _assets, LInstance _inst) { LValue _index = _inst.Variables["sprite_index"]; LValue _image = _inst.Variables["image_index"]; if (_index.I32 >= 0 && _index < _assets.SpriteMapping.Count) { LSprite _sprite = _assets.SpriteMapping[_index]; double _x = _inst.Variables["x"]; double _y = _inst.Variables["y"]; GL.PushMatrix(); GL.Translate(_x, _y, 0); GL.Rotate(_inst.Variables["image_angle"].Number, 0, 0, 1); GL.Enable(EnableCap.Texture2D); GL.BindTexture(TextureTarget.Texture2D, _assets.TextureEntries[_image].GLTexture); GL.Begin(PrimitiveType.TriangleStrip); byte[] _color = BitConverter.GetBytes((int)_inst.Variables["image_blend"].Number); GL.Color4(_color[2] / 255d, _color[1] / 255d, _color[0] / 255d, _inst.Variables["image_alpha"]); GL.TexCoord2(0.0, 0.0); GL.Vertex2(-_sprite.XOrigin, -_sprite.YOrigin); GL.TexCoord2(1.0, 0.0); GL.Vertex2(-_sprite.XOrigin + _sprite.Width, -_sprite.YOrigin); GL.TexCoord2(0.0, 1.0); GL.Vertex2(-_sprite.XOrigin, -_sprite.YOrigin + _sprite.Height); GL.TexCoord2(1.0, 1.0); GL.Vertex2(-_sprite.XOrigin + _sprite.Width, -_sprite.YOrigin + _sprite.Height); GL.End(); GL.Disable(EnableCap.Texture2D); GL.PopMatrix(); } }
public static void SPRT(Game _assets, BinaryReader _reader, Chunk _chunk) { HandleKVP(_assets, _reader, delegate(Int32 _offset) { LSprite _spriteGet = new LSprite(_assets, _reader); _assets.Sprites.Add(_spriteGet.Name, _spriteGet); _spriteGet.Index = _assets.SpriteMapping.Count; _assets.SpriteMapping.Add(_spriteGet); }); }