aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/Jin.exebin2502656 -> 2267136 bytes
-rw-r--r--bin/anim.pngbin0 -> 44218 bytes
-rw-r--r--bin/game/anim.pngbin0 -> 44218 bytes
-rw-r--r--bin/game/main.lua13
-rw-r--r--bin/splash.pngbin0 -> 392 bytes
-rw-r--r--bin/texture.pngbin0 -> 1050 bytes
-rw-r--r--build/vc++/examples/Animation/Animation.vcxproj137
-rw-r--r--build/vc++/examples/Animation/Animation.vcxproj.filters6
-rw-r--r--build/vc++/examples/Animation/Animation.vcxproj.user8
-rw-r--r--build/vc++/jin.sln13
-rw-r--r--build/vc++/jin.vcxproj2
-rw-r--r--build/vc++/jin.vcxproj.filters6
-rw-r--r--examples/animation/main.cpp102
-rw-r--r--examples/particle_system/main.cpp20
-rw-r--r--src/libjin/graphics/animations/je_animation.cpp95
-rw-r--r--src/libjin/graphics/animations/je_animation.h41
-rw-r--r--src/libjin/graphics/je_graphics.h2
-rw-r--r--src/libjin/graphics/je_sprite.cpp4
-rw-r--r--src/libjin/graphics/je_sprite_sheet.cpp61
-rw-r--r--src/libjin/graphics/je_sprite_sheet.h14
-rw-r--r--src/libjin/math/je_quad.h4
-rw-r--r--src/lua/modules/graphics/je_lua_animation.cpp71
-rw-r--r--src/lua/modules/graphics/je_lua_animation.h20
-rw-r--r--src/lua/modules/graphics/je_lua_graphics.cpp70
-rw-r--r--src/lua/modules/graphics/je_lua_sprite.cpp210
-rw-r--r--src/lua/modules/graphics/je_lua_spritesheet.cpp23
26 files changed, 683 insertions, 239 deletions
diff --git a/bin/Jin.exe b/bin/Jin.exe
index 391db99..31add2d 100644
--- a/bin/Jin.exe
+++ b/bin/Jin.exe
Binary files differ
diff --git a/bin/anim.png b/bin/anim.png
new file mode 100644
index 0000000..ef0bc81
--- /dev/null
+++ b/bin/anim.png
Binary files differ
diff --git a/bin/game/anim.png b/bin/game/anim.png
new file mode 100644
index 0000000..ef0bc81
--- /dev/null
+++ b/bin/game/anim.png
Binary files differ
diff --git a/bin/game/main.lua b/bin/game/main.lua
index a7b9a86..324f9dc 100644
--- a/bin/game/main.lua
+++ b/bin/game/main.lua
@@ -49,12 +49,8 @@ function jin.core.onLoad()
--tex = jin.graphics.newTexture("1.png")
tex = jin.graphics.newTexture(bitmap)
local ssheet = jin.graphics.newSpriteSheet(tex)
- spr = ssheet:newSprite(50, 50, 50, 50)
- spr:setPosition(0, 50)
+ spr = ssheet:newSprite({50, 50, 50, 50}, 20, 20)
tex = nil
- --spr:setScale(1, 1)
- spr:setColor(100, 0, 100, 255)
- spr:setOrigin(jin.graphics.SpriteOrigin.BOTTOMCENTER)
-- music = jin.audio.newSource("forest.ogg")
-- music:setVolume(0.5)
-- music:setLoop(true)
@@ -63,14 +59,13 @@ function jin.core.onLoad()
jin.graphics.showWindow()
timer = jin.time.newTimer()
local h = timer:every(0.5, function(sp)
- local x, y = spr:getPosition()
- spr:move(5, 0)
+
end, spr)
timer:after(3, function(p)
--timer:cancel(h)
end, h)
jin.graphics.pushMatrix()
- jin.graphics.translate(10, 0)
+ jin.graphics.translate(0, 0)
--jin.graphics.rotate(0.2)
end
local stop = false
@@ -93,7 +88,7 @@ function jin.core.onDraw()
jin.graphics.rect(jin.graphics.RenderMode.FILL, 30, 50, 100, 200)
jin.graphics.setColor(255, 255, 255, 255)
jin.graphics.unuseShader()
- spr:render()
+ jin.graphics.draw(spr, 0, 0, 1, 1, 0)
--jin.graphics.draw(spr)
--jin.graphics.useShader(shader_program2)
--jin.graphics.draw(tex, 0, 0,0.2, 0.2)
diff --git a/bin/splash.png b/bin/splash.png
new file mode 100644
index 0000000..b0c4256
--- /dev/null
+++ b/bin/splash.png
Binary files differ
diff --git a/bin/texture.png b/bin/texture.png
new file mode 100644
index 0000000..6b1efee
--- /dev/null
+++ b/bin/texture.png
Binary files differ
diff --git a/build/vc++/examples/Animation/Animation.vcxproj b/build/vc++/examples/Animation/Animation.vcxproj
new file mode 100644
index 0000000..f53dff8
--- /dev/null
+++ b/build/vc++/examples/Animation/Animation.vcxproj
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>15.0</VCProjectVersion>
+ <ProjectGuid>{3191C07B-085A-46BC-9436-469B4E2BF5F0}</ProjectGuid>
+ <RootNamespace>Animation</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>$(SolutionDir)..\..\bin</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>$(SolutionDir)..\..\src\;$(SolutionDir)..\..\src\3rdparty\SDL2\include;$(SolutionDir)..\..\src\3rdparty\LuaJIT-2.0.5\include;$(SolutionDir)..\..\src\3rdparty\</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalLibraryDirectories>$(SolutionDir)libs\SDL2-2.0.5\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SubSystem>Console</SubSystem>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>$(SolutionDir)..\..\src\;$(SolutionDir)..\..\src\3rdparty\SDL2\include;$(SolutionDir)..\..\src\3rdparty\LuaJIT-2.0.5\include;$(SolutionDir)..\..\src\3rdparty\</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <ConformanceMode>true</ConformanceMode>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\examples\animation\main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\libjin\libjin.vcxproj">
+ <Project>{9ee02090-c15e-4520-9c05-c435e45ef2fc}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/build/vc++/examples/Animation/Animation.vcxproj.filters b/build/vc++/examples/Animation/Animation.vcxproj.filters
new file mode 100644
index 0000000..57272c2
--- /dev/null
+++ b/build/vc++/examples/Animation/Animation.vcxproj.filters
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\..\..\..\examples\animation\main.cpp" />
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/build/vc++/examples/Animation/Animation.vcxproj.user b/build/vc++/examples/Animation/Animation.vcxproj.user
new file mode 100644
index 0000000..307fc45
--- /dev/null
+++ b/build/vc++/examples/Animation/Animation.vcxproj.user
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LocalDebuggerWorkingDirectory>$(SolutionDir)..\..\bin</LocalDebuggerWorkingDirectory>
+ <LocalDebuggerAttach>false</LocalDebuggerAttach>
+ <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/build/vc++/jin.sln b/build/vc++/jin.sln
index b15527a..0f33f15 100644
--- a/build/vc++/jin.sln
+++ b/build/vc++/jin.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2047
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jin", "jin.vcxproj", "{A3E35ECA-62EB-45CE-8152-674FBC7F7A3B}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjin-lua", "jin.vcxproj", "{A3E35ECA-62EB-45CE-8152-674FBC7F7A3B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjin", "libjin\libjin.vcxproj", "{9EE02090-C15E-4520-9C05-C435E45EF2FC}"
EndProject
@@ -45,6 +45,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL2main", "3rdparty\SDL2ma
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StateMachine", "examples\StateMachine\StateMachine.vcxproj", "{C70BFD61-6462-49D2-9F54-F16D77FF434A}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Animation", "examples\Animation\Animation.vcxproj", "{3191C07B-085A-46BC-9436-469B4E2BF5F0}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@@ -173,6 +175,14 @@ Global
{C70BFD61-6462-49D2-9F54-F16D77FF434A}.Release|x64.Build.0 = Release|x64
{C70BFD61-6462-49D2-9F54-F16D77FF434A}.Release|x86.ActiveCfg = Release|Win32
{C70BFD61-6462-49D2-9F54-F16D77FF434A}.Release|x86.Build.0 = Release|Win32
+ {3191C07B-085A-46BC-9436-469B4E2BF5F0}.Debug|x64.ActiveCfg = Debug|x64
+ {3191C07B-085A-46BC-9436-469B4E2BF5F0}.Debug|x64.Build.0 = Debug|x64
+ {3191C07B-085A-46BC-9436-469B4E2BF5F0}.Debug|x86.ActiveCfg = Debug|Win32
+ {3191C07B-085A-46BC-9436-469B4E2BF5F0}.Debug|x86.Build.0 = Debug|Win32
+ {3191C07B-085A-46BC-9436-469B4E2BF5F0}.Release|x64.ActiveCfg = Release|x64
+ {3191C07B-085A-46BC-9436-469B4E2BF5F0}.Release|x64.Build.0 = Release|x64
+ {3191C07B-085A-46BC-9436-469B4E2BF5F0}.Release|x86.ActiveCfg = Release|Win32
+ {3191C07B-085A-46BC-9436-469B4E2BF5F0}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -195,6 +205,7 @@ Global
{CD378AC6-A4FE-48F7-984A-EB68C60A211B} = {65DFFFA6-F434-47FB-9DB2-DCF019060B92}
{5522BDBA-3F18-4EDD-B6E4-CE6A70D9D794} = {CD378AC6-A4FE-48F7-984A-EB68C60A211B}
{C70BFD61-6462-49D2-9F54-F16D77FF434A} = {6FC112F9-B317-4444-B4FB-2E0BF70328F1}
+ {3191C07B-085A-46BC-9436-469B4E2BF5F0} = {6FC112F9-B317-4444-B4FB-2E0BF70328F1}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {633D8D43-3349-43F7-8835-7D7F58BAD2A8}
diff --git a/build/vc++/jin.vcxproj b/build/vc++/jin.vcxproj
index 02bf7f0..1b6325d 100644
--- a/build/vc++/jin.vcxproj
+++ b/build/vc++/jin.vcxproj
@@ -157,6 +157,7 @@
<ClCompile Include="..\..\src\lua\modules\core\je_lua_core.cpp" />
<ClCompile Include="..\..\src\lua\modules\event\je_lua_event.cpp" />
<ClCompile Include="..\..\src\lua\modules\filesystem\je_lua_filesystem.cpp" />
+ <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_animation.cpp" />
<ClCompile Include="..\..\src\lua\modules\graphics\je_lua_bitmap.cpp" />
<ClCompile Include="..\..\src\lua\modules\graphics\je_lua_canvas.cpp" />
<ClCompile Include="..\..\src\lua\modules\graphics\je_lua_particle_system.cpp" />
@@ -210,6 +211,7 @@
<ClInclude Include="..\..\src\lua\modules\core\je_lua_core.h" />
<ClInclude Include="..\..\src\lua\modules\event\je_lua_event.h" />
<ClInclude Include="..\..\src\lua\modules\filesystem\je_lua_filesystem.h" />
+ <ClInclude Include="..\..\src\lua\modules\graphics\je_lua_animation.h" />
<ClInclude Include="..\..\src\lua\modules\graphics\je_lua_bitmap.h" />
<ClInclude Include="..\..\src\lua\modules\graphics\je_lua_canvas.h" />
<ClInclude Include="..\..\src\lua\modules\graphics\je_lua_graphics.h" />
diff --git a/build/vc++/jin.vcxproj.filters b/build/vc++/jin.vcxproj.filters
index 1dba6ab..eb8b588 100644
--- a/build/vc++/jin.vcxproj.filters
+++ b/build/vc++/jin.vcxproj.filters
@@ -183,6 +183,9 @@
<ClCompile Include="..\..\src\lua\common\je_lua_function.cpp">
<Filter>source\common</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_animation.cpp">
+ <Filter>source\modules\graphics</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource.h">
@@ -347,6 +350,9 @@
<ClInclude Include="..\..\src\lua\common\je_lua_function.h">
<Filter>source\common</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\lua\modules\graphics\je_lua_animation.h">
+ <Filter>source\modules\graphics</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="jin.rc">
diff --git a/examples/animation/main.cpp b/examples/animation/main.cpp
new file mode 100644
index 0000000..033e499
--- /dev/null
+++ b/examples/animation/main.cpp
@@ -0,0 +1,102 @@
+#include <iostream>
+
+#include "libjin/jin.h"
+
+using namespace std;
+using namespace JinEngine::AI;
+using namespace JinEngine::Game;
+using namespace JinEngine::Math;
+using namespace JinEngine::Input;
+using namespace JinEngine::Graphics;
+using namespace JinEngine::Graphics::Shaders;
+using namespace JinEngine::Graphics::Particles;
+using namespace JinEngine::Graphics::Animations;
+using namespace JinEngine::Filesystem;
+using namespace JinEngine::Time;
+
+Timer timer;
+Timer::Handler* hnd;
+Texture* tex;
+Shader* shader;
+Animation anim;
+const char* shader_code = R"(
+#VERTEX_SHADER
+Vertex vert(Vertex v)
+{
+ return v;
+}
+#END_VERTEX_SHADER
+#FRAGMENT_SHADER
+Color frag(Color col, Texture tex, Vertex v)
+{
+ Color c = texel(tex, v.uv);
+ return c * col;
+}
+#END_FRAGMENT_SHADER
+)";
+const float Pi = 3.14f;
+void onLoad()
+{
+ tex = Texture::createTexture("anim.png");
+ shader = Shader::createShader(shader_code);
+ SpriteSheet ss = SpriteSheet(tex);
+ vector<Sprite*> frames = ss.createSprites(1, 19, 246, 238, Sprite::Origin::BottomCenter);
+ anim.addFrames(frames);
+ anim.setSpeed(0.05);
+}
+
+void onEvent(Event* e)
+{
+ static Application* Application = Application::get();
+ if (e->type == EventType::QUIT)
+ Application->stop();
+}
+
+void onUpdate(int ms)
+{
+ anim.update(ms / 1000.f);
+ timer.update(ms);
+}
+
+void onDraw()
+{
+ shader->use();
+ Mouse* m = Mouse::get();
+ int x, y;
+ m->getState(&x, &y);
+ anim.render(x, y, 1, 1, 0);
+ shader->unuse();
+}
+
+int main(int argc, char* argv[])
+{
+ Application* Application = Application::get();
+ Application::Setting setting;
+ setting.loader = onLoad;
+ setting.eventHandler = onEvent;
+ setting.updater = onUpdate;
+ setting.drawer = onDraw;
+ Application->init(&setting);
+
+ AssetDatabase::get()->mount(".");
+
+ Window* wnd = Window::get();
+ Window::Setting wndSetting;
+ wndSetting.width = 600;
+ wndSetting.height = 512;
+ wndSetting.title = "Jin v0.1.1";
+ wndSetting.fps = 60;
+ wndSetting.vsync = false;
+ wndSetting.fullscreen = false;
+ wndSetting.resizable = false;
+ wndSetting.icon = ".";
+ wnd->init(&wndSetting);
+ wnd->show();
+
+ Application->run();
+
+ Application->quit();
+ wnd->quit();
+
+ return 0;
+} \ No newline at end of file
diff --git a/examples/particle_system/main.cpp b/examples/particle_system/main.cpp
index a838bed..9251cc4 100644
--- a/examples/particle_system/main.cpp
+++ b/examples/particle_system/main.cpp
@@ -38,23 +38,23 @@ const float Pi = 3.14f;
void onLoad()
{
tex = Texture::createTexture("texture.png");
- spr = new Sprite(tex, Sprite::Origin::MiddleCenter);
+ spr = new Sprite(tex, Sprite::Origin::BottomCenter);
shader = Shader::createShader(shader_code);
ParticleSystemDef def;
def.maxParticleCount = 30;
def.emitterDef.emitRateDef.rate.rate = 0.01f;
- def.emitterDef.forceDef.force.force = 10.f;
+ def.emitterDef.forceDef.force.force = 50.f;
def.emitterDef.positionDef.enableRandom = true;
- def.emitterDef.positionDef.position.random.floor = Vector2<float>(0, 0);
- def.emitterDef.positionDef.position.random.ceil = Vector2<float>(0, 10);
+ def.emitterDef.positionDef.position.random.floor = Vector2<float>(-20, 0);
+ def.emitterDef.positionDef.position.random.ceil = Vector2<float>(20, 0);
def.emitterDef.directionDef.enableRandom = true;
- def.emitterDef.directionDef.direction.random.floor = 0;
- def.emitterDef.directionDef.direction.random.ceil = Pi*2;
+ def.emitterDef.directionDef.direction.random.floor = -Pi / 2 ;
+ def.emitterDef.directionDef.direction.random.ceil = -Pi / 2 ;
def.particleDef.colorOverTimeDef.enable = true;
- def.particleDef.colorOverTimeDef.colorStart = Color(255, 255, 0, 255);
+ def.particleDef.colorOverTimeDef.colorStart = Color(255, 100, 0, 255);
def.particleDef.colorOverTimeDef.colorEnd = Color(255, 0, 0, 0);
/*
def.particleDef.angularSpeedDef.enableRandom = true;
@@ -62,13 +62,13 @@ void onLoad()
def.particleDef.angularSpeedDef.angularSpeed.random.ceil = 1;
*/
- //def.particleDef.linearAccelarationDef.linearAccelaration = Vector2<float>(0, 10);
+ def.particleDef.linearAccelarationDef.linearAccelaration = Vector2<float>(0, 10);
def.particleDef.sizeOverTimeDef.enable = true;
def.particleDef.sizeOverTimeDef.start = 1;
- def.particleDef.sizeOverTimeDef.end = 0.5;
+ def.particleDef.sizeOverTimeDef.end = 1;
- def.particleDef.lifeTimeDef.life.life = 0.5;
+ def.particleDef.lifeTimeDef.life.life = 3;
p = new ParticleSystem(def);
p->setSprite(spr);
}
diff --git a/src/libjin/graphics/animations/je_animation.cpp b/src/libjin/graphics/animations/je_animation.cpp
index 4fe673a..028ef56 100644
--- a/src/libjin/graphics/animations/je_animation.cpp
+++ b/src/libjin/graphics/animations/je_animation.cpp
@@ -1,5 +1,8 @@
+#include "../../math/je_vector2.hpp"
#include "je_animation.h"
+using namespace JinEngine::Math;
+
namespace JinEngine
{
namespace Graphics
@@ -7,7 +10,99 @@ namespace JinEngine
namespace Animations
{
+ Animation::Animation()
+ : mIndex(0)
+ , mActive(true)
+ , mLoop(true)
+ , mTick(0)
+ {
+ }
+
+ void Animation::addFrame(const Sprite* frame)
+ {
+ if(frame != nullptr)
+ mFrames.push_back(frame);
+ }
+
+ void Animation::addFrames(const std::vector<Sprite*>& frames)
+ {
+ mFrames.insert(mFrames.end(), frames.begin(), frames.end());
+ }
+
+ void Animation::update(float dt)
+ {
+ if (!mActive)
+ return;
+ mTick += dt;
+ if (mTick >= mSpeed)
+ {
+ mTick -= mSpeed;
+ next();
+ }
+ }
+
+ void Animation::next()
+ {
+ int count = mFrames.size();
+ ++mIndex;
+ if (mLoop)
+ mIndex %= count;
+ mIndex = clamp<uint>(mIndex, 0, count - 1);
+ }
+
+ void Animation::pause()
+ {
+ mActive = false;
+ }
+
+ void Animation::resume()
+ {
+ mActive = true;
+ }
+
+ void Animation::rewind()
+ {
+ mIndex = 0;
+ mTick = 0;
+ }
+
+ void Animation::setSpeed(float speed)
+ {
+ mSpeed = speed;
+ }
+
+ void Animation::setLoop(bool isLoop)
+ {
+ mLoop = isLoop;
+ }
+
+ uint Animation::getCurrentFrameIndex()
+ {
+ return mIndex;
+ }
+
+ const Sprite* Animation::getCurrentFrame()
+ {
+ if (mIndex >= mFrames.size())
+ return nullptr;
+ return mFrames[mIndex];
+ }
+
+ void Animation::setCurrentFrame(uint frame)
+ {
+ mIndex = frame;
+ }
+ void Animation::render(float x, float y, float sx, float sy, float r)
+ {
+ if (mFrames.size() == 0)
+ return;
+ if (without<uint>(mIndex, 0, mFrames.size() - 1))
+ return;
+ const Sprite* spr = getCurrentFrame();
+ if(spr)
+ spr->render(x, y, sx, sy, r);
+ }
}
}
diff --git a/src/libjin/graphics/animations/je_animation.h b/src/libjin/graphics/animations/je_animation.h
index a13a83b..4c2fd64 100644
--- a/src/libjin/graphics/animations/je_animation.h
+++ b/src/libjin/graphics/animations/je_animation.h
@@ -19,15 +19,22 @@ namespace JinEngine
class Animation
{
public:
+ Animation();
+
///
///
///
- void update(float dt);
+ void addFrame(const Sprite* frame);
+
+ ///
+ ///
+ ///
+ void addFrames(const std::vector<Sprite*>& frames);
///
///
///
- void start();
+ void update(float dt);
///
///
@@ -37,7 +44,7 @@ namespace JinEngine
///
///
///
- void stop();
+ void resume();
///
/// Force rewind.
@@ -50,6 +57,11 @@ namespace JinEngine
void setSpeed(float speed);
///
+ ///
+ ///
+ void setLoop(bool isLoop);
+
+ ///
/// Get current frame index.
///
uint getCurrentFrameIndex();
@@ -57,7 +69,7 @@ namespace JinEngine
///
///
///
- Sprite* getCurrentFrame();
+ const Sprite* getCurrentFrame();
///
/// Set current frame index.
@@ -71,17 +83,36 @@ namespace JinEngine
///
void render(float x, float y, float sx, float sy, float r);
+ ///
+ ///
+ ///
+ Animation clone();
+
private:
+
+ void next();
+
///
/// Key frames.
///
- std::vector<Sprite*> mFrames;
+ std::vector<const Sprite*> mFrames;
///
/// Animation playing speed.
///
float mSpeed;
+ ///
+ ///
+ ///
+ float mTick;
+
+ uint mIndex;
+
+ float mLoop;
+
+ bool mActive;
+
};
} // namespace Animations
diff --git a/src/libjin/graphics/je_graphics.h b/src/libjin/graphics/je_graphics.h
index 979d8f4..d7824c5 100644
--- a/src/libjin/graphics/je_graphics.h
+++ b/src/libjin/graphics/je_graphics.h
@@ -21,6 +21,8 @@
#include "particles/je_particle_system.h"
+#include "animations/je_animation.h"
+
//struct Stats
//{
// int drawCalls;
diff --git a/src/libjin/graphics/je_sprite.cpp b/src/libjin/graphics/je_sprite.cpp
index b45fdf3..a82be79 100644
--- a/src/libjin/graphics/je_sprite.cpp
+++ b/src/libjin/graphics/je_sprite.cpp
@@ -62,7 +62,7 @@ namespace JinEngine
switch (origin)
{
case TopLeft:
- org->set(1, t);
+ org->set(l, t);
break;
case TopCenter:
org->set(r / 2.f, t);
@@ -71,7 +71,7 @@ namespace JinEngine
org->set(r, t);
break;
case MiddleLeft:
- org->set(1, b / 2.f);
+ org->set(l, b / 2.f);
break;
case MiddleCenter:
org->set(r / 2.f, b / 2.f);
diff --git a/src/libjin/graphics/je_sprite_sheet.cpp b/src/libjin/graphics/je_sprite_sheet.cpp
index 936eeab..73d3e81 100644
--- a/src/libjin/graphics/je_sprite_sheet.cpp
+++ b/src/libjin/graphics/je_sprite_sheet.cpp
@@ -1,5 +1,13 @@
+#include <vector>
+
+#include "../math/je_quad.h"
+
#include "je_sprite_sheet.h"
+using namespace std;
+
+using namespace JinEngine::Math;
+
namespace JinEngine
{
namespace Graphics
@@ -10,13 +18,54 @@ namespace JinEngine
{
}
- Sprite* SpriteSheet::createSprite(const Math::Quad& quad)
+ Sprite* SpriteSheet::createSprite(const Math::Quad& quad, Sprite::Origin origin)
+ {
+ Sprite* spr = new Sprite(mGraphic, quad, origin);
+ return spr;
+ }
+
+ Sprite* SpriteSheet::createSprite(const Math::Quad& quad, float ox, float oy)
+ {
+ Sprite* spr = new Sprite(mGraphic, quad, ox, oy);
+ return spr;
+ }
+
+ std::vector<Sprite*> SpriteSheet::createSprites(uint row, uint colum, uint w, uint h, Sprite::Origin origin)
+ {
+ vector<Sprite*> sprites;
+ for (int r = 0; r < row; ++r)
+ {
+ for (int c = 0; c < colum; ++c)
+ {
+ Quad quad;
+ quad.x = (r * colum + c) * w;
+ quad.y = r * h;
+ quad.w = w;
+ quad.h = h;
+ Sprite* spr = new Sprite(mGraphic, quad, origin);
+ sprites.push_back(spr);
+ }
+ }
+ return sprites;
+ }
+
+ vector<Sprite*> SpriteSheet::createSprites(uint row, uint colum, uint w, uint h, float ox, float oy)
{
- //Sprite* spr = new Sprite();
- //spr->setGraphic(mGraphic);
- //spr->setQuad(quad.x, quad.y, quad.w, quad.h);
- //return spr;
- return nullptr;
+ vector<Sprite*> sprites;
+ for (int r = 0; r < row; ++r)
+ {
+ for (int c = 0; c < colum; ++c)
+ {
+ Quad quad;
+ quad.x = (r * colum + c) * w;
+ quad.y = r * h;
+ quad.w = w;
+ quad.h = h;
+ Sprite* spr = new Sprite(mGraphic, quad, ox, oy);
+ sprites.push_back(spr);
+ }
+ }
+ return sprites;
}
}
diff --git a/src/libjin/graphics/je_sprite_sheet.h b/src/libjin/graphics/je_sprite_sheet.h
index 8c56c51..a3db946 100644
--- a/src/libjin/graphics/je_sprite_sheet.h
+++ b/src/libjin/graphics/je_sprite_sheet.h
@@ -18,7 +18,19 @@ namespace JinEngine
///
/// Create a new sprite in sheet.
///
- Sprite* createSprite(const Math::Quad& quad);
+ Sprite* createSprite(const Math::Quad& quad, Sprite::Origin origin);
+
+ ///
+ /// Create a new sprite in sheet.
+ ///
+ Sprite* createSprite(const Math::Quad& quad, float ox, float oy);
+
+ ///
+ ///
+ ///
+ std::vector<Sprite*> createSprites(uint row, uint colum, uint w, uint h, Sprite::Origin origin);
+
+ std::vector<Sprite*> createSprites(uint row, uint colum, uint w, uint h, float ox, float oy);
SpriteSheet(const Graphic* graphic);
diff --git a/src/libjin/math/je_quad.h b/src/libjin/math/je_quad.h
index 74cd294..fd5e7a1 100644
--- a/src/libjin/math/je_quad.h
+++ b/src/libjin/math/je_quad.h
@@ -11,6 +11,10 @@ namespace JinEngine
///
struct Quad
{
+ Quad()
+ : x(0), y(0), w(0), h(0)
+ {
+ }
Quad(float _x, float _y, float _w, float _h)
: x(_x), y(_y), w(_w), h(_h)
{
diff --git a/src/lua/modules/graphics/je_lua_animation.cpp b/src/lua/modules/graphics/je_lua_animation.cpp
new file mode 100644
index 0000000..1db66f1
--- /dev/null
+++ b/src/lua/modules/graphics/je_lua_animation.cpp
@@ -0,0 +1,71 @@
+#include "lua/modules/luax.h"
+
+#include "lua/common/je_lua_common.h"
+#include "libjin/jin.h"
+
+#include "je_lua_sprite.h"
+#include "je_lua_canvas.h"
+#include "je_lua_texture.h"
+#include "je_lua_shader.h"
+#include "je_lua_animation.h"
+
+using namespace JinEngine::Math;
+using namespace JinEngine::Graphics;
+using namespace JinEngine::Graphics::Shaders;
+using namespace JinEngine::Graphics::Animations;
+
+namespace JinEngine
+{
+ namespace Lua
+ {
+ const char* Jin_Lua_Animation = "Animation";
+
+ typedef Shared<Animation>& SharedAnimation;
+
+ LUA_IMPLEMENT inline SharedAnimation checkAnimation(lua_State* L)
+ {
+ Proxy* proxy = (Proxy*)luax_checktype(L, 1, Jin_Lua_Animation);
+ return proxy->getShared<Animation>();
+ }
+
+ LUA_IMPLEMENT int l_gc(lua_State* L)
+ {
+ Proxy* p = (Proxy*)luax_checktype(L, 1, Jin_Lua_Animation);
+ p->release();
+ return 0;
+ }
+
+ LUA_IMPLEMENT int l_render(lua_State* L)
+ {
+ SharedAnimation sprite = checkAnimation(L);
+ float x = luax_checknumber(L, 2);
+ float y = luax_checknumber(L, 3);
+ float sx = luax_checknumber(L, 4);
+ float sy = luax_checknumber(L, 5);
+ float r = luax_checknumber(L, 6);
+ sprite->render(x, y, sx, sy, r);
+ return 0;
+ }
+
+ LUA_IMPLEMENT int l_getSize(lua_State* L)
+ {
+ SharedAnimation sprite = checkAnimation(L);
+ //Vector2<int> size = sprite->getSize();
+ //luax_pushinteger(L, size.x);
+ //luax_pushinteger(L, size.y);
+ return 1;
+ }
+
+ LUA_EXPORT void luaopen_Animation(lua_State* L)
+ {
+ luaL_Reg methods[] = {
+ { "__gc", l_gc },
+ { "render", l_render },
+ { "getSize", l_getSize },
+ { 0, 0 }
+ };
+ luax_newtype(L, Jin_Lua_Animation, methods);
+ }
+
+ } // namespace Lua
+} // namespace JinEngine \ No newline at end of file
diff --git a/src/lua/modules/graphics/je_lua_animation.h b/src/lua/modules/graphics/je_lua_animation.h
new file mode 100644
index 0000000..d5e2c6a
--- /dev/null
+++ b/src/lua/modules/graphics/je_lua_animation.h
@@ -0,0 +1,20 @@
+#ifndef __JE_LUA_ANIMATION_H__
+#define __JE_LUA_ANIMATION_H__
+
+namespace JinEngine
+{
+ namespace Lua
+ {
+
+ extern const char* Jin_Lua_Animation;
+
+ enum clsas AnimationDependency
+ {
+ };
+
+ void luaopen_Animation(lua_State* L);
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/src/lua/modules/graphics/je_lua_graphics.cpp b/src/lua/modules/graphics/je_lua_graphics.cpp
index 900b26b..2bc3a78 100644
--- a/src/lua/modules/graphics/je_lua_graphics.cpp
+++ b/src/lua/modules/graphics/je_lua_graphics.cpp
@@ -21,6 +21,7 @@
using namespace std;
using namespace JinEngine;
+using namespace JinEngine::Math;
using namespace JinEngine::Graphics;
using namespace JinEngine::Graphics::Fonts;
using namespace JinEngine::Graphics::Shaders;
@@ -391,8 +392,13 @@ namespace JinEngine
if (!luax_istype(L, 1, Jin_Lua_Sprite))
return;
Proxy* pxySprite = (Proxy*)luax_toudata(L, 1);
- Sprite* spr = pxySprite->getObject<Sprite>();
- spr->render();
+ Sprite* sprite = pxySprite->getObject<Sprite>();
+ float x = luax_checknumber(L, 2);
+ float y = luax_checknumber(L, 3);
+ float sx = luax_checknumber(L, 4);
+ float sy = luax_checknumber(L, 5);
+ float r = luax_checknumber(L, 6);
+ sprite->render(x, y, sx, sy, r);
}
LUA_IMPLEMENT int l_draw(lua_State* L)
@@ -710,10 +716,66 @@ namespace JinEngine
return 1;
}
+ // newSprite(Texture tex, Quad quad, Origin origin)
+ // newSprite(Texture tex, Quad quad, Number ox, Number oy)
+ // newSprite(Texture tex, Origin origin)
+ // newSprite(Texture tex, Number ox, Number oy)
LUA_IMPLEMENT int l_newSprite(lua_State* L)
{
- Proxy* p = luax_newinstance(L, Jin_Lua_Sprite);
- p->bind(new Shared<Sprite>(new Sprite(), Jin_Lua_Sprite));
+ int n = luax_gettop(L);
+ Proxy* pxyGraphic = nullptr;
+ if (luax_istype(L, 1, Jin_Lua_Texture))
+ pxyGraphic = (Proxy*)luax_checktype(L, 1, Jin_Lua_Texture);
+ else if (luax_istype(L, 1, Jin_Lua_Canvas))
+ pxyGraphic = (Proxy*)luax_checktype(L, 1, Jin_Lua_Canvas);
+ Graphic* graphic = pxyGraphic->getObject<Graphic>();
+ if (pxyGraphic != nullptr)
+ {
+ if (n == 3 && luax_istable(L, 2))
+ {
+ Quad quad;
+ quad.x = luax_rawgetnumberthenpop(L, 2, 1);
+ quad.y = luax_rawgetnumberthenpop(L, 2, 2);
+ quad.w = luax_rawgetnumberthenpop(L, 2, 3);
+ quad.h = luax_rawgetnumberthenpop(L, 2, 4);
+ int o = luax_checkinteger(L, 3);
+ Sprite::Origin origin = static_cast<Sprite::Origin>(o);
+ Proxy* p = luax_newinstance(L, Jin_Lua_Sprite);
+ p->bind(new Shared<Sprite>(new Sprite(graphic, quad, origin), Jin_Lua_Sprite));
+ }
+ else if (n == 4)
+ {
+ Quad quad;
+ quad.x = luax_rawgetnumberthenpop(L, 2, 1);
+ quad.y = luax_rawgetnumberthenpop(L, 2, 2);
+ quad.w = luax_rawgetnumberthenpop(L, 2, 3);
+ quad.h = luax_rawgetnumberthenpop(L, 2, 4);
+ int ox = luax_checkinteger(L, 3);
+ int oy = luax_checkinteger(L, 4);
+ Proxy* p = luax_newinstance(L, Jin_Lua_Sprite);
+ p->bind(new Shared<Sprite>(new Sprite(graphic, quad, ox, oy), Jin_Lua_Sprite));
+ }
+ else if (n == 2)
+ {
+ int o = luax_checkinteger(L, 2);
+ Sprite::Origin origin = static_cast<Sprite::Origin>(o);
+ Proxy* p = luax_newinstance(L, Jin_Lua_Sprite);
+ p->bind(new Shared<Sprite>(new Sprite(graphic, origin), Jin_Lua_Sprite));
+ }
+ else if (n == 3)
+ {
+ int ox = luax_checkinteger(L, 2);
+ int oy = luax_checkinteger(L, 3);
+ Proxy* p = luax_newinstance(L, Jin_Lua_Sprite);
+ p->bind(new Shared<Sprite>(new Sprite(graphic, ox, oy), Jin_Lua_Sprite));
+ }
+ else
+ {
+ luax_error(L, "No matched overloaded functions.");
+ return 1;
+ }
+ }
+
return 1;
}
diff --git a/src/lua/modules/graphics/je_lua_sprite.cpp b/src/lua/modules/graphics/je_lua_sprite.cpp
index 76d6c1f..0a56de8 100644
--- a/src/lua/modules/graphics/je_lua_sprite.cpp
+++ b/src/lua/modules/graphics/je_lua_sprite.cpp
@@ -8,6 +8,7 @@
#include "je_lua_texture.h"
#include "je_lua_shader.h"
+using namespace JinEngine::Math;
using namespace JinEngine::Graphics;
using namespace JinEngine::Graphics::Shaders;
@@ -32,217 +33,34 @@ namespace JinEngine
return 0;
}
- LUA_IMPLEMENT int l_setRotation(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- float r = luax_checknumber(L, 2);
- sprite->setRotation(r);
- return 0;
- }
-
- LUA_IMPLEMENT int l_setOrigin(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- switch (luax_gettop(L))
- {
- case 2:
- {
- int origin = luax_checkinteger(L, 2);
- sprite->setOrigin(static_cast<Sprite::Origin>(origin));
- }
- break;
- case 3:
- {
- int x = luax_checkinteger(L, 2);
- int y = luax_checkinteger(L, 3);
- sprite->setOrigin(x, y);
- }
- break;
- }
- return 0;
- }
-
- LUA_IMPLEMENT int l_setPosition(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- float x = luax_checknumber(L, 2);
- float y = luax_checknumber(L, 3);
- sprite->setPosition(x, y);
- return 0;
- }
-
- LUA_IMPLEMENT int l_setScale(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- float sx = luax_checknumber(L, 2);
- float sy = luax_checknumber(L, 3);
- sprite->setScale(sx, sy);
- return 0;
- }
-
- LUA_IMPLEMENT int l_setColor(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- Channel r = luax_checkinteger(L, 2);
- Channel g = luax_checkinteger(L, 3);
- Channel b = luax_checkinteger(L, 4);
- Channel a = luax_checkinteger(L, 5);
- sprite->setColor(Color(r, g, b, a));
- return 0;
- }
-
- LUA_IMPLEMENT int l_setGraphic(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- Graphic* graphic = nullptr;
- Proxy* p = nullptr;
- if (luax_istype(L, 2, Jin_Lua_Texture))
- p = (Proxy*)luax_checktype(L, 2, Jin_Lua_Texture);
- else if (luax_istype(L, 2, Jin_Lua_Canvas))
- p = (Proxy*)luax_checktype(L, 2, Jin_Lua_Canvas);
- if (p != nullptr)
- {
- sprite->setGraphic(p->getObject<Graphic>());
- sprite.setDependency((int)SpriteDependency::DEP_GRAPHIC, &p->getShared<Graphic>());
- }
- return 0;
- }
-
- LUA_IMPLEMENT int l_move(lua_State* L)
+ LUA_IMPLEMENT int l_render(lua_State* L)
{
SharedSprite sprite = checkSprite(L);
float x = luax_checknumber(L, 2);
float y = luax_checknumber(L, 3);
- sprite->move(x, y);
+ float sx = luax_checknumber(L, 4);
+ float sy = luax_checknumber(L, 5);
+ float r = luax_checknumber(L, 6);
+ sprite->render(x, y, sx, sy, r);
return 0;
}
- LUA_IMPLEMENT int l_scale(lua_State* L)
+ LUA_IMPLEMENT int l_getSize(lua_State* L)
{
SharedSprite sprite = checkSprite(L);
- float sx = luax_checknumber(L, 2);
- float sy = luax_checknumber(L, 3);
- sprite->scale(sx, sy);
- return 0;
- }
-
- LUA_IMPLEMENT int l_rotate(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- float r = luax_checknumber(L, 2);
- sprite->rotate(r);
- return 0;
- }
-
- LUA_IMPLEMENT int l_getRotation(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- float r = sprite->getRotation();
- luax_pushnumber(L, r);
+ Vector2<int> size = sprite->getSize();
+ luax_pushinteger(L, size.x);
+ luax_pushinteger(L, size.y);
return 1;
}
- LUA_IMPLEMENT int l_getPosition(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- const Math::Vector2<float>& pos = sprite->getPosition();
- luax_pushnumber(L, pos.x);
- luax_pushnumber(L, pos.y);
- return 2;
- }
-
- LUA_IMPLEMENT int l_getOrigin(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- const Math::Vector2<float>& origin = sprite->getOrigin();
- luax_pushinteger(L, origin.x);
- luax_pushinteger(L, origin.y);
- return 2;
- }
-
- LUA_IMPLEMENT int l_getScale(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- const Math::Vector2<float> scale = sprite->getScale();
- luax_pushnumber(L, scale.x);
- luax_pushnumber(L, scale.y);
- return 2;
- }
-
- LUA_IMPLEMENT int l_getColor(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- const Color& c = sprite->getColor();
- luax_pushinteger(L, c.r);
- luax_pushinteger(L, c.g);
- luax_pushinteger(L, c.b);
- luax_pushinteger(L, c.a);
- return 4;
- }
-
- LUA_IMPLEMENT int l_render(lua_State* L)
- {
- SharedSprite sprite = checkSprite(L);
- sprite->render();
- return 0;
- }
-
- LUA_IMPLEMENT int l_getGraphic(lua_State* L)
- {
- Proxy* pxySprite = (Proxy*)luax_checktype(L, 1, Jin_Lua_Sprite);
- Shared<Sprite>& shrSprite = pxySprite->getShared<Sprite>();
- SharedBase* shrGraphic = shrSprite.getDependency((int)SpriteDependency::DEP_GRAPHIC);
- if (shrGraphic->isType(Jin_Lua_Canvas))
- {
- Proxy* pxyCanvas = luax_newinstance(L, Jin_Lua_Canvas);
- pxyCanvas->bind(shrGraphic);
- return 1;
- }
- else if (shrGraphic->isType(Jin_Lua_Texture))
- {
- Proxy* pxyTexture = luax_newinstance(L, Jin_Lua_Texture);
- pxyTexture->bind(shrGraphic);
- return 1;
- }
- return 0;
- }
-
- LUA_IMPLEMENT int l_getShader(lua_State* L)
- {
- Proxy* pxySprite = (Proxy*)luax_checktype(L, 1, Jin_Lua_Sprite);
- Shared<Sprite>& shrSprite = pxySprite->getShared<Sprite>();
- SharedBase* shrShader = shrSprite.getDependency((int)SpriteDependency::DEP_SHADER);
- if (shrShader != nullptr && shrShader->isType(Jin_Lua_Shader))
- {
- Proxy* pxyShader = luax_newinstance(L, Jin_Lua_Shader);
- pxyShader->bind(shrShader);
- return 1;
- }
- return 0;
- }
-
LUA_EXPORT void luaopen_Sprite(lua_State* L)
{
luaL_Reg methods[] = {
- { "__gc", l_gc },
- { "render", l_render },
- { "setRotation", l_setRotation },
- { "setOrigin", l_setOrigin },
- { "setPosition", l_setPosition },
- { "setScale", l_setScale },
- { "setColor", l_setColor },
- { "setGraphic", l_setGraphic },
- { "move", l_move },
- { "scale", l_scale },
- { "rotate", l_rotate },
- { "getRotation", l_getRotation },
- { "getPosition", l_getPosition },
- { "getOrigin", l_getOrigin },
- { "getScale", l_getScale },
- { "getColor", l_getColor },
- { "getShader", l_getShader },
- { "getGraphic", l_getGraphic },
- { 0, 0 }
+ { "__gc", l_gc },
+ { "render", l_render },
+ { "getSize", l_getSize },
+ { 0, 0 }
};
luax_newtype(L, Jin_Lua_Sprite, methods);
}
diff --git a/src/lua/modules/graphics/je_lua_spritesheet.cpp b/src/lua/modules/graphics/je_lua_spritesheet.cpp
index 15469e9..a1652e0 100644
--- a/src/lua/modules/graphics/je_lua_spritesheet.cpp
+++ b/src/lua/modules/graphics/je_lua_spritesheet.cpp
@@ -28,11 +28,24 @@ namespace JinEngine
Shared<SpriteSheet>& shrSSheet = pxySSheet->getShared<SpriteSheet>();
SpriteSheet* sheet = pxySSheet->getObject<SpriteSheet>();
Quad quad;
- quad.x = luax_checkinteger(L, 2);
- quad.y = luax_checkinteger(L, 3);
- quad.w = luax_checkinteger(L, 4);
- quad.h = luax_checkinteger(L, 5);
- Sprite* spr = sheet->createSprite(quad);
+ quad.x = luax_rawgetnumberthenpop(L, 2, 1);
+ quad.y = luax_rawgetnumberthenpop(L, 2, 2);
+ quad.w = luax_rawgetnumberthenpop(L, 2, 3);
+ quad.h = luax_rawgetnumberthenpop(L, 2, 4);
+ Sprite* spr = nullptr;
+ if (luax_gettop(L) >= 4)
+ {
+ float ox = luax_checknumber(L, 3);
+ float oy = luax_checknumber(L, 4);
+ spr = sheet->createSprite(quad, ox, oy);
+ }
+ else if (luax_gettop(L) == 3)
+ {
+ int o = luax_checkinteger(L, 3);
+ Sprite::Origin origin;
+ origin = static_cast<Sprite::Origin>(o);
+ spr = sheet->createSprite(quad, origin);
+ }
Proxy* pxySprite = luax_newinstance(L, Jin_Lua_Sprite);
Shared<Sprite>* shrSprite = new Shared<Sprite>(spr, Jin_Lua_Sprite);
shrSprite->setDependency((int)SpriteDependency::DEP_SPRITESHEET, &shrSSheet);