add transitions
This commit is contained in:
parent
e9c8ca63ad
commit
887024f916
|
|
@ -15,6 +15,11 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\animation\EaseFunc.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\animation\EaseFunc.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\GifSprite.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\GifSprite.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\SpriteFrame.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\SpriteFrame.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\BoxTransition.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\FadeTransition.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\MoveTransition.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\RotationTransition.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\Transition.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\component\Button.h" />
|
<ClInclude Include="..\..\src\kiwano\base\component\Button.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\component\Component.h" />
|
<ClInclude Include="..\..\src\kiwano\base\component\Component.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\component\ComponentManager.h" />
|
<ClInclude Include="..\..\src\kiwano\base\component\ComponentManager.h" />
|
||||||
|
|
@ -35,7 +40,6 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Flag.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Flag.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Function.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Function.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\IntrusiveList.h" />
|
<ClInclude Include="..\..\src\kiwano\core\IntrusiveList.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Keys.h" />
|
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Library.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Library.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Serializable.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Serializable.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Singleton.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Singleton.h" />
|
||||||
|
|
@ -60,7 +64,6 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Stage.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\Stage.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Sprite.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\Sprite.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\TextActor.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\TextActor.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Transition.h" />
|
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Resource.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Resource.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\RefBasePtr.hpp" />
|
<ClInclude Include="..\..\src\kiwano\core\RefBasePtr.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\math\Constants.h" />
|
<ClInclude Include="..\..\src\kiwano\math\Constants.h" />
|
||||||
|
|
@ -75,6 +78,7 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\platform\Application.h" />
|
<ClInclude Include="..\..\src\kiwano\platform\Application.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\platform\FileSystem.h" />
|
<ClInclude Include="..\..\src\kiwano\platform\FileSystem.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\platform\Input.h" />
|
<ClInclude Include="..\..\src\kiwano\platform\Input.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\platform\Keys.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\platform\Runner.h" />
|
<ClInclude Include="..\..\src\kiwano\platform\Runner.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\platform\win32\ComPtr.hpp" />
|
<ClInclude Include="..\..\src\kiwano\platform\win32\ComPtr.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\platform\win32\libraries.h" />
|
<ClInclude Include="..\..\src\kiwano\platform\win32\libraries.h" />
|
||||||
|
|
@ -139,7 +143,11 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Stage.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Stage.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Sprite.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Sprite.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\TextActor.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\TextActor.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Transition.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\transition\BoxTransition.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\transition\FadeTransition.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\transition\MoveTransition.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\transition\RotationTransition.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\transition\Transition.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\component\Button.cpp" />
|
<ClCompile Include="..\..\src\kiwano\base\component\Button.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\component\Component.cpp" />
|
<ClCompile Include="..\..\src\kiwano\base\component\Component.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\component\ComponentManager.cpp" />
|
<ClCompile Include="..\..\src\kiwano\base\component\ComponentManager.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,9 @@
|
||||||
<Filter Include="2d\animation">
|
<Filter Include="2d\animation">
|
||||||
<UniqueIdentifier>{9314f30d-5742-48b6-94e5-e3b4284106f6}</UniqueIdentifier>
|
<UniqueIdentifier>{9314f30d-5742-48b6-94e5-e3b4284106f6}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="2d\transition">
|
||||||
|
<UniqueIdentifier>{f70cecd8-6d5b-405d-8466-d3ca2db9b806}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Canvas.h">
|
<ClInclude Include="..\..\src\kiwano\2d\Canvas.h">
|
||||||
|
|
@ -45,9 +48,6 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Sprite.h">
|
<ClInclude Include="..\..\src\kiwano\2d\Sprite.h">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Transition.h">
|
|
||||||
<Filter>2d</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Resource.h">
|
<ClInclude Include="..\..\src\kiwano\core\Resource.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -111,9 +111,6 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Common.h">
|
<ClInclude Include="..\..\src\kiwano\core\Common.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Keys.h">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Time.h">
|
<ClInclude Include="..\..\src\kiwano\core\Time.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -381,6 +378,24 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\SpriteFrame.h">
|
<ClInclude Include="..\..\src\kiwano\2d\SpriteFrame.h">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\platform\Keys.h">
|
||||||
|
<Filter>platform</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\Transition.h">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\FadeTransition.h">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\MoveTransition.h">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\RotationTransition.h">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\transition\BoxTransition.h">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Canvas.cpp">
|
<ClCompile Include="..\..\src\kiwano\2d\Canvas.cpp">
|
||||||
|
|
@ -389,9 +404,6 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Sprite.cpp">
|
<ClCompile Include="..\..\src\kiwano\2d\Sprite.cpp">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Transition.cpp">
|
|
||||||
<Filter>2d</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\kiwano\core\Resource.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\Resource.cpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -623,6 +635,21 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\SpriteFrame.h.cpp">
|
<ClCompile Include="..\..\src\kiwano\2d\SpriteFrame.h.cpp">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\transition\Transition.cpp">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\transition\FadeTransition.cpp">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\transition\MoveTransition.cpp">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\transition\RotationTransition.cpp">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\transition\BoxTransition.cpp">
|
||||||
|
<Filter>2d\transition</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="suppress_warning.ruleset" />
|
<None Include="suppress_warning.ruleset" />
|
||||||
|
|
|
||||||
|
|
@ -1,388 +0,0 @@
|
||||||
// Copyright (c) 2016-2018 Kiwano - Nomango
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
#include <kiwano/2d/Actor.h>
|
|
||||||
#include <kiwano/2d/Stage.h>
|
|
||||||
#include <kiwano/2d/Transition.h>
|
|
||||||
#include <kiwano/utils/Logger.h>
|
|
||||||
#include <kiwano/platform/Window.h>
|
|
||||||
#include <kiwano/render/Renderer.h>
|
|
||||||
|
|
||||||
namespace kiwano
|
|
||||||
{
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Transition
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
Transition::Transition()
|
|
||||||
: done_(false)
|
|
||||||
, duration_()
|
|
||||||
, delta_()
|
|
||||||
, process_(0)
|
|
||||||
, window_size_()
|
|
||||||
, out_stage_(nullptr)
|
|
||||||
, in_stage_(nullptr)
|
|
||||||
, out_layer_()
|
|
||||||
, in_layer_()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Transition::~Transition() {}
|
|
||||||
|
|
||||||
bool Transition::IsDone()
|
|
||||||
{
|
|
||||||
return done_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Transition::Init(Stage* prev, Stage* next)
|
|
||||||
{
|
|
||||||
process_ = 0;
|
|
||||||
delta_ = Duration{};
|
|
||||||
|
|
||||||
out_stage_ = prev;
|
|
||||||
in_stage_ = next;
|
|
||||||
window_size_ = Renderer::GetInstance().GetOutputSize();
|
|
||||||
|
|
||||||
if (in_stage_)
|
|
||||||
{
|
|
||||||
in_layer_.SetClipRect(Rect{ Point(), window_size_ });
|
|
||||||
}
|
|
||||||
|
|
||||||
if (out_stage_)
|
|
||||||
{
|
|
||||||
out_layer_.SetClipRect(Rect{ Point(), window_size_ });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Transition::Update(Duration dt)
|
|
||||||
{
|
|
||||||
if (duration_.IsZero())
|
|
||||||
{
|
|
||||||
process_ = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
delta_ += dt;
|
|
||||||
process_ = std::min(delta_ / duration_, 1.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process_ >= 1)
|
|
||||||
{
|
|
||||||
this->Stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Transition::Render(RenderContext& ctx)
|
|
||||||
{
|
|
||||||
if (out_stage_)
|
|
||||||
{
|
|
||||||
out_stage_->PrepareToRender(ctx);
|
|
||||||
ctx.PushClipRect(Rect{ Point{}, window_size_ });
|
|
||||||
ctx.PushLayer(out_layer_);
|
|
||||||
|
|
||||||
out_stage_->Render(ctx);
|
|
||||||
|
|
||||||
ctx.PopLayer();
|
|
||||||
ctx.PopClipRect();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in_stage_)
|
|
||||||
{
|
|
||||||
in_stage_->PrepareToRender(ctx);
|
|
||||||
ctx.PushClipRect(Rect{ Point{}, window_size_ });
|
|
||||||
ctx.PushLayer(in_layer_);
|
|
||||||
|
|
||||||
in_stage_->Render(ctx);
|
|
||||||
|
|
||||||
ctx.PopLayer();
|
|
||||||
ctx.PopClipRect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Transition::Stop()
|
|
||||||
{
|
|
||||||
done_ = true;
|
|
||||||
Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// BoxTransition
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
BoxTransition::BoxTransition(Duration duration)
|
|
||||||
{
|
|
||||||
SetDuration(duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
BoxTransition::BoxTransition() {}
|
|
||||||
|
|
||||||
void BoxTransition::Init(Stage* prev, Stage* next)
|
|
||||||
{
|
|
||||||
Transition::Init(prev, next);
|
|
||||||
|
|
||||||
in_layer_.SetOpacity(0.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BoxTransition::Update(Duration dt)
|
|
||||||
{
|
|
||||||
Transition::Update(dt);
|
|
||||||
|
|
||||||
if (process_ < .5f)
|
|
||||||
{
|
|
||||||
out_layer_.SetClipRect(Rect(window_size_.x * process_, window_size_.y * process_,
|
|
||||||
window_size_.x * (1 - process_), window_size_.y * (1 - process_)));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
out_layer_.SetOpacity(0.f);
|
|
||||||
in_layer_.SetOpacity(1.f);
|
|
||||||
in_layer_.SetClipRect(Rect(window_size_.x * (1 - process_), window_size_.y * (1 - process_),
|
|
||||||
window_size_.x * process_, window_size_.y * process_));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// EmergeTransition
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
EmergeTransition::EmergeTransition(Duration duration)
|
|
||||||
{
|
|
||||||
SetDuration(duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
EmergeTransition::EmergeTransition() {}
|
|
||||||
|
|
||||||
void EmergeTransition::Init(Stage* prev, Stage* next)
|
|
||||||
{
|
|
||||||
Transition::Init(prev, next);
|
|
||||||
|
|
||||||
out_layer_.SetOpacity(1.f);
|
|
||||||
in_layer_.SetOpacity(0.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EmergeTransition::Update(Duration dt)
|
|
||||||
{
|
|
||||||
Transition::Update(dt);
|
|
||||||
|
|
||||||
out_layer_.SetOpacity(1 - process_);
|
|
||||||
in_layer_.SetOpacity(process_);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// FadeTransition
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
FadeTransition::FadeTransition(Duration duration)
|
|
||||||
{
|
|
||||||
SetDuration(duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
FadeTransition::FadeTransition() {}
|
|
||||||
|
|
||||||
void FadeTransition::Init(Stage* prev, Stage* next)
|
|
||||||
{
|
|
||||||
Transition::Init(prev, next);
|
|
||||||
|
|
||||||
out_layer_.SetOpacity(1.f);
|
|
||||||
in_layer_.SetOpacity(0.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FadeTransition::Update(Duration dt)
|
|
||||||
{
|
|
||||||
Transition::Update(dt);
|
|
||||||
|
|
||||||
if (process_ < 0.5)
|
|
||||||
{
|
|
||||||
out_layer_.SetOpacity(1 - process_ * 2);
|
|
||||||
in_layer_.SetOpacity(0.f);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
out_layer_.SetOpacity(0.f);
|
|
||||||
in_layer_.SetOpacity((process_ - 0.5f) * 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// MoveTransition
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
MoveTransition::MoveTransition(Duration duration, Type type)
|
|
||||||
: type_(type)
|
|
||||||
{
|
|
||||||
SetDuration(duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
MoveTransition::MoveTransition()
|
|
||||||
: type_(Type::Left)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveTransition::Init(Stage* prev, Stage* next)
|
|
||||||
{
|
|
||||||
Transition::Init(prev, next);
|
|
||||||
|
|
||||||
switch (type_)
|
|
||||||
{
|
|
||||||
case Type::Up:
|
|
||||||
pos_delta_ = Point(0, -window_size_.y);
|
|
||||||
start_pos_ = Point(0, window_size_.y);
|
|
||||||
break;
|
|
||||||
case Type::Down:
|
|
||||||
pos_delta_ = Point(0, window_size_.y);
|
|
||||||
start_pos_ = Point(0, -window_size_.y);
|
|
||||||
break;
|
|
||||||
case Type::Left:
|
|
||||||
pos_delta_ = Point(-window_size_.x, 0);
|
|
||||||
start_pos_ = Point(window_size_.x, 0);
|
|
||||||
break;
|
|
||||||
case Type::Right:
|
|
||||||
pos_delta_ = Point(window_size_.x, 0);
|
|
||||||
start_pos_ = Point(-window_size_.x, 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (out_stage_)
|
|
||||||
{
|
|
||||||
out_stage_->SetTransform(Transform{});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in_stage_)
|
|
||||||
{
|
|
||||||
auto transform = Transform{};
|
|
||||||
transform.position = start_pos_;
|
|
||||||
in_stage_->SetTransform(transform);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveTransition::Update(Duration dt)
|
|
||||||
{
|
|
||||||
Transition::Update(dt);
|
|
||||||
|
|
||||||
if (out_stage_)
|
|
||||||
{
|
|
||||||
auto transform = Transform{};
|
|
||||||
transform.position = pos_delta_ * process_;
|
|
||||||
out_stage_->SetTransform(transform);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in_stage_)
|
|
||||||
{
|
|
||||||
auto transform = Transform{};
|
|
||||||
transform.position = start_pos_ + pos_delta_ * process_;
|
|
||||||
in_stage_->SetTransform(transform);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveTransition::Reset()
|
|
||||||
{
|
|
||||||
if (out_stage_)
|
|
||||||
{
|
|
||||||
out_stage_->SetTransform(Transform{});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in_stage_)
|
|
||||||
{
|
|
||||||
in_stage_->SetTransform(Transform{});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// RotationTransition
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
RotationTransition::RotationTransition(Duration duration, float rotation)
|
|
||||||
: rotation_(rotation)
|
|
||||||
{
|
|
||||||
SetDuration(duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
RotationTransition::RotationTransition()
|
|
||||||
: rotation_(0.0f)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void RotationTransition::Init(Stage* prev, Stage* next)
|
|
||||||
{
|
|
||||||
Transition::Init(prev, next);
|
|
||||||
|
|
||||||
auto transform = Transform{};
|
|
||||||
transform.position = Point{ window_size_.x / 2, window_size_.y / 2 };
|
|
||||||
|
|
||||||
if (out_stage_)
|
|
||||||
{
|
|
||||||
out_stage_->SetTransform(transform);
|
|
||||||
out_stage_->SetAnchor(Vec2{ 0.5f, 0.5f });
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in_stage_)
|
|
||||||
{
|
|
||||||
in_stage_->SetTransform(transform);
|
|
||||||
in_stage_->SetAnchor(Vec2{ 0.5f, 0.5f });
|
|
||||||
}
|
|
||||||
|
|
||||||
in_layer_.SetOpacity(0.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RotationTransition::Update(Duration dt)
|
|
||||||
{
|
|
||||||
Transition::Update(dt);
|
|
||||||
|
|
||||||
if (process_ < .5f)
|
|
||||||
{
|
|
||||||
if (out_stage_)
|
|
||||||
{
|
|
||||||
auto transform = out_stage_->GetTransform();
|
|
||||||
transform.scale = Point{ (.5f - process_) * 2, (.5f - process_) * 2 };
|
|
||||||
transform.rotation = rotation_ * (.5f - process_) * 2;
|
|
||||||
out_stage_->SetTransform(transform);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (in_stage_)
|
|
||||||
{
|
|
||||||
out_layer_.SetOpacity(0.f);
|
|
||||||
in_layer_.SetOpacity(1.f);
|
|
||||||
|
|
||||||
auto transform = in_stage_->GetTransform();
|
|
||||||
transform.scale = Point{ (process_ - .5f) * 2, (process_ - .5f) * 2 };
|
|
||||||
transform.rotation = rotation_ * (process_ - .5f) * 2;
|
|
||||||
|
|
||||||
in_stage_->SetTransform(transform);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RotationTransition::Reset()
|
|
||||||
{
|
|
||||||
if (out_stage_)
|
|
||||||
{
|
|
||||||
out_stage_->SetTransform(Transform{});
|
|
||||||
out_stage_->SetAnchor(Vec2{ 0.f, 0.f });
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in_stage_)
|
|
||||||
{
|
|
||||||
in_stage_->SetTransform(Transform{});
|
|
||||||
in_stage_->SetAnchor(Vec2{ 0.f, 0.f });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // namespace kiwano
|
|
||||||
|
|
@ -1,256 +0,0 @@
|
||||||
// Copyright (c) 2016-2018 Kiwano - Nomango
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include <kiwano/2d/Stage.h>
|
|
||||||
#include <kiwano/render/Layer.h>
|
|
||||||
|
|
||||||
namespace kiwano
|
|
||||||
{
|
|
||||||
class Director;
|
|
||||||
class RenderContext;
|
|
||||||
|
|
||||||
KGE_DECLARE_SMART_PTR(Transition);
|
|
||||||
KGE_DECLARE_SMART_PTR(FadeTransition);
|
|
||||||
KGE_DECLARE_SMART_PTR(EmergeTransition);
|
|
||||||
KGE_DECLARE_SMART_PTR(BoxTransition);
|
|
||||||
KGE_DECLARE_SMART_PTR(MoveTransition);
|
|
||||||
KGE_DECLARE_SMART_PTR(RotationTransition);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 舞台过渡动画
|
|
||||||
*/
|
|
||||||
class KGE_API Transition : public ObjectBase
|
|
||||||
{
|
|
||||||
friend class Director;
|
|
||||||
|
|
||||||
public:
|
|
||||||
Transition();
|
|
||||||
|
|
||||||
virtual ~Transition();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 设置动画时长
|
|
||||||
*/
|
|
||||||
void SetDuration(Duration dt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 场景过渡动画是否已结束
|
|
||||||
*/
|
|
||||||
bool IsDone();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 初始化场景过渡动画
|
|
||||||
* @param[in] prev 转出场景
|
|
||||||
* @param[in] next 转入场景
|
|
||||||
*/
|
|
||||||
virtual void Init(Stage* prev, Stage* next);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 更新过渡动画
|
|
||||||
* @param dt 距上一次更新的时间间隔
|
|
||||||
*/
|
|
||||||
virtual void Update(Duration dt);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 渲染过度动画
|
|
||||||
* @param[in] ctx 渲染上下文
|
|
||||||
*/
|
|
||||||
virtual void Render(RenderContext& ctx);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 停止动画
|
|
||||||
*/
|
|
||||||
virtual void Stop();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 重置动画
|
|
||||||
*/
|
|
||||||
virtual void Reset() {}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool done_;
|
|
||||||
float process_;
|
|
||||||
Duration duration_;
|
|
||||||
Duration delta_;
|
|
||||||
Size window_size_;
|
|
||||||
StagePtr out_stage_;
|
|
||||||
StagePtr in_stage_;
|
|
||||||
Layer out_layer_;
|
|
||||||
Layer in_layer_;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 淡入淡出过渡动画
|
|
||||||
* @details 前一场景淡出动画结束后,后一场景淡入
|
|
||||||
*/
|
|
||||||
class FadeTransition : public Transition
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 创建淡入淡出过渡动画
|
|
||||||
* @param duration 动画时长
|
|
||||||
*/
|
|
||||||
FadeTransition(Duration duration);
|
|
||||||
|
|
||||||
FadeTransition();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void Update(Duration dt) override;
|
|
||||||
|
|
||||||
virtual void Init(Stage* prev, Stage* next) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 渐变过渡动画
|
|
||||||
* @details 前一场景淡出动画的同时,后一场景淡入
|
|
||||||
*/
|
|
||||||
class EmergeTransition : public Transition
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 创建渐变过渡动画
|
|
||||||
* @param duration 动画时长
|
|
||||||
*/
|
|
||||||
EmergeTransition(Duration duration);
|
|
||||||
|
|
||||||
EmergeTransition();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void Update(Duration dt) override;
|
|
||||||
|
|
||||||
virtual void Init(Stage* prev, Stage* next) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 盒状过渡动画
|
|
||||||
* @details 前一场景以盒状收缩至消失,后一场景以盒状扩大
|
|
||||||
*/
|
|
||||||
class BoxTransition : public Transition
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 创建盒状过渡动画
|
|
||||||
* @param duration 动画时长
|
|
||||||
*/
|
|
||||||
BoxTransition(Duration duration);
|
|
||||||
|
|
||||||
BoxTransition();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void Update(Duration dt) override;
|
|
||||||
|
|
||||||
virtual void Init(Stage* prev, Stage* next) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 位移过渡动画
|
|
||||||
* @details 两场景以位移的方式切换
|
|
||||||
*/
|
|
||||||
class MoveTransition : public Transition
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 位移方式
|
|
||||||
*/
|
|
||||||
enum class Type : int
|
|
||||||
{
|
|
||||||
Up, ///< 上移
|
|
||||||
Down, ///< 下移
|
|
||||||
Left, ///< 左移
|
|
||||||
Right ///< 右移
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 创建位移过渡动画
|
|
||||||
* @param duration 动画时长
|
|
||||||
* @param type 位移方式
|
|
||||||
*/
|
|
||||||
MoveTransition(Duration duration, Type type);
|
|
||||||
|
|
||||||
MoveTransition();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void Update(Duration dt) override;
|
|
||||||
|
|
||||||
virtual void Init(Stage* prev, Stage* next) override;
|
|
||||||
|
|
||||||
void Reset() override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
Type type_;
|
|
||||||
Point pos_delta_;
|
|
||||||
Point start_pos_;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 旋转过渡动画
|
|
||||||
* @details 前一场景以旋转方式收缩至消失,后一场景以旋转方式扩大
|
|
||||||
*/
|
|
||||||
class RotationTransition : public Transition
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* \~chinese
|
|
||||||
* @brief 创建旋转过渡动画
|
|
||||||
* @param duration 动画时长
|
|
||||||
* @param rotation 旋转度数
|
|
||||||
*/
|
|
||||||
RotationTransition(Duration duration, float rotation = 360.0f);
|
|
||||||
|
|
||||||
RotationTransition();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void Update(Duration dt) override;
|
|
||||||
|
|
||||||
virtual void Init(Stage* prev, Stage* next) override;
|
|
||||||
|
|
||||||
void Reset() override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
float rotation_;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
inline void Transition::SetDuration(Duration dt)
|
|
||||||
{
|
|
||||||
duration_ = dt;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace kiwano
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#include <kiwano/2d/transition/BoxTransition.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
BoxTransition::BoxTransition(Duration duration)
|
||||||
|
{
|
||||||
|
SetDuration(duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
BoxTransition::BoxTransition() {}
|
||||||
|
|
||||||
|
void BoxTransition::Init(Stage* prev, Stage* next)
|
||||||
|
{
|
||||||
|
Transition::Init(prev, next);
|
||||||
|
|
||||||
|
in_layer_.SetOpacity(0.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BoxTransition::Update(Duration dt)
|
||||||
|
{
|
||||||
|
Transition::Update(dt);
|
||||||
|
|
||||||
|
if (process_ < .5f)
|
||||||
|
{
|
||||||
|
out_layer_.SetClipRect(Rect(window_size_.x * process_, window_size_.y * process_,
|
||||||
|
window_size_.x * (1 - process_), window_size_.y * (1 - process_)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out_layer_.SetOpacity(0.f);
|
||||||
|
in_layer_.SetOpacity(1.f);
|
||||||
|
in_layer_.SetClipRect(Rect(window_size_.x * (1 - process_), window_size_.y * (1 - process_),
|
||||||
|
window_size_.x * process_, window_size_.y * process_));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <kiwano/2d/transition/Transition.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
KGE_DECLARE_SMART_PTR(BoxTransition);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 盒状过渡动画
|
||||||
|
* @details 前一场景以盒状收缩至消失,后一场景以盒状扩大
|
||||||
|
*/
|
||||||
|
class BoxTransition : public Transition
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 创建盒状过渡动画
|
||||||
|
* @param duration 动画时长
|
||||||
|
*/
|
||||||
|
BoxTransition(Duration duration);
|
||||||
|
|
||||||
|
BoxTransition();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void Update(Duration dt) override;
|
||||||
|
|
||||||
|
virtual void Init(Stage* prev, Stage* next) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#include <kiwano/2d/transition/FadeTransition.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
FadeTransition::FadeTransition(Duration duration, bool parallel)
|
||||||
|
: parallel_(parallel)
|
||||||
|
{
|
||||||
|
SetDuration(duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
FadeTransition::FadeTransition() {}
|
||||||
|
|
||||||
|
void FadeTransition::Init(Stage* prev, Stage* next)
|
||||||
|
{
|
||||||
|
Transition::Init(prev, next);
|
||||||
|
|
||||||
|
out_layer_.SetOpacity(1.f);
|
||||||
|
in_layer_.SetOpacity(0.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FadeTransition::Update(Duration dt)
|
||||||
|
{
|
||||||
|
Transition::Update(dt);
|
||||||
|
|
||||||
|
if (parallel_)
|
||||||
|
{
|
||||||
|
out_layer_.SetOpacity(1 - process_);
|
||||||
|
in_layer_.SetOpacity(process_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (process_ < 0.5)
|
||||||
|
{
|
||||||
|
out_layer_.SetOpacity(1 - process_ * 2);
|
||||||
|
in_layer_.SetOpacity(0.f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out_layer_.SetOpacity(0.f);
|
||||||
|
in_layer_.SetOpacity((process_ - 0.5f) * 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <kiwano/2d/transition/Transition.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
KGE_DECLARE_SMART_PTR(FadeTransition);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 淡入淡出过渡动画
|
||||||
|
* @details 前一场景淡出动画结束后,后一场景淡入
|
||||||
|
*/
|
||||||
|
class FadeTransition : public Transition
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 创建淡入淡出过渡动画
|
||||||
|
* @param duration 动画时长
|
||||||
|
* @param parallel 淡入和淡出同时进行
|
||||||
|
*/
|
||||||
|
FadeTransition(Duration duration, bool parallel = false);
|
||||||
|
|
||||||
|
FadeTransition();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void Update(Duration dt) override;
|
||||||
|
|
||||||
|
virtual void Init(Stage* prev, Stage* next) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool parallel_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,106 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#include <kiwano/2d/transition/MoveTransition.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
MoveTransition::MoveTransition(Duration duration, Type type)
|
||||||
|
: type_(type)
|
||||||
|
{
|
||||||
|
SetDuration(duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
MoveTransition::MoveTransition()
|
||||||
|
: type_(Type::Left)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveTransition::Init(Stage* prev, Stage* next)
|
||||||
|
{
|
||||||
|
Transition::Init(prev, next);
|
||||||
|
|
||||||
|
switch (type_)
|
||||||
|
{
|
||||||
|
case Type::Up:
|
||||||
|
pos_delta_ = Point(0, -window_size_.y);
|
||||||
|
start_pos_ = Point(0, window_size_.y);
|
||||||
|
break;
|
||||||
|
case Type::Down:
|
||||||
|
pos_delta_ = Point(0, window_size_.y);
|
||||||
|
start_pos_ = Point(0, -window_size_.y);
|
||||||
|
break;
|
||||||
|
case Type::Left:
|
||||||
|
pos_delta_ = Point(-window_size_.x, 0);
|
||||||
|
start_pos_ = Point(window_size_.x, 0);
|
||||||
|
break;
|
||||||
|
case Type::Right:
|
||||||
|
pos_delta_ = Point(window_size_.x, 0);
|
||||||
|
start_pos_ = Point(-window_size_.x, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (out_stage_)
|
||||||
|
{
|
||||||
|
out_stage_->SetTransform(Transform{});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_stage_)
|
||||||
|
{
|
||||||
|
auto transform = Transform{};
|
||||||
|
transform.position = start_pos_;
|
||||||
|
in_stage_->SetTransform(transform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveTransition::Update(Duration dt)
|
||||||
|
{
|
||||||
|
Transition::Update(dt);
|
||||||
|
|
||||||
|
if (out_stage_)
|
||||||
|
{
|
||||||
|
auto transform = Transform{};
|
||||||
|
transform.position = pos_delta_ * process_;
|
||||||
|
out_stage_->SetTransform(transform);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_stage_)
|
||||||
|
{
|
||||||
|
auto transform = Transform{};
|
||||||
|
transform.position = start_pos_ + pos_delta_ * process_;
|
||||||
|
in_stage_->SetTransform(transform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveTransition::Reset()
|
||||||
|
{
|
||||||
|
if (out_stage_)
|
||||||
|
{
|
||||||
|
out_stage_->SetTransform(Transform{});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_stage_)
|
||||||
|
{
|
||||||
|
in_stage_->SetTransform(Transform{});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <kiwano/2d/transition/Transition.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
KGE_DECLARE_SMART_PTR(MoveTransition);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 位移过渡动画
|
||||||
|
* @details 两场景以位移的方式切换
|
||||||
|
*/
|
||||||
|
class MoveTransition : public Transition
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 位移方式
|
||||||
|
*/
|
||||||
|
enum class Type : int
|
||||||
|
{
|
||||||
|
Up, ///< 上移
|
||||||
|
Down, ///< 下移
|
||||||
|
Left, ///< 左移
|
||||||
|
Right ///< 右移
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 创建位移过渡动画
|
||||||
|
* @param duration 动画时长
|
||||||
|
* @param type 位移方式
|
||||||
|
*/
|
||||||
|
MoveTransition(Duration duration, Type type);
|
||||||
|
|
||||||
|
MoveTransition();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void Update(Duration dt) override;
|
||||||
|
|
||||||
|
virtual void Init(Stage* prev, Stage* next) override;
|
||||||
|
|
||||||
|
void Reset() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Type type_;
|
||||||
|
Point pos_delta_;
|
||||||
|
Point start_pos_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,104 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#include <kiwano/2d/transition/RotationTransition.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
RotationTransition::RotationTransition(Duration duration, float rotation)
|
||||||
|
: rotation_(rotation)
|
||||||
|
{
|
||||||
|
SetDuration(duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
RotationTransition::RotationTransition()
|
||||||
|
: rotation_(0.0f)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void RotationTransition::Init(Stage* prev, Stage* next)
|
||||||
|
{
|
||||||
|
Transition::Init(prev, next);
|
||||||
|
|
||||||
|
auto transform = Transform{};
|
||||||
|
transform.position = Point{ window_size_.x / 2, window_size_.y / 2 };
|
||||||
|
|
||||||
|
if (out_stage_)
|
||||||
|
{
|
||||||
|
out_stage_->SetTransform(transform);
|
||||||
|
out_stage_->SetAnchor(Vec2{ 0.5f, 0.5f });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_stage_)
|
||||||
|
{
|
||||||
|
in_stage_->SetTransform(transform);
|
||||||
|
in_stage_->SetAnchor(Vec2{ 0.5f, 0.5f });
|
||||||
|
}
|
||||||
|
|
||||||
|
in_layer_.SetOpacity(0.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RotationTransition::Update(Duration dt)
|
||||||
|
{
|
||||||
|
Transition::Update(dt);
|
||||||
|
|
||||||
|
if (process_ < .5f)
|
||||||
|
{
|
||||||
|
if (out_stage_)
|
||||||
|
{
|
||||||
|
auto transform = out_stage_->GetTransform();
|
||||||
|
transform.scale = Point{ (.5f - process_) * 2, (.5f - process_) * 2 };
|
||||||
|
transform.rotation = rotation_ * (.5f - process_) * 2;
|
||||||
|
out_stage_->SetTransform(transform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (in_stage_)
|
||||||
|
{
|
||||||
|
out_layer_.SetOpacity(0.f);
|
||||||
|
in_layer_.SetOpacity(1.f);
|
||||||
|
|
||||||
|
auto transform = in_stage_->GetTransform();
|
||||||
|
transform.scale = Point{ (process_ - .5f) * 2, (process_ - .5f) * 2 };
|
||||||
|
transform.rotation = rotation_ * (process_ - .5f) * 2;
|
||||||
|
|
||||||
|
in_stage_->SetTransform(transform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RotationTransition::Reset()
|
||||||
|
{
|
||||||
|
if (out_stage_)
|
||||||
|
{
|
||||||
|
out_stage_->SetTransform(Transform{});
|
||||||
|
out_stage_->SetAnchor(Vec2{ 0.f, 0.f });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_stage_)
|
||||||
|
{
|
||||||
|
in_stage_->SetTransform(Transform{});
|
||||||
|
in_stage_->SetAnchor(Vec2{ 0.f, 0.f });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <kiwano/2d/transition/Transition.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
KGE_DECLARE_SMART_PTR(RotationTransition);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 旋转过渡动画
|
||||||
|
* @details 前一场景以旋转方式收缩至消失,后一场景以旋转方式扩大
|
||||||
|
*/
|
||||||
|
class RotationTransition : public Transition
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 创建旋转过渡动画
|
||||||
|
* @param duration 动画时长
|
||||||
|
* @param rotation 旋转度数
|
||||||
|
*/
|
||||||
|
RotationTransition(Duration duration, float rotation = 360.0f);
|
||||||
|
|
||||||
|
RotationTransition();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void Update(Duration dt) override;
|
||||||
|
|
||||||
|
virtual void Init(Stage* prev, Stage* next) override;
|
||||||
|
|
||||||
|
void Reset() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
float rotation_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,118 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#include <kiwano/2d/transition/Transition.h>
|
||||||
|
#include <kiwano/render/Renderer.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
Transition::Transition()
|
||||||
|
: done_(false)
|
||||||
|
, duration_()
|
||||||
|
, delta_()
|
||||||
|
, process_(0)
|
||||||
|
, window_size_()
|
||||||
|
, out_stage_(nullptr)
|
||||||
|
, in_stage_(nullptr)
|
||||||
|
, out_layer_()
|
||||||
|
, in_layer_()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Transition::~Transition() {}
|
||||||
|
|
||||||
|
bool Transition::IsDone()
|
||||||
|
{
|
||||||
|
return done_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Transition::Init(Stage* prev, Stage* next)
|
||||||
|
{
|
||||||
|
process_ = 0;
|
||||||
|
delta_ = Duration{};
|
||||||
|
|
||||||
|
out_stage_ = prev;
|
||||||
|
in_stage_ = next;
|
||||||
|
window_size_ = Renderer::GetInstance().GetOutputSize();
|
||||||
|
|
||||||
|
if (in_stage_)
|
||||||
|
{
|
||||||
|
in_layer_.SetClipRect(Rect{ Point(), window_size_ });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (out_stage_)
|
||||||
|
{
|
||||||
|
out_layer_.SetClipRect(Rect{ Point(), window_size_ });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Transition::Update(Duration dt)
|
||||||
|
{
|
||||||
|
if (duration_.IsZero())
|
||||||
|
{
|
||||||
|
process_ = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delta_ += dt;
|
||||||
|
process_ = std::min(delta_ / duration_, 1.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process_ >= 1)
|
||||||
|
{
|
||||||
|
this->Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Transition::Render(RenderContext& ctx)
|
||||||
|
{
|
||||||
|
if (out_stage_)
|
||||||
|
{
|
||||||
|
out_stage_->PrepareToRender(ctx);
|
||||||
|
ctx.PushClipRect(Rect{ Point{}, window_size_ });
|
||||||
|
ctx.PushLayer(out_layer_);
|
||||||
|
|
||||||
|
out_stage_->Render(ctx);
|
||||||
|
|
||||||
|
ctx.PopLayer();
|
||||||
|
ctx.PopClipRect();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_stage_)
|
||||||
|
{
|
||||||
|
in_stage_->PrepareToRender(ctx);
|
||||||
|
ctx.PushClipRect(Rect{ Point{}, window_size_ });
|
||||||
|
ctx.PushLayer(in_layer_);
|
||||||
|
|
||||||
|
in_stage_->Render(ctx);
|
||||||
|
|
||||||
|
ctx.PopLayer();
|
||||||
|
ctx.PopClipRect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Transition::Stop()
|
||||||
|
{
|
||||||
|
done_ = true;
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,121 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <kiwano/2d/Stage.h>
|
||||||
|
#include <kiwano/render/Layer.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
class Director;
|
||||||
|
class RenderContext;
|
||||||
|
|
||||||
|
KGE_DECLARE_SMART_PTR(Transition);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* \defgroup Transition 舞台过渡动画
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \addtogroup Transition
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 舞台过渡动画
|
||||||
|
*/
|
||||||
|
class KGE_API Transition : public ObjectBase
|
||||||
|
{
|
||||||
|
friend class Director;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Transition();
|
||||||
|
|
||||||
|
virtual ~Transition();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 设置动画时长
|
||||||
|
*/
|
||||||
|
void SetDuration(Duration dt);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 场景过渡动画是否已结束
|
||||||
|
*/
|
||||||
|
bool IsDone();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 初始化场景过渡动画
|
||||||
|
* @param[in] prev 转出场景
|
||||||
|
* @param[in] next 转入场景
|
||||||
|
*/
|
||||||
|
virtual void Init(Stage* prev, Stage* next);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 更新过渡动画
|
||||||
|
* @param dt 距上一次更新的时间间隔
|
||||||
|
*/
|
||||||
|
virtual void Update(Duration dt);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 渲染过度动画
|
||||||
|
* @param[in] ctx 渲染上下文
|
||||||
|
*/
|
||||||
|
virtual void Render(RenderContext& ctx);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 停止动画
|
||||||
|
*/
|
||||||
|
virtual void Stop();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 重置动画
|
||||||
|
*/
|
||||||
|
virtual void Reset() {}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool done_;
|
||||||
|
float process_;
|
||||||
|
Duration duration_;
|
||||||
|
Duration delta_;
|
||||||
|
Size window_size_;
|
||||||
|
StagePtr out_stage_;
|
||||||
|
StagePtr in_stage_;
|
||||||
|
Layer out_layer_;
|
||||||
|
Layer in_layer_;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
inline void Transition::SetDuration(Duration dt)
|
||||||
|
{
|
||||||
|
duration_ = dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -21,7 +21,6 @@
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
#include <kiwano/2d/DebugActor.h>
|
#include <kiwano/2d/DebugActor.h>
|
||||||
#include <kiwano/2d/Stage.h>
|
#include <kiwano/2d/Stage.h>
|
||||||
#include <kiwano/2d/Transition.h>
|
|
||||||
#include <kiwano/base/Director.h>
|
#include <kiwano/base/Director.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
#include <kiwano/2d/Stage.h>
|
#include <kiwano/2d/Stage.h>
|
||||||
#include <kiwano/2d/Transition.h>
|
#include <kiwano/2d/transition/Transition.h>
|
||||||
#include <kiwano/base/Module.h>
|
#include <kiwano/base/Module.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/core/Keys.h>
|
#include <kiwano/platform/Keys.h>
|
||||||
#include <kiwano/event/Event.h>
|
#include <kiwano/event/Event.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/core/Keys.h>
|
#include <kiwano/platform/Keys.h>
|
||||||
#include <kiwano/event/Event.h>
|
#include <kiwano/event/Event.h>
|
||||||
#include <kiwano/math/Math.h>
|
#include <kiwano/math/Math.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,16 @@
|
||||||
#include <kiwano/2d/Sprite.h>
|
#include <kiwano/2d/Sprite.h>
|
||||||
#include <kiwano/2d/Stage.h>
|
#include <kiwano/2d/Stage.h>
|
||||||
#include <kiwano/2d/TextActor.h>
|
#include <kiwano/2d/TextActor.h>
|
||||||
#include <kiwano/2d/Transition.h>
|
|
||||||
|
//
|
||||||
|
// transition
|
||||||
|
//
|
||||||
|
|
||||||
|
#include <kiwano/2d/transition/Transition.h>
|
||||||
|
#include <kiwano/2d/transition/BoxTransition.h>
|
||||||
|
#include <kiwano/2d/transition/FadeTransition.h>
|
||||||
|
#include <kiwano/2d/transition/MoveTransition.h>
|
||||||
|
#include <kiwano/2d/transition/RotationTransition.h>
|
||||||
|
|
||||||
//
|
//
|
||||||
// animation
|
// animation
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <kiwano/core/Common.h>
|
#include <kiwano/core/Common.h>
|
||||||
#include <kiwano/base/Module.h>
|
#include <kiwano/base/Module.h>
|
||||||
#include <kiwano/core/Keys.h>
|
#include <kiwano/platform/Keys.h>
|
||||||
#include <kiwano/event/Event.h>
|
#include <kiwano/event/Event.h>
|
||||||
#include <kiwano/macros.h>
|
#include <kiwano/macros.h>
|
||||||
#include <kiwano/math/Math.h>
|
#include <kiwano/math/Math.h>
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <kiwano/core/Keys.h>
|
#include <kiwano/platform/Keys.h>
|
||||||
#include <kiwano/utils/Logger.h>
|
#include <kiwano/utils/Logger.h>
|
||||||
#include <kiwano/event/Events.h>
|
#include <kiwano/event/Events.h>
|
||||||
#include <kiwano/platform/Application.h>
|
#include <kiwano/platform/Application.h>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue