From daba4f2b2f2e7d1410b5b6368e12184e98ea3839 Mon Sep 17 00:00:00 2001 From: Turanszki Janos Date: Tue, 30 Apr 2019 00:50:01 +0100 Subject: [PATCH] image-script updates part 1 --- Documentation/ScriptingAPI-Documentation.md | 11 +++ Editor/Editor.cpp | 2 +- README.md | 2 +- Tests/Tests.cpp | 10 +- WickedEngine/imageVS.hlsl | 2 + WickedEngine/wiImageParams_BindLua.cpp | 104 ++++++++++++++++++++ WickedEngine/wiImageParams_BindLua.h | 11 +++ WickedEngine/wiVersion.cpp | 2 +- images/hp_bar.png | Bin 0 -> 24414 bytes {logo => images}/logo_small.png | Bin scripts/fighting_game.lua | 25 +++++ 11 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 images/hp_bar.png rename {logo => images}/logo_small.png (100%) diff --git a/Documentation/ScriptingAPI-Documentation.md b/Documentation/ScriptingAPI-Documentation.md index 03add4caf..c9bbab759 100644 --- a/Documentation/ScriptingAPI-Documentation.md +++ b/Documentation/ScriptingAPI-Documentation.md @@ -167,16 +167,27 @@ Specify Sprite properties, like position, size, etc. - [constructor]ImageParams(float posX, float posY, float width, opt float height) - GetPos() : Vector result - GetSize() : Vector result +- GetPivot() : Vector result +- GetColor() : Vector result - GetOpacity() : float result - GetFade() : float result - GetRotation() : float result - GetMipLevel() : float result +- GetDrawRect() : Vector result +- IsDrawRectEnabled() : bool result +- IsMirrorEnabled() : bool result - SetPos(Vector pos) - SetSize(Vector size) +- SetPivot(Vector value) +- SetColor(Vector size) - SetOpacity(float opacity) - SetFade(float fade) - SetRotation(float rotation) - SetMipLevel(float mipLevel) +- EnableDrawRect(Vector value) +- DisableDrawRect() +- EnableMirror() +- DisableMirror() #### SpriteAnim Animate Sprites easily with this helper. diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index ab6ad7b37..eff75c5fd 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -71,7 +71,7 @@ void EditorLoadingScreen::Load() WIFALIGN_CENTER, WIFALIGN_CENTER)); addFont(&font); - sprite = wiSprite("../logo/logo_small.png"); + sprite = wiSprite("../images/logo_small.png"); sprite.anim.opa = 1; sprite.anim.repeatable = true; sprite.params.pos = XMFLOAT3(wiRenderer::GetDevice()->GetScreenWidth()*0.5f, wiRenderer::GetDevice()->GetScreenHeight()*0.5f - font.textHeight(), 0); diff --git a/README.md b/README.md index 5a90dbb68..5c0c3e465 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ - + # Wicked Engine diff --git a/Tests/Tests.cpp b/Tests/Tests.cpp index 27e253efc..abbad6007 100644 --- a/Tests/Tests.cpp +++ b/Tests/Tests.cpp @@ -360,7 +360,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, no animation: { - static wiSprite sprite("../logo/logo_small.png"); + static wiSprite sprite("../images/logo_small.png"); sprite.params = params; addSprite(&sprite); @@ -376,7 +376,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, fade animation: { - static wiSprite sprite("../logo/logo_small.png"); + static wiSprite sprite("../images/logo_small.png"); sprite.params = params; sprite.anim = wiSprite::Anim(); sprite.anim.fad = 1.2f; // (you can also do opacity animation with sprite.anim.opa) @@ -395,7 +395,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, wobble animation: { - static wiSprite sprite("../logo/logo_small.png"); + static wiSprite sprite("../images/logo_small.png"); sprite.params = params; sprite.anim = wiSprite::Anim(); sprite.anim.wobbleAnim.amount = XMFLOAT2(1.2f, 0.8f); @@ -413,7 +413,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, rotate animation: { - static wiSprite sprite("../logo/logo_small.png"); + static wiSprite sprite("../images/logo_small.png"); sprite.params = params; sprite.anim = wiSprite::Anim(); sprite.anim.rot = 2.8f; @@ -432,7 +432,7 @@ void TestsRenderer::RunSpriteTest() // Simple sprite, movingtex: { - static wiSprite sprite("images/movingtex.png", "../logo/logo_small.png"); // first param is the texture we will display (and also scroll here). Second param is a mask texture + static wiSprite sprite("images/movingtex.png", "../images/logo_small.png"); // first param is the texture we will display (and also scroll here). Second param is a mask texture // Don't overwrite all params for this, because we want to keep the mask... sprite.params.pos = params.pos; sprite.params.siz = params.siz; diff --git a/WickedEngine/imageVS.hlsl b/WickedEngine/imageVS.hlsl index 0162d2ae1..31a622d1d 100644 --- a/WickedEngine/imageVS.hlsl +++ b/WickedEngine/imageVS.hlsl @@ -18,6 +18,8 @@ VertextoPixel main(uint vI : SV_VERTEXID) Out.tex = inTex * xTexMulAdd.xy + xTexMulAdd.zw; + Out.tex.x = xMirror == 1 ? (1 - Out.tex.x) : Out.tex.x; + Out.pos2D = Out.pos; return Out; diff --git a/WickedEngine/wiImageParams_BindLua.cpp b/WickedEngine/wiImageParams_BindLua.cpp index 27c3d704c..493f934de 100644 --- a/WickedEngine/wiImageParams_BindLua.cpp +++ b/WickedEngine/wiImageParams_BindLua.cpp @@ -6,17 +6,28 @@ const char wiImageParams_BindLua::className[] = "ImageParams"; Luna::FunctionType wiImageParams_BindLua::methods[] = { lunamethod(wiImageParams_BindLua, GetPos), lunamethod(wiImageParams_BindLua, GetSize), + lunamethod(wiImageParams_BindLua, GetPivot), + lunamethod(wiImageParams_BindLua, GetColor), lunamethod(wiImageParams_BindLua, GetOpacity), lunamethod(wiImageParams_BindLua, GetFade), lunamethod(wiImageParams_BindLua, GetRotation), lunamethod(wiImageParams_BindLua, GetMipLevel), + lunamethod(wiImageParams_BindLua, GetDrawRect), + lunamethod(wiImageParams_BindLua, IsDrawRectEnabled), + lunamethod(wiImageParams_BindLua, IsMirrorEnabled), lunamethod(wiImageParams_BindLua, SetPos), lunamethod(wiImageParams_BindLua, SetSize), + lunamethod(wiImageParams_BindLua, SetPivot), + lunamethod(wiImageParams_BindLua, SetColor), lunamethod(wiImageParams_BindLua, SetOpacity), lunamethod(wiImageParams_BindLua, SetFade), lunamethod(wiImageParams_BindLua, SetRotation), lunamethod(wiImageParams_BindLua, SetMipLevel), + lunamethod(wiImageParams_BindLua, EnableDrawRect), + lunamethod(wiImageParams_BindLua, DisableDrawRect), + lunamethod(wiImageParams_BindLua, EnableMirror), + lunamethod(wiImageParams_BindLua, DisableMirror), { NULL, NULL } }; Luna::PropertyType wiImageParams_BindLua::properties[] = { @@ -38,6 +49,16 @@ int wiImageParams_BindLua::GetSize(lua_State* L) Luna::push(L, new Vector_BindLua(XMLoadFloat2(¶ms.siz))); return 1; } +int wiImageParams_BindLua::GetPivot(lua_State* L) +{ + Luna::push(L, new Vector_BindLua(XMLoadFloat2(¶ms.pivot))); + return 1; +} +int wiImageParams_BindLua::GetColor(lua_State* L) +{ + Luna::push(L, new Vector_BindLua(XMLoadFloat4(¶ms.col))); + return 1; +} int wiImageParams_BindLua::GetOpacity(lua_State* L) { wiLua::SSetFloat(L, params.opacity); @@ -58,6 +79,21 @@ int wiImageParams_BindLua::GetMipLevel(lua_State* L) wiLua::SSetFloat(L, params.mipLevel); return 1; } +int wiImageParams_BindLua::GetDrawRect(lua_State* L) +{ + Luna::push(L, new Vector_BindLua(XMLoadFloat4(¶ms.drawRect))); + return 1; +} +int wiImageParams_BindLua::IsDrawRectEnabled(lua_State* L) +{ + wiLua::SSetBool(L, params.isDrawRectEnabled()); + return 1; +} +int wiImageParams_BindLua::IsMirrorEnabled(lua_State* L) +{ + wiLua::SSetBool(L, params.isMirrorEnabled()); + return 1; +} int wiImageParams_BindLua::SetPos(lua_State* L) { @@ -93,6 +129,40 @@ int wiImageParams_BindLua::SetSize(lua_State* L) } return 0; } +int wiImageParams_BindLua::SetPivot(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Vector_BindLua* vector = Luna::lightcheck(L, 1); + if (vector != nullptr) + { + XMStoreFloat2(¶ms.pivot, vector->vector); + } + } + else + { + wiLua::SError(L, "SetPivot(Vector value) not enough arguments!"); + } + return 0; +} +int wiImageParams_BindLua::SetColor(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Vector_BindLua* vector = Luna::lightcheck(L, 1); + if (vector != nullptr) + { + XMStoreFloat4(¶ms.col, vector->vector); + } + } + else + { + wiLua::SError(L, "SetColor(Vector value) not enough arguments!"); + } + return 0; +} int wiImageParams_BindLua::SetOpacity(lua_State* L) { int argc = wiLua::SGetArgCount(L); @@ -145,6 +215,40 @@ int wiImageParams_BindLua::SetMipLevel(lua_State* L) } return 0; } +int wiImageParams_BindLua::EnableDrawRect(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Vector_BindLua* vector = Luna::lightcheck(L, 1); + if (vector != nullptr) + { + XMFLOAT4 drawrect; + XMStoreFloat4(&drawrect, vector->vector); + params.enableDrawRect(drawrect); + } + } + else + { + wiLua::SError(L, "EnableDrawRect(Vector value) not enough arguments!"); + } + return 0; +} +int wiImageParams_BindLua::DisableDrawRect(lua_State* L) +{ + params.disableDrawRect(); + return 0; +} +int wiImageParams_BindLua::EnableMirror(lua_State* L) +{ + params.enableMirror(); + return 0; +} +int wiImageParams_BindLua::DisableMirror(lua_State* L) +{ + params.disableMirror(); + return 0; +} wiImageParams_BindLua::wiImageParams_BindLua(lua_State *L) { diff --git a/WickedEngine/wiImageParams_BindLua.h b/WickedEngine/wiImageParams_BindLua.h index d5d9fb70b..c8e45ea91 100644 --- a/WickedEngine/wiImageParams_BindLua.h +++ b/WickedEngine/wiImageParams_BindLua.h @@ -18,17 +18,28 @@ public: int GetPos(lua_State* L); int GetSize(lua_State* L); + int GetPivot(lua_State* L); + int GetColor(lua_State* L); int GetOpacity(lua_State* L); int GetFade(lua_State* L); int GetRotation(lua_State* L); int GetMipLevel(lua_State* L); + int GetDrawRect(lua_State* L); + int IsDrawRectEnabled(lua_State* L); + int IsMirrorEnabled(lua_State* L); int SetPos(lua_State* L); int SetSize(lua_State* L); + int SetPivot(lua_State* L); + int SetColor(lua_State* L); int SetOpacity(lua_State* L); int SetFade(lua_State* L); int SetRotation(lua_State* L); int SetMipLevel(lua_State* L); + int EnableDrawRect(lua_State* L); + int DisableDrawRect(lua_State* L); + int EnableMirror(lua_State* L); + int DisableMirror(lua_State* L); static void Bind(); }; diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 20c881ce0..8c22d2cb4 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates const int minor = 26; // minor bug fixes, alterations, refactors, updates - const int revision = 18; + const int revision = 19; long GetVersion() diff --git a/images/hp_bar.png b/images/hp_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..1d33dabbd670c390078b16f43ff944e2055fe49d GIT binary patch literal 24414 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 literal 0 HcmV?d00001 diff --git a/logo/logo_small.png b/images/logo_small.png similarity index 100% rename from logo/logo_small.png rename to images/logo_small.png diff --git a/scripts/fighting_game.lua b/scripts/fighting_game.lua index 5748e3313..3afe473b6 100644 --- a/scripts/fighting_game.lua +++ b/scripts/fighting_game.lua @@ -32,6 +32,7 @@ local function Character(face, shirt_color) effect_hit = INVALID_ENTITY, effect_guard = INVALID_ENTITY, effect_spark = INVALID_ENTITY, + sprite_hpbar = Sprite(), face = 1, -- face direction (X) request_face = 1, -- the suggested facing of this player, it might not be the actual facing if the player haven't been able to turn yet (for example an other action hasn't finished yet) position = Vector(), -- the absolute position of this player in the world, a 2D Vector @@ -1068,6 +1069,12 @@ local function Character(face, shirt_color) scene.Merge(effect_scene) + + -- HP bar, etc. sprites: + self.sprite_hpbar = Sprite("../images/hp_bar.png") + main.GetActivePath().AddSprite(self.sprite_hpbar) + + self:StartState(self.state) end, @@ -1172,6 +1179,24 @@ local function Character(face, shirt_color) self.velocity.SetY(0) -- don't fall below ground self.velocity = vector.Multiply(self.velocity, 0.86) -- ground drag end + + + + -- update sprites: + local scaling = GetScreenWidth() / 3840.0 + local fx = self.sprite_hpbar.GetParams() + fx.SetPos(Vector(GetScreenWidth() / 2 + 140 * scaling * self.face, GetScreenHeight() / 16)) + fx.SetSize(vector.Multiply(Vector(1430, 180), scaling)) + fx.EnableDrawRect(Vector(0, 0, 1430, 180)) + fx.SetColor(Vector(1,0,0,1)) + if(self.face<0) then + fx.EnableMirror() + fx.SetPivot(Vector(1,0)) + else + fx.DisableMirror() + fx.SetPivot(Vector(0,0)) + end + self.sprite_hpbar.SetParams(fx) end,