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 000000000..1d33dabbd Binary files /dev/null and b/images/hp_bar.png differ 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,