add TaskManager and ActionManager, expands time package

This commit is contained in:
Haibo 2018-11-14 16:39:24 +08:00 committed by Nomango
parent ccba1363a0
commit 32ecc0cbe8
35 changed files with 848 additions and 1040 deletions

View File

@ -24,12 +24,14 @@
namespace easy2d namespace easy2d
{ {
class ActionManager;
class Action class Action
: public RefCounter : public RefCounter
{ {
E2D_DISABLE_COPY(Action); E2D_DISABLE_COPY(Action);
friend class Node; friend class ActionManager;
friend class Loop; friend class Loop;
friend class Sequence; friend class Sequence;
friend class Spawn; friend class Spawn;
@ -51,12 +53,6 @@ namespace easy2d
// 停止动作 // 停止动作
inline void Stop() { done_ = true; } inline void Stop() { done_ = true; }
// 获取动作名称
inline const String& GetName() const { return name_; }
// 设置动作名称
inline void SetName(const String& name) { name_ = name; }
inline bool IsDone() const { return done_; } inline bool IsDone() const { return done_; }
// 获取动作的拷贝 // 获取动作的拷贝
@ -70,7 +66,6 @@ namespace easy2d
{ {
initialized_ = false; initialized_ = false;
done_ = false; done_ = false;
started_ = time::Now();
} }
protected: protected:
@ -80,13 +75,9 @@ namespace easy2d
this->Reset(); this->Reset();
} }
virtual void Init(Node* target) virtual void Init(Node* target) {}
{
initialized_ = true;
started_ = time::Now();
}
virtual void Update(Node* target) virtual void Update(Node* target, Duration const& dt)
{ {
if (!initialized_) if (!initialized_)
{ {
@ -94,13 +85,9 @@ namespace easy2d
} }
} }
virtual void ResetTime() {}
protected: protected:
String name_;
bool running_; bool running_;
bool done_; bool done_;
bool initialized_; bool initialized_;
TimePoint started_;
}; };
} }

View File

@ -75,9 +75,9 @@ namespace easy2d
} }
} }
void Loop::Update(Node* target) void Loop::Update(Node* target, Duration const& dt)
{ {
Action::Update(target); Action::Update(target, dt);
if (times_ == total_times_) if (times_ == total_times_)
{ {
@ -87,7 +87,7 @@ namespace easy2d
if (action_) if (action_)
{ {
action_->Update(target); action_->Update(target, dt);
if (action_->IsDone()) if (action_->IsDone())
{ {
@ -111,11 +111,6 @@ namespace easy2d
times_ = 0; times_ = 0;
} }
void Loop::ResetTime()
{
if (action_) action_->ResetTime();
}
//------------------------------------------------------- //-------------------------------------------------------
// Sequence // Sequence
@ -142,12 +137,12 @@ namespace easy2d
actions_[0]->Init(target); actions_[0]->Init(target);
} }
void Sequence::Update(Node* target) void Sequence::Update(Node* target, Duration const& dt)
{ {
Action::Update(target); Action::Update(target, dt);
auto &action = actions_[action_index_]; auto &action = actions_[action_index_];
action->Update(target); action->Update(target, dt);
if (action->IsDone()) if (action->IsDone())
{ {
@ -173,14 +168,6 @@ namespace easy2d
action_index_ = 0; action_index_ = 0;
} }
void Sequence::ResetTime()
{
for (const auto& action : actions_)
{
action->ResetTime();
}
}
void Sequence::Add(spAction const& action) void Sequence::Add(spAction const& action)
{ {
if (action) if (action)
@ -258,9 +245,9 @@ namespace easy2d
} }
} }
void Spawn::Update(Node* target) void Spawn::Update(Node* target, Duration const& dt)
{ {
Action::Update(target); Action::Update(target, dt);
size_t done_num = 0; size_t done_num = 0;
for (const auto& action : actions_) for (const auto& action : actions_)
@ -271,7 +258,7 @@ namespace easy2d
} }
else else
{ {
action->Update(target); action->Update(target, dt);
} }
} }
@ -290,14 +277,6 @@ namespace easy2d
} }
} }
void Spawn::ResetTime()
{
for (const auto& action : actions_)
{
action->ResetTime();
}
}
void Spawn::Add(spAction const& action) void Spawn::Add(spAction const& action)
{ {
if (action) if (action)

View File

@ -51,10 +51,7 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
// 重置动作时间
virtual void ResetTime() override;
protected: protected:
spAction action_; spAction action_;
@ -102,10 +99,7 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
// 重置动作时间
virtual void ResetTime() override;
protected: protected:
UINT action_index_; UINT action_index_;
@ -152,10 +146,7 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
// 重置动作时间
virtual void ResetTime() override;
protected: protected:
Actions actions_; Actions actions_;

View File

@ -29,16 +29,16 @@ namespace easy2d
// FiniteTimeAction // FiniteTimeAction
//------------------------------------------------------- //-------------------------------------------------------
FiniteTimeAction::FiniteTimeAction(float duration) FiniteTimeAction::FiniteTimeAction(Duration const& duration)
: delta_(0) : process_(0)
, duration_(std::max(duration, 0.f)) , duration_(duration)
{ {
} }
void FiniteTimeAction::Reset() void FiniteTimeAction::Reset()
{ {
Action::Reset(); Action::Reset();
delta_ = 0; process_ = 0;
} }
void FiniteTimeAction::Init(Node* target) void FiniteTimeAction::Init(Node* target)
@ -46,38 +46,33 @@ namespace easy2d
Action::Init(target); Action::Init(target);
} }
void FiniteTimeAction::Update(Node* target) void FiniteTimeAction::Update(Node* target, Duration const& dt)
{ {
Action::Update(target); Action::Update(target, dt);
if (duration_ == 0) if (duration_.IsZero())
{ {
delta_ = 1; process_ = 1.f;
this->Stop(); this->Stop();
} }
else else
{ {
delta_ = std::min((time::Now() - started_).Seconds() / duration_, 1.f); process_ += dt / duration_;
process_ = std::min(process_, 1.f);
if (delta_ >= 1) if (process_ >= 1)
{ {
this->Stop(); this->Stop();
} }
} }
} }
void FiniteTimeAction::ResetTime()
{
Action::ResetTime();
started_ = time::Now() - time::Second * (delta_ * duration_);
}
//------------------------------------------------------- //-------------------------------------------------------
// Move Action // Move Action
//------------------------------------------------------- //-------------------------------------------------------
MoveBy::MoveBy(float duration, Point vector) MoveBy::MoveBy(Duration const& duration, Point const& vector)
: FiniteTimeAction(duration) : FiniteTimeAction(duration)
{ {
delta_pos_ = vector; delta_pos_ = vector;
@ -93,9 +88,9 @@ namespace easy2d
} }
} }
void MoveBy::Update(Node* target) void MoveBy::Update(Node* target, Duration const& dt)
{ {
FiniteTimeAction::Update(target); FiniteTimeAction::Update(target, dt);
if (target) if (target)
{ {
@ -103,7 +98,7 @@ namespace easy2d
Point diff = currentPos - prev_pos_; Point diff = currentPos - prev_pos_;
start_pos_ = start_pos_ + diff; start_pos_ = start_pos_ + diff;
Point newPos = start_pos_ + (delta_pos_ * delta_); Point newPos = start_pos_ + (delta_pos_ * process_);
target->SetPosition(newPos); target->SetPosition(newPos);
prev_pos_ = newPos; prev_pos_ = newPos;
@ -120,7 +115,7 @@ namespace easy2d
return new (std::nothrow) MoveBy(duration_, -delta_pos_); return new (std::nothrow) MoveBy(duration_, -delta_pos_);
} }
MoveTo::MoveTo(float duration, Point pos) MoveTo::MoveTo(Duration const& duration, Point const& pos)
: MoveBy(duration, Point()) : MoveBy(duration, Point())
{ {
end_pos_ = pos; end_pos_ = pos;
@ -142,7 +137,7 @@ namespace easy2d
// Jump Action // Jump Action
//------------------------------------------------------- //-------------------------------------------------------
JumpBy::JumpBy(float duration, const Point & vec, float height, int jumps) JumpBy::JumpBy(Duration const& duration, Point const& vec, float height, int jumps)
: FiniteTimeAction(duration) : FiniteTimeAction(duration)
, delta_pos_(vec) , delta_pos_(vec)
, height_(height) , height_(height)
@ -170,16 +165,16 @@ namespace easy2d
} }
} }
void JumpBy::Update(Node* target) void JumpBy::Update(Node* target, Duration const& dt)
{ {
FiniteTimeAction::Update(target); FiniteTimeAction::Update(target, dt);
if (target) if (target)
{ {
float frac = fmod(delta_ * jumps_, 1.f); float frac = fmod(process_ * jumps_, 1.f);
float x = delta_pos_.x * delta_; float x = delta_pos_.x * process_;
float y = height_ * 4 * frac * (1 - frac); float y = height_ * 4 * frac * (1 - frac);
y += delta_pos_.y * delta_; y += delta_pos_.y * process_;
Point currentPos = target->GetPosition(); Point currentPos = target->GetPosition();
@ -193,7 +188,7 @@ namespace easy2d
} }
} }
JumpTo::JumpTo(float duration, const Point & pos, float height, int jumps) JumpTo::JumpTo(Duration const& duration, Point const& pos, float height, int jumps)
: JumpBy(duration, Point(), height, jumps) : JumpBy(duration, Point(), height, jumps)
, end_pos_(pos) , end_pos_(pos)
{ {
@ -215,14 +210,14 @@ namespace easy2d
// Scale Action // Scale Action
//------------------------------------------------------- //-------------------------------------------------------
ScaleBy::ScaleBy(float duration, float scale) ScaleBy::ScaleBy(Duration const& duration, float scale)
: FiniteTimeAction(duration) : FiniteTimeAction(duration)
{ {
delta_x_ = scale; delta_x_ = scale;
delta_y_ = scale; delta_y_ = scale;
} }
ScaleBy::ScaleBy(float duration, float scale_x, float scale_y) ScaleBy::ScaleBy(Duration const& duration, float scale_x, float scale_y)
: FiniteTimeAction(duration) : FiniteTimeAction(duration)
{ {
delta_x_ = scale_x; delta_x_ = scale_x;
@ -240,13 +235,13 @@ namespace easy2d
} }
} }
void ScaleBy::Update(Node* target) void ScaleBy::Update(Node* target, Duration const& dt)
{ {
FiniteTimeAction::Update(target); FiniteTimeAction::Update(target, dt);
if (target) if (target)
{ {
target->SetScale(start_scale_x_ + delta_x_ * delta_, start_scale_y_ + delta_y_ * delta_); target->SetScale(start_scale_x_ + delta_x_ * process_, start_scale_y_ + delta_y_ * process_);
} }
} }
@ -260,14 +255,14 @@ namespace easy2d
return new (std::nothrow) ScaleBy(duration_, -delta_x_, -delta_y_); return new (std::nothrow) ScaleBy(duration_, -delta_x_, -delta_y_);
} }
ScaleTo::ScaleTo(float duration, float scale) ScaleTo::ScaleTo(Duration const& duration, float scale)
: ScaleBy(duration, 0, 0) : ScaleBy(duration, 0, 0)
{ {
end_scale_x_ = scale; end_scale_x_ = scale;
end_scale_y_ = scale; end_scale_y_ = scale;
} }
ScaleTo::ScaleTo(float duration, float scale_x, float scale_y) ScaleTo::ScaleTo(Duration const& duration, float scale_x, float scale_y)
: ScaleBy(duration, 0, 0) : ScaleBy(duration, 0, 0)
{ {
end_scale_x_ = scale_x; end_scale_x_ = scale_x;
@ -291,7 +286,7 @@ namespace easy2d
// Opacity Action // Opacity Action
//------------------------------------------------------- //-------------------------------------------------------
OpacityBy::OpacityBy(float duration, float opacity) OpacityBy::OpacityBy(Duration const& duration, float opacity)
: FiniteTimeAction(duration) : FiniteTimeAction(duration)
{ {
delta_val_ = opacity; delta_val_ = opacity;
@ -307,13 +302,13 @@ namespace easy2d
} }
} }
void OpacityBy::Update(Node* target) void OpacityBy::Update(Node* target, Duration const& dt)
{ {
FiniteTimeAction::Update(target); FiniteTimeAction::Update(target, dt);
if (target) if (target)
{ {
target->SetOpacity(start_val_ + delta_val_ * delta_); target->SetOpacity(start_val_ + delta_val_ * process_);
} }
} }
@ -327,7 +322,7 @@ namespace easy2d
return new (std::nothrow) OpacityBy(duration_, -delta_val_); return new (std::nothrow) OpacityBy(duration_, -delta_val_);
} }
OpacityTo::OpacityTo(float duration, float opacity) OpacityTo::OpacityTo(Duration const& duration, float opacity)
: OpacityBy(duration, 0) : OpacityBy(duration, 0)
{ {
end_val_ = opacity; end_val_ = opacity;
@ -344,12 +339,12 @@ namespace easy2d
delta_val_ = end_val_ - start_val_; delta_val_ = end_val_ - start_val_;
} }
FadeIn::FadeIn(float duration) FadeIn::FadeIn(Duration const& duration)
: OpacityTo(duration, 1) : OpacityTo(duration, 1)
{ {
} }
FadeOut::FadeOut(float duration) FadeOut::FadeOut(Duration const& duration)
: OpacityTo(duration, 0) : OpacityTo(duration, 0)
{ {
} }
@ -359,7 +354,7 @@ namespace easy2d
// Rotate Action // Rotate Action
//------------------------------------------------------- //-------------------------------------------------------
RotateBy::RotateBy(float duration, float rotation) RotateBy::RotateBy(Duration const& duration, float rotation)
: FiniteTimeAction(duration) : FiniteTimeAction(duration)
{ {
delta_val_ = rotation; delta_val_ = rotation;
@ -375,13 +370,13 @@ namespace easy2d
} }
} }
void RotateBy::Update(Node* target) void RotateBy::Update(Node* target, Duration const& dt)
{ {
FiniteTimeAction::Update(target); FiniteTimeAction::Update(target, dt);
if (target) if (target)
{ {
target->SetRotation(start_val_ + delta_val_ * delta_); target->SetRotation(start_val_ + delta_val_ * process_);
} }
} }
@ -395,7 +390,7 @@ namespace easy2d
return new (std::nothrow) RotateBy(duration_, -delta_val_); return new (std::nothrow) RotateBy(duration_, -delta_val_);
} }
RotateTo::RotateTo(float duration, float rotation) RotateTo::RotateTo(Duration const& duration, float rotation)
: RotateBy(duration, 0) : RotateBy(duration, 0)
{ {
end_val_ = rotation; end_val_ = rotation;
@ -417,16 +412,16 @@ namespace easy2d
// Delay // Delay
//------------------------------------------------------- //-------------------------------------------------------
Delay::Delay(float duration) Delay::Delay(Duration const& duration)
: delta_(0) : delta_()
, delay_(std::max(duration, 0.f)) , delay_(duration)
{ {
} }
void Delay::Reset() void Delay::Reset()
{ {
Action::Reset(); Action::Reset();
delta_ = 0; delta_ = Duration{};
} }
void Delay::Init(Node* target) void Delay::Init(Node* target)
@ -434,11 +429,11 @@ namespace easy2d
Action::Init(target); Action::Init(target);
} }
void Delay::Update(Node* target) void Delay::Update(Node* target, Duration const& dt)
{ {
Action::Update(target); Action::Update(target, dt);
delta_ = (time::Now() - started_).Seconds(); delta_ += dt;
if (delta_ >= delay_) if (delta_ >= delay_)
{ {
@ -446,12 +441,6 @@ namespace easy2d
} }
} }
void Delay::ResetTime()
{
Action::ResetTime();
started_ = time::Now() - time::Second * delta_;
}
spAction Delay::Clone() const spAction Delay::Clone() const
{ {
return new (std::nothrow) Delay(delay_); return new (std::nothrow) Delay(delay_);

View File

@ -32,7 +32,7 @@ namespace easy2d
public: public:
// 创建特定时长的持续动作 // 创建特定时长的持续动作
explicit FiniteTimeAction( explicit FiniteTimeAction(
float duration Duration const& duration
); );
// 重置动作 // 重置动作
@ -43,14 +43,11 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
// 重置动作时间
virtual void ResetTime() override;
protected: protected:
float duration_; Duration duration_;
float delta_; float process_;
}; };
@ -62,8 +59,8 @@ namespace easy2d
public: public:
explicit MoveBy( explicit MoveBy(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
Point vector /* 移动距离 */ Point const& vector /* ÒÆ¶¯¾àÀë */
); );
// 获取该动作的拷贝对象 // 获取该动作的拷贝对象
@ -77,7 +74,7 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
protected: protected:
Point start_pos_; Point start_pos_;
@ -94,8 +91,8 @@ namespace easy2d
public: public:
explicit MoveTo( explicit MoveTo(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
Point pos /* 目的坐标 */ Point const& pos /* Ä¿µÄ×ø±ê */
); );
// 获取该动作的拷贝对象 // 获取该动作的拷贝对象
@ -125,8 +122,8 @@ namespace easy2d
public: public:
explicit JumpBy( explicit JumpBy(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
const Point& vec, /* 跳跃距离 */ Point const& vec, /* ÌøÔ¾¾àÀë */
float height, /* 跳跃高度 */ float height, /* 跳跃高度 */
int jumps = 1 /* 跳跃次数 */ int jumps = 1 /* 跳跃次数 */
); );
@ -142,7 +139,7 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
protected: protected:
Point start_pos_; Point start_pos_;
@ -161,8 +158,8 @@ namespace easy2d
public: public:
explicit JumpTo( explicit JumpTo(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
const Point& pos, /* 目的坐标 */ Point const& pos, /* Ä¿µÄ×ø±ê */
float height, /* 跳跃高度 */ float height, /* 跳跃高度 */
int jumps = 1 /* 跳跃次数 */ int jumps = 1 /* 跳跃次数 */
); );
@ -194,12 +191,12 @@ namespace easy2d
public: public:
explicit ScaleBy( explicit ScaleBy(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
float scale /* 相对变化值 */ float scale /* 相对变化值 */
); );
explicit ScaleBy( explicit ScaleBy(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
float scale_x, /* 横向缩放相对变化值 */ float scale_x, /* 横向缩放相对变化值 */
float scale_y /* 纵向缩放相对变化值 */ float scale_y /* 纵向缩放相对变化值 */
); );
@ -215,7 +212,7 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
protected: protected:
float start_scale_x_; float start_scale_x_;
@ -233,12 +230,12 @@ namespace easy2d
public: public:
explicit ScaleTo( explicit ScaleTo(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
float scale /* 目标值 */ float scale /* 目标值 */
); );
explicit ScaleTo( explicit ScaleTo(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
float scale_x, /* 横向缩放目标值 */ float scale_x, /* 横向缩放目标值 */
float scale_y /* 纵向缩放目标值 */ float scale_y /* 纵向缩放目标值 */
); );
@ -271,7 +268,7 @@ namespace easy2d
public: public:
explicit OpacityBy( explicit OpacityBy(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
float opacity /* 相对变化值 */ float opacity /* 相对变化值 */
); );
@ -286,7 +283,7 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
protected: protected:
float start_val_; float start_val_;
@ -302,7 +299,7 @@ namespace easy2d
public: public:
explicit OpacityTo( explicit OpacityTo(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
float opacity /* 目标值 */ float opacity /* 目标值 */
); );
@ -334,7 +331,7 @@ namespace easy2d
public: public:
// 创建淡入动作 // 创建淡入动作
explicit FadeIn( explicit FadeIn(
float duration /* 持续时长 */ Duration const& duration /* ³ÖÐøÊ±³¤ */
); );
}; };
@ -348,7 +345,7 @@ namespace easy2d
public: public:
// 创建淡出动作 // 创建淡出动作
explicit FadeOut( explicit FadeOut(
float duration /* 持续时长 */ Duration const& duration /* ³ÖÐøÊ±³¤ */
); );
}; };
@ -361,7 +358,7 @@ namespace easy2d
public: public:
explicit RotateBy( explicit RotateBy(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
float rotation /* 相对变化值 */ float rotation /* 相对变化值 */
); );
@ -376,7 +373,7 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
protected: protected:
float start_val_; float start_val_;
@ -392,7 +389,7 @@ namespace easy2d
public: public:
explicit RotateTo( explicit RotateTo(
float duration, /* 持续时长 */ Duration const& duration, /* ³ÖÐøÊ±³¤ */
float rotation /* 目标值 */ float rotation /* 目标值 */
); );
@ -423,7 +420,7 @@ namespace easy2d
public: public:
explicit Delay( explicit Delay(
float duration /* 延迟时长(秒) */ Duration const& duration /* ÑÓ³Ùʱ³¤£¨Ã룩 */
); );
// 获取该动作的拷贝对象 // 获取该动作的拷贝对象
@ -440,13 +437,10 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
// 重置动作时间
virtual void ResetTime() override;
protected: protected:
float delay_; Duration delay_;
float delta_; Duration delta_;
}; };
} }

109
core/base/ActionManager.cpp Normal file
View File

@ -0,0 +1,109 @@
// Copyright (c) 2016-2018 Easy2D - 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 "ActionManager.h"
namespace easy2d
{
void ActionManager::UpdateActions(Node* target, Duration const& dt)
{
if (actions_.empty())
return;
std::vector<spAction> currActions;
currActions.reserve(actions_.size());
std::copy_if(
actions_.begin(),
actions_.end(),
std::back_inserter(currActions),
[](spAction action) { return action->IsRunning() && !action->IsDone(); }
);
// 遍历所有正在运行的动作
for (const auto& action : currActions)
action->Update(target, dt);
// 清除完成的动作
for (auto iter = actions_.begin(); iter != actions_.end();)
{
if ((*iter)->IsDone())
{
iter = actions_.erase(iter);
}
else
{
++iter;
}
}
}
void ActionManager::RunAction(spAction const& action)
{
E2D_WARNING_IF(!action, "Action NULL pointer exception!");
if (action)
{
auto iter = std::find(actions_.begin(), actions_.end(), action);
if (iter == actions_.end())
{
action->Start();
actions_.push_back(action);
}
}
}
void ActionManager::ResumeAllActions()
{
if (actions_.empty())
return;
for (const auto& action : actions_)
{
action->Resume();
}
}
void ActionManager::PauseAllActions()
{
if (actions_.empty())
return;
for (const auto& action : actions_)
{
action->Pause();
}
}
void ActionManager::StopAllActions()
{
if (actions_.empty())
return;
for (const auto& action : actions_)
{
action->Stop();
}
}
const Actions& ActionManager::GetAllActions() const
{
return actions_;
}
}

View File

@ -19,33 +19,34 @@
// THE SOFTWARE. // THE SOFTWARE.
#pragma once #pragma once
#include "../base/BaseTypes.h" #include "Action.hpp"
#include "../base/Size.h"
#include "Matrix.hpp"
namespace easy2d namespace easy2d
{ {
namespace math class ActionManager
{
class Transform
{ {
public: public:
Point position; // 坐标 // 执行动作
Size size; // 大小 void RunAction(
float scale_x; // 横向缩放 spAction const& action
float scale_y; // 纵向缩放 );
float rotation; // 旋转
float skew_x; // 横向倾斜角度
float skew_y; // 纵向倾斜角度
float pivot_x; // 支点横坐标
float pivot_y; // 支点纵坐标
public: // 继续所有暂停动作
Transform(); void ResumeAllActions();
Matrix ToMatrix() const; // 暂停所有动作
void PauseAllActions();
bool operator== (const Transform& other) const; // 停止所有动作
void StopAllActions();
// 获取所有动作
const Actions& GetAllActions() const;
protected:
void UpdateActions(Node* target, Duration const& dt);
protected:
Actions actions_;
}; };
} }
}

View File

@ -19,6 +19,7 @@
// THE SOFTWARE. // THE SOFTWARE.
#include "Animation.h" #include "Animation.h"
#include "Image.h"
#include "Sprite.h" #include "Sprite.h"
namespace easy2d namespace easy2d
@ -70,9 +71,9 @@ namespace easy2d
} }
} }
void Animate::Update(Node* target) void Animate::Update(Node* target, Duration const& dt)
{ {
Action::Update(target); Action::Update(target, dt);
if (!animation_) if (!animation_)
{ {
@ -80,7 +81,8 @@ namespace easy2d
return; return;
} }
while ((time::Now() - started_).Seconds() >= animation_->GetInterval()) delta_ += dt;
while (delta_ >= animation_->GetInterval())
{ {
auto& frames = animation_->GetFrames(); auto& frames = animation_->GetFrames();
auto sprite_target = dynamic_cast<Sprite*>(target); auto sprite_target = dynamic_cast<Sprite*>(target);
@ -90,7 +92,7 @@ namespace easy2d
sprite_target->Load(frames[frame_index_]); sprite_target->Load(frames[frame_index_]);
} }
started_ += time::Second * animation_->GetInterval(); delta_ -= animation_->GetInterval();
++frame_index_; ++frame_index_;
if (frame_index_ == frames.size()) if (frame_index_ == frames.size())
@ -101,11 +103,6 @@ namespace easy2d
} }
} }
void Animate::ResetTime()
{
Action::ResetTime();
}
void Animate::Reset() void Animate::Reset()
{ {
Action::Reset(); Action::Reset();
@ -150,12 +147,12 @@ namespace easy2d
this->Add(frames); this->Add(frames);
} }
Animation::Animation(float interval) Animation::Animation(Duration const& interval)
: interval_(interval) : interval_(interval)
{ {
} }
Animation::Animation(float interval, const Images& frames) Animation::Animation(Duration const& interval, const Images& frames)
: interval_(interval) : interval_(interval)
{ {
this->Add(frames); this->Add(frames);
@ -165,9 +162,9 @@ namespace easy2d
{ {
} }
void Animation::SetInterval(float interval) void Animation::SetInterval(Duration const& interval)
{ {
interval_ = std::max(interval, 0.f); interval_ = interval;
} }
void Animation::Add(spImage const& frame) void Animation::Add(spImage const& frame)
@ -187,7 +184,7 @@ namespace easy2d
} }
} }
float Animation::GetInterval() const Duration const& Animation::GetInterval() const
{ {
return interval_; return interval_;
} }

View File

@ -20,7 +20,6 @@
#pragma once #pragma once
#include "Action.hpp" #include "Action.hpp"
#include "Image.h"
namespace easy2d namespace easy2d
{ {
@ -38,11 +37,11 @@ namespace easy2d
); );
explicit Animation( explicit Animation(
float interval /* 帧间隔(秒) */ Duration const& interval /* Ö¡¼ä¸ô£¨Ã룩 */
); );
explicit Animation( explicit Animation(
float interval, /* 帧间隔(秒) */ Duration const& interval, /* Ö¡¼ä¸ô£¨Ã룩 */
const Images& frames /* 关键帧数组 */ const Images& frames /* 关键帧数组 */
); );
@ -59,14 +58,14 @@ namespace easy2d
); );
// 获取帧间隔 // 获取帧间隔
float GetInterval() const; Duration const& GetInterval() const;
// 获取关键帧 // 获取关键帧
const Images& GetFrames() const; const Images& GetFrames() const;
// 设置每一帧的时间间隔 // 设置每一帧的时间间隔
void SetInterval( void SetInterval(
float interval /* 帧间隔(秒) */ Duration const& interval /* Ö¡¼ä¸ô£¨Ã룩 */
); );
// 获取帧动画的拷贝对象 // 获取帧动画的拷贝对象
@ -76,7 +75,7 @@ namespace easy2d
spAnimation Reverse() const; spAnimation Reverse() const;
protected: protected:
float interval_; Duration interval_;
Images frames_; Images frames_;
}; };
@ -118,13 +117,11 @@ namespace easy2d
virtual void Init(Node* target) override; virtual void Init(Node* target) override;
// 更新动作 // 更新动作
virtual void Update(Node* target) override; virtual void Update(Node* target, Duration const& dt) override;
// 重置动作时间
virtual void ResetTime() override;
protected: protected:
UINT frame_index_; size_t frame_index_;
Duration delta_;
spAnimation animation_; spAnimation animation_;
}; };
} }

View File

@ -41,7 +41,7 @@ namespace easy2d
{ {
} }
void CallFunc::Update(Node*) void CallFunc::Update(Node*, Duration const&)
{ {
callback_(); callback_();
this->Stop(); this->Stop();

View File

@ -48,7 +48,7 @@ namespace easy2d
virtual void Init(Node*) override; virtual void Init(Node*) override;
// 更新动作 // 更新动作
virtual void Update(Node*) override; virtual void Update(Node*, Duration const&) override;
protected: protected:
Callback callback_; Callback callback_;

View File

@ -19,17 +19,15 @@
// THE SOFTWARE. // THE SOFTWARE.
#include "Game.h" #include "Game.h"
#include "Node.h"
#include "Scene.h" #include "Scene.h"
#include "Transition.h" #include "Transition.h"
#include "Image.h" #include "Image.h"
#include "time.h" #include "../utils/Player.h"
#include "../math/Matrix.hpp"
#include "render.h" #include "render.h"
#include "input.h" #include "input.h"
#include "audio.h" #include "audio.h"
#include "modules.h" #include "modules.h"
#include "../utils/Player.h"
#include "../math/Matrix.hpp"
#include <thread> #include <thread>
namespace easy2d namespace easy2d
@ -131,7 +129,7 @@ namespace easy2d
if (dur.Milliseconds() > min_interval) if (dur.Milliseconds() > min_interval)
{ {
float dt = (now - last).Seconds(); const auto dt = now - last;
last = now; last = now;
devices::Input::Instance().Update( devices::Input::Instance().Update(
@ -168,17 +166,26 @@ namespace easy2d
quit_ = true; quit_ = true;
} }
void Game::EnterScene(spScene const& scene, spTransition const& transition) bool Game::EnterScene(spScene const & scene)
{ {
if (!scene) if (!scene)
{ {
E2D_WARNING("Next scene is null pointer!"); E2D_WARNING("Next scene is null pointer!");
return; return false;
} }
if (curr_scene_ == scene) { return; } if (curr_scene_ == scene ||
next_scene_ == scene)
return false;
next_scene_ = scene; next_scene_ = scene;
return true;
}
bool Game::EnterScene(spScene const& scene, spTransition const& transition)
{
if (!EnterScene(scene))
return false;
if (transition) if (transition)
{ {
@ -189,6 +196,7 @@ namespace easy2d
transition_ = transition; transition_ = transition;
transition_->Init(curr_scene_, next_scene_); transition_->Init(curr_scene_, next_scene_);
} }
return true;
} }
spScene const& Game::GetCurrentScene() spScene const& Game::GetCurrentScene()
@ -196,32 +204,21 @@ namespace easy2d
return curr_scene_; return curr_scene_;
} }
bool Game::IsTransitioning() const void Game::UpdateScene(Duration const& dt)
{ {
return transition_; if (curr_scene_)
{
curr_scene_->Update(dt);
} }
void Game::UpdateScene(float dt) if (next_scene_)
{ {
auto update = [&](spScene const& scene) -> void next_scene_->Update(dt);
{
if (scene)
{
scene->OnUpdate(dt);
spNode const& root = scene->GetRoot();
if (root)
{
root->UpdateChildren(dt);
} }
}
};
update(curr_scene_);
update(next_scene_);
if (transition_) if (transition_)
{ {
transition_->Update(); transition_->Update(dt);
if (transition_->IsDone()) if (transition_->IsDone())
{ {
@ -247,6 +244,24 @@ namespace easy2d
} }
} }
void Game::Dispatch(MouseEvent const & e)
{
if (transition_)
return;
if (curr_scene_)
curr_scene_->Dispatch(e, false);
}
void Game::Dispatch(KeyEvent const & e)
{
if (transition_)
return;
if (curr_scene_)
curr_scene_->Dispatch(e, false);
}
void Game::DrawScene() void Game::DrawScene()
{ {
auto& graphics = devices::Graphics::Instance(); auto& graphics = devices::Graphics::Instance();
@ -258,22 +273,22 @@ namespace easy2d
} }
else if (curr_scene_) else if (curr_scene_)
{ {
curr_scene_->Draw(); curr_scene_->Visit();
} }
if (debug_enabled_) if (debug_enabled_)
{ {
if (curr_scene_ && curr_scene_->GetRoot()) if (curr_scene_)
{ {
graphics.SetTransform(math::Matrix()); graphics.SetTransform(math::Matrix());
graphics.SetBrushOpacity(1.f); graphics.SetBrushOpacity(1.f);
curr_scene_->GetRoot()->DrawBorder(); curr_scene_->DrawBorder();
} }
if (next_scene_ && next_scene_->GetRoot()) if (next_scene_)
{ {
graphics.SetTransform(math::Matrix()); graphics.SetTransform(math::Matrix());
graphics.SetBrushOpacity(1.f); graphics.SetBrushOpacity(1.f);
next_scene_->GetRoot()->DrawBorder(); next_scene_->DrawBorder();
} }
graphics.DrawDebugInfo(); graphics.DrawDebugInfo();

View File

@ -21,8 +21,9 @@
#pragma once #pragma once
#include "base.h" #include "base.h"
#include "window.h" #include "window.h"
#include "Scene.h" #include "time.h"
#include "Transition.h" #include "KeyEvent.h"
#include "MouseEvent.h"
namespace easy2d namespace easy2d
{ {
@ -76,20 +77,31 @@ namespace easy2d
void Quit(); void Quit();
// Çл»³¡¾° // Çл»³¡¾°
void EnterScene( bool EnterScene(
spScene const& scene /* 场景 */
);
// 切换场景
bool EnterScene(
spScene const& scene, /* ³¡¾° */ spScene const& scene, /* ³¡¾° */
spTransition const& transition = nullptr /* 场景动画 */ spTransition const& transition /* 场景动画 */
); );
// »ñÈ¡µ±Ç°³¡¾° // »ñÈ¡µ±Ç°³¡¾°
spScene const& GetCurrentScene(); spScene const& GetCurrentScene();
bool IsTransitioning() const;
void DrawScene(); void DrawScene();
void UpdateScene( void UpdateScene(
float dt Duration const& dt
);
void Dispatch(
MouseEvent const& e
);
void Dispatch(
KeyEvent const& e
); );
private: private:

View File

@ -22,7 +22,6 @@
#include "Scene.h" #include "Scene.h"
#include "Task.h" #include "Task.h"
#include "Action.hpp" #include "Action.hpp"
#include "time.h"
#include "render.h" #include "render.h"
#include <iterator> #include <iterator>
@ -41,8 +40,6 @@ namespace easy2d
, display_opacity_(1.f) , display_opacity_(1.f)
, real_opacity_(1.f) , real_opacity_(1.f)
, children_() , children_()
, actions_()
, tasks_()
, initial_matrix_() , initial_matrix_()
, final_matrix_() , final_matrix_()
, border_color_(Color::Red, 0.6f) , border_color_(Color::Red, 0.6f)
@ -112,13 +109,13 @@ namespace easy2d
} }
} }
void Node::UpdateChildren(float dt) void Node::Update(Duration const& dt)
{ {
if (children_.empty()) if (children_.empty())
{ {
OnUpdate(dt); OnUpdate(dt);
UpdateActions(); UpdateActions(this, dt);
UpdateTasks(); UpdateTasks(dt);
UpdateTransform(); UpdateTransform();
} }
else else
@ -130,7 +127,7 @@ namespace easy2d
// 访问 Order 小于零的节点 // 访问 Order 小于零的节点
if (child->GetOrder() < 0) if (child->GetOrder() < 0)
{ {
child->UpdateChildren(dt); child->Update(dt);
} }
else else
{ {
@ -139,13 +136,13 @@ namespace easy2d
} }
OnUpdate(dt); OnUpdate(dt);
UpdateActions(); UpdateActions(this, dt);
UpdateTasks(); UpdateTasks(dt);
UpdateTransform(); UpdateTransform();
// 访问剩余节点 // 访问剩余节点
for (; i < children_.size(); ++i) for (; i < children_.size(); ++i)
children_[i]->UpdateChildren(dt); children_[i]->Update(dt);
} }
} }
@ -176,8 +173,8 @@ namespace easy2d
// 根据自身支点计算 Initial 矩阵,子节点将根据这个矩阵进行变换 // 根据自身支点计算 Initial 矩阵,子节点将根据这个矩阵进行变换
auto pivot = Point( auto pivot = Point(
transform_.size.width * transform_.pivot_x, transform_.size.width * transform_.pivot.x,
transform_.size.height * transform_.pivot_y transform_.size.height * transform_.pivot.y
); );
initial_matrix_ = final_matrix_ * math::Matrix::Translation(pivot); initial_matrix_ = final_matrix_ * math::Matrix::Translation(pivot);
@ -243,38 +240,6 @@ namespace easy2d
} }
} }
void Node::UpdateActions()
{
if (actions_.empty())
return;
std::vector<spAction> currActions;
currActions.reserve(actions_.size());
std::copy_if(
actions_.begin(),
actions_.end(),
std::back_inserter(currActions),
[](spAction action) { return action->IsRunning() && !action->IsDone(); }
);
// 遍历所有正在运行的动作
for (const auto& action : currActions)
action->Update(this);
// 清除完成的动作
for (auto iter = actions_.begin(); iter != actions_.end();)
{
if ((*iter)->IsDone())
{
iter = actions_.erase(iter);
}
else
{
++iter;
}
}
}
bool Node::IsVisible() const bool Node::IsVisible() const
{ {
return visible_; return visible_;
@ -297,12 +262,12 @@ namespace easy2d
float Node::GetWidth() const float Node::GetWidth() const
{ {
return transform_.size.width * transform_.scale_x; return transform_.size.width * transform_.scale.x;
} }
float Node::GetHeight() const float Node::GetHeight() const
{ {
return transform_.size.height * transform_.scale_y; return transform_.size.height * transform_.scale.y;
} }
float Node::GetRealWidth() const float Node::GetRealWidth() const
@ -322,12 +287,12 @@ namespace easy2d
float Node::GetPivotX() const float Node::GetPivotX() const
{ {
return transform_.pivot_x; return transform_.pivot.x;
} }
float Node::GetPivotY() const float Node::GetPivotY() const
{ {
return transform_.pivot_y; return transform_.pivot.y;
} }
Size Node::GetSize() const Size Node::GetSize() const
@ -337,22 +302,22 @@ namespace easy2d
float Node::GetScaleX() const float Node::GetScaleX() const
{ {
return transform_.scale_x; return transform_.scale.x;
} }
float Node::GetScaleY() const float Node::GetScaleY() const
{ {
return transform_.scale_y; return transform_.scale.y;
} }
float Node::GetSkewX() const float Node::GetSkewX() const
{ {
return transform_.skew_x; return transform_.skew.x;
} }
float Node::GetSkewY() const float Node::GetSkewY() const
{ {
return transform_.skew_y; return transform_.skew.y;
} }
float Node::GetRotation() const float Node::GetRotation() const
@ -360,11 +325,6 @@ namespace easy2d
return transform_.rotation; return transform_.rotation;
} }
const math::Transform & Node::GetTransform() const
{
return transform_;
}
float Node::GetOpacity() const float Node::GetOpacity() const
{ {
return real_opacity_; return real_opacity_;
@ -429,12 +389,12 @@ namespace easy2d
void Node::SetScaleX(float scale_x) void Node::SetScaleX(float scale_x)
{ {
this->SetScale(scale_x, transform_.scale_y); this->SetScale(scale_x, transform_.scale.y);
} }
void Node::SetScaleY(float scale_y) void Node::SetScaleY(float scale_y)
{ {
this->SetScale(transform_.scale_x, scale_y); this->SetScale(transform_.scale.x, scale_y);
} }
void Node::SetScale(float scale) void Node::SetScale(float scale)
@ -444,31 +404,31 @@ namespace easy2d
void Node::SetScale(float scale_x, float scale_y) void Node::SetScale(float scale_x, float scale_y)
{ {
if (transform_.scale_x == scale_x && transform_.scale_y == scale_y) if (transform_.scale.x == scale_x && transform_.scale.y == scale_y)
return; return;
transform_.scale_x = scale_x; transform_.scale.x = scale_x;
transform_.scale_y = scale_y; transform_.scale.y = scale_y;
dirty_transform_ = true; dirty_transform_ = true;
} }
void Node::SetSkewX(float skew_x) void Node::SetSkewX(float skew_x)
{ {
this->SetSkew(skew_x, transform_.skew_y); this->SetSkew(skew_x, transform_.skew.y);
} }
void Node::SetSkewY(float skew_y) void Node::SetSkewY(float skew_y)
{ {
this->SetSkew(transform_.skew_x, skew_y); this->SetSkew(transform_.skew.x, skew_y);
} }
void Node::SetSkew(float skew_x, float skew_y) void Node::SetSkew(float skew_x, float skew_y)
{ {
if (transform_.skew_x == skew_x && transform_.skew_y == skew_y) if (transform_.skew.x == skew_x && transform_.skew.y == skew_y)
return; return;
transform_.skew_x = skew_x; transform_.skew.x = skew_x;
transform_.skew_y = skew_y; transform_.skew.y = skew_y;
dirty_transform_ = true; dirty_transform_ = true;
} }
@ -493,21 +453,21 @@ namespace easy2d
void Node::SetPivotX(float pivot_x) void Node::SetPivotX(float pivot_x)
{ {
this->SetPivot(pivot_x, transform_.pivot_y); this->SetPivot(pivot_x, transform_.pivot.y);
} }
void Node::SetPivotY(float pivot_y) void Node::SetPivotY(float pivot_y)
{ {
this->SetPivot(transform_.pivot_x, pivot_y); this->SetPivot(transform_.pivot.x, pivot_y);
} }
void Node::SetPivot(float pivot_x, float pivot_y) void Node::SetPivot(float pivot_x, float pivot_y)
{ {
if (transform_.pivot_x == pivot_x && transform_.pivot_y == pivot_y) if (transform_.pivot.x == pivot_x && transform_.pivot.y == pivot_y)
return; return;
transform_.pivot_x = pivot_x; transform_.pivot.x = pivot_x;
transform_.pivot_y = pivot_y; transform_.pivot.y = pivot_y;
dirty_transform_ = true; dirty_transform_ = true;
} }
@ -536,7 +496,12 @@ namespace easy2d
this->SetSize(size.width, size.height); this->SetSize(size.width, size.height);
} }
void Node::SetTransform(const math::Transform & transform) math::Transform const& Node::GetTransform() const
{
return transform_;
}
void Node::SetTransform(math::Transform const& transform)
{ {
transform_ = transform; transform_ = transform;
dirty_transform_ = true; dirty_transform_ = true;
@ -695,63 +660,6 @@ namespace easy2d
children_.clear(); children_.clear();
} }
void Node::RunAction(spAction const& action)
{
E2D_WARNING_IF(!action, "Action NULL pointer exception!");
if (action)
{
auto iter = std::find(actions_.begin(), actions_.end(), action);
if (iter == actions_.end())
{
action->Start();
actions_.push_back(action);
}
}
}
void Node::ResumeAction(const String& name)
{
if (actions_.empty())
return;
for (const auto& action : actions_)
{
if (action->GetName() == name)
{
action->Resume();
}
}
}
void Node::PauseAction(const String& name)
{
if (actions_.empty())
return;
for (const auto& action : actions_)
{
if (action->GetName() == name)
{
action->Pause();
}
}
}
void Node::StopAction(const String& name)
{
if (actions_.empty())
return;
for (const auto& action : actions_)
{
if (action->GetName() == name)
{
action->Stop();
}
}
}
bool Node::ContainsPoint(const Point& point) bool Node::ContainsPoint(const Point& point)
{ {
if (transform_.size.width == 0.f || transform_.size.height == 0.f) if (transform_.size.width == 0.f || transform_.size.height == 0.f)
@ -792,169 +700,6 @@ namespace easy2d
relation != D2D1_GEOMETRY_RELATION_DISJOINT; relation != D2D1_GEOMETRY_RELATION_DISJOINT;
} }
void Node::ResumeAllActions()
{
if (actions_.empty())
return;
for (const auto& action : actions_)
{
action->Resume();
}
}
void Node::PauseAllActions()
{
if (actions_.empty())
return;
for (const auto& action : actions_)
{
action->Pause();
}
}
void Node::StopAllActions()
{
if (actions_.empty())
return;
for (const auto& action : actions_)
{
action->Stop();
}
}
const Actions& Node::GetAllActions() const
{
return actions_;
}
void Node::AddTask(spTask const& task)
{
if (task)
{
auto iter = std::find(tasks_.begin(), tasks_.end(), task);
if (iter == tasks_.end())
{
task->last_time_ = time::Now();
tasks_.push_back(task);
}
}
}
void Node::StopTasks(const String& name)
{
for (const auto& task : tasks_)
{
if (task->GetName() == name)
{
task->Stop();
}
}
}
void Node::StartTasks(const String& name)
{
for (const auto& task : tasks_)
{
if (task->GetName() == name)
{
task->Start();
}
}
}
void Node::RemoveTasks(const String& name)
{
for (const auto& task : tasks_)
{
if (task->GetName() == name)
{
task->stopped_ = true;
}
}
}
void Node::StopAllTasks()
{
for (const auto& task : tasks_)
{
task->Stop();
}
}
void Node::StartAllTasks()
{
for (const auto& task : tasks_)
{
task->Start();
}
}
void Node::RemoveAllTasks()
{
for (const auto& task : tasks_)
{
task->stopped_ = true;
}
}
const Tasks & Node::GetAllTasks() const
{
return tasks_;
}
void Node::UpdateTasks()
{
if (tasks_.empty())
return;
std::vector<spTask> currTasks;
currTasks.reserve(tasks_.size());
std::copy_if(
tasks_.begin(),
tasks_.end(),
std::back_inserter(currTasks),
[](spTask const& task) { return task->IsReady() && !task->stopped_; }
);
// 遍历就绪的任务
for (const auto& task : currTasks)
task->Update();
// 清除结束的任务
for (auto iter = tasks_.begin(); iter != tasks_.end();)
{
if ((*iter)->stopped_)
{
iter = tasks_.erase(iter);
}
else
{
++iter;
}
}
}
void Node::UpdateTime()
{
for (const auto& action : actions_)
{
action->ResetTime();
}
for (const auto& task : tasks_)
{
task->ResetTime();
}
for (const auto& child : children_)
{
child->UpdateTime();
}
}
void Node::SetVisible(bool val) void Node::SetVisible(bool val)
{ {
visible_ = val; visible_ = val;

View File

@ -20,24 +20,27 @@
#pragma once #pragma once
#include "base.h" #include "base.h"
#include "time.h"
#include "ActionManager.h"
#include "TaskManager.h"
#include "KeyEvent.h" #include "KeyEvent.h"
#include "MouseEvent.h" #include "MouseEvent.h"
#include "../math/Transform.h" #include "../math/Transform.hpp"
#include "../math/Matrix.hpp" #include "../math/Matrix.hpp"
namespace easy2d namespace easy2d
{ {
class Game; class Game;
class Scene;
class Action;
class Task;
// 节点 // 节点
class Node class Node
: public RefCounter : public RefCounter
, public ActionManager
, public TaskManager
{ {
friend class Game; friend class Game;
friend class Scene; friend class Scene;
friend class Transition;
E2D_DISABLE_COPY(Node); E2D_DISABLE_COPY(Node);
@ -50,7 +53,7 @@ namespace easy2d
virtual void OnDraw() const {} virtual void OnDraw() const {}
// 更新节点 // 更新节点
virtual void OnUpdate(float dt) {} virtual void OnUpdate(Duration const& dt) {}
// 获取节点显示状态 // 获取节点显示状态
bool IsVisible() const; bool IsVisible() const;
@ -106,9 +109,6 @@ namespace easy2d
// 获取节点旋转角度 // 获取节点旋转角度
float GetRotation() const; float GetRotation() const;
// 获取二维转换矩阵
const math::Transform& GetTransform() const;
// 获取节点透明度 // 获取节点透明度
float GetOpacity() const; float GetOpacity() const;
@ -129,108 +129,108 @@ namespace easy2d
); );
// 设置节点横坐标 // 设置节点横坐标
virtual void SetPositionX( void SetPositionX(
float x float x
); );
// 设置节点纵坐标 // 设置节点纵坐标
virtual void SetPositionY( void SetPositionY(
float y float y
); );
// 设置节点坐标 // 设置节点坐标
virtual void SetPosition( void SetPosition(
const Point & point const Point & point
); );
// 设置节点坐标 // 设置节点坐标
virtual void SetPosition( void SetPosition(
float x, float x,
float y float y
); );
// 移动节点 // 移动节点
virtual void MoveBy( void MoveBy(
float x, float x,
float y float y
); );
// 移动节点 // 移动节点
virtual void MoveBy( void MoveBy(
const Point & vector const Point & vector
); );
// 设置节点绘图顺序 // 设置节点绘图顺序
// 默认为 0 // 默认为 0
virtual void SetOrder( void SetOrder(
int order int order
); );
// 设置横向缩放比例 // 设置横向缩放比例
// 默认为 1.0 // 默认为 1.0
virtual void SetScaleX( void SetScaleX(
float scale_x float scale_x
); );
// 设置纵向缩放比例 // 设置纵向缩放比例
// 默认为 1.0 // 默认为 1.0
virtual void SetScaleY( void SetScaleY(
float scale_y float scale_y
); );
// 设置缩放比例 // 设置缩放比例
// 默认为 (1.0, 1.0) // 默认为 (1.0, 1.0)
virtual void SetScale( void SetScale(
float scale_x, float scale_x,
float scale_y float scale_y
); );
// 设置缩放比例 // 设置缩放比例
// 默认为 1.0 // 默认为 1.0
virtual void SetScale( void SetScale(
float scale float scale
); );
// 设置横向倾斜角度 // 设置横向倾斜角度
// 默认为 0 // 默认为 0
virtual void SetSkewX( void SetSkewX(
float skew_x float skew_x
); );
// 设置纵向倾斜角度 // 设置纵向倾斜角度
// 默认为 0 // 默认为 0
virtual void SetSkewY( void SetSkewY(
float skew_y float skew_y
); );
// 设置倾斜角度 // 设置倾斜角度
// 默认为 (0, 0) // 默认为 (0, 0)
virtual void SetSkew( void SetSkew(
float skew_x, float skew_x,
float skew_y float skew_y
); );
// 设置旋转角度 // 设置旋转角度
// 默认为 0 // 默认为 0
virtual void SetRotation( void SetRotation(
float rotation float rotation
); );
// 设置透明度 // 设置透明度
// 默认为 1.0, 范围 [0, 1] // 默认为 1.0, 范围 [0, 1]
virtual void SetOpacity( void SetOpacity(
float opacity float opacity
); );
// 设置支点的横向位置 // 设置支点的横向位置
// 默认为 0, 范围 [0, 1] // 默认为 0, 范围 [0, 1]
virtual void SetPivotX( void SetPivotX(
float pivot_x float pivot_x
); );
// 设置支点的纵向位置 // 设置支点的纵向位置
// 默认为 0, 范围 [0, 1] // 默认为 0, 范围 [0, 1]
virtual void SetPivotY( void SetPivotY(
float pivot_y float pivot_y
); );
@ -247,36 +247,37 @@ namespace easy2d
); );
// 修改节点高度 // 修改节点高度
virtual void SetHeight( void SetHeight(
float height float height
); );
// 修改节点大小 // 修改节点大小
virtual void SetSize( void SetSize(
float width, float width,
float height float height
); );
// 修改节点大小 // 修改节点大小
virtual void SetSize( void SetSize(
const Size & size const Size & size
); );
// 设置二维转换
virtual void SetTransform(
const math::Transform& transform
);
// 启用或关闭渲染区域裁剪 // 启用或关闭渲染区域裁剪
virtual void SetClipEnabled( void SetClipEnabled(
bool enabled bool enabled
); );
// 设置节点边缘颜色 // 设置节点边缘颜色
virtual void SetBorderColor( void SetBorderColor(
const Color& color const Color& color
); );
math::Transform const& GetTransform() const;
void SetTransform(
math::Transform const& transform
);
// 判断点是否在节点内 // 判断点是否在节点内
bool ContainsPoint( bool ContainsPoint(
const Point& point const Point& point
@ -331,109 +332,29 @@ namespace easy2d
// 从父节点移除 // 从父节点移除
void RemoveFromParent(); void RemoveFromParent();
// 执行动作
void RunAction(
spAction const& action
);
// 继续动作
void ResumeAction(
const String& name
);
// 暂停动作
void PauseAction(
const String& name
);
// 停止动作
void StopAction(
const String& name
);
// 继续所有暂停动作
void ResumeAllActions();
// 暂停所有动作
void PauseAllActions();
// 停止所有动作
void StopAllActions();
// 获取所有动作
const Actions& GetAllActions() const;
// 添加任务
void AddTask(
spTask const& task
);
// 启动任务
void StartTasks(
const String& task_name
);
// 停止任务
void StopTasks(
const String& task_name
);
// 移除任务
void RemoveTasks(
const String& task_name
);
// 启动所有任务
void StartAllTasks();
// 停止所有任务
void StopAllTasks();
// 移除所有任务
void RemoveAllTasks();
// 获取所有任务
const Tasks& GetAllTasks() const;
protected: protected:
// 遍历节点
virtual void Visit(); virtual void Visit();
// 分发鼠标消息
virtual bool Dispatch( virtual bool Dispatch(
const MouseEvent& e, const MouseEvent& e,
bool handled bool handled
); );
// 分发按键消息
virtual bool Dispatch( virtual bool Dispatch(
const KeyEvent& e, const KeyEvent& e,
bool handled bool handled
); );
private: protected:
// 渲染节点边缘
void DrawBorder(); void DrawBorder();
// 更新子节点 void Update(Duration const& dt);
void UpdateChildren(float dt);
// 更新转换矩阵
void UpdateTransform(); void UpdateTransform();
// 更新节点透明度
void UpdateOpacity(); void UpdateOpacity();
// 更新动作 protected:
void UpdateActions();
// 更新任务
void UpdateTasks();
// 更新节点时间
void UpdateTime();
private:
String name_; String name_;
size_t hash_name_; size_t hash_name_;
float display_opacity_; float display_opacity_;
@ -445,8 +366,6 @@ namespace easy2d
bool dirty_transform_; bool dirty_transform_;
Node* parent_; Node* parent_;
Color border_color_; Color border_color_;
Actions actions_;
Tasks tasks_;
Nodes children_; Nodes children_;
ID2D1Geometry* border_; ID2D1Geometry* border_;
math::Transform transform_; math::Transform transform_;

View File

@ -24,83 +24,10 @@
namespace easy2d namespace easy2d
{ {
Scene::Scene() Scene::Scene()
: root_(nullptr)
, transform_()
{ {
} }
Scene::Scene(spNode const& root)
: root_(nullptr)
, transform_()
{
this->SetRoot(root);
}
Scene::~Scene() Scene::~Scene()
{ {
} }
void Scene::SetRoot(spNode const& root)
{
if (root_ == root)
return;
root_ = root;
}
spNode const& Scene::GetRoot() const
{
return root_;
}
void Scene::Draw()
{
if (root_)
{
root_->Visit();
}
}
void Scene::Dispatch(const MouseEvent & e)
{
auto handler = dynamic_cast<MouseEventHandler*>(this);
if (handler)
{
handler->Handle(e);
}
if (root_)
{
root_->Dispatch(e, false);
}
}
void Scene::Dispatch(const KeyEvent & e)
{
auto handler = dynamic_cast<KeyEventHandler*>(this);
if (handler)
{
handler->Handle(e);
}
if (root_)
{
root_->Dispatch(e, false);
}
}
void Scene::SetTransform(const math::Matrix& matrix)
{
transform_ = matrix;
if (root_)
{
root_->dirty_transform_ = true;
}
}
const math::Matrix& Scene::GetTransform() const
{
return transform_;
}
} }

View File

@ -19,28 +19,19 @@
// THE SOFTWARE. // THE SOFTWARE.
#pragma once #pragma once
#include "base.h" #include "Node.h"
#include "KeyEvent.h"
#include "MouseEvent.h"
#include "../math/Matrix.hpp"
namespace easy2d namespace easy2d
{ {
class Node;
// 场景 // 场景
class Scene class Scene
: public RefCounter : public Node
{ {
E2D_DISABLE_COPY(Scene); E2D_DISABLE_COPY(Scene);
public: public:
Scene(); Scene();
explicit Scene(
spNode const& root
);
virtual ~Scene(); virtual ~Scene();
// 进入场景 // 进入场景
@ -48,41 +39,5 @@ namespace easy2d
// 退出场景 // 退出场景
virtual void OnExit() {} virtual void OnExit() {}
// 更新场景
virtual void OnUpdate(float dt) {}
// 设置根节点
void SetRoot(
spNode const& root
);
// 获取根节点
spNode const& GetRoot() const;
// 渲染场景
void Draw();
// 分发鼠标消息
virtual void Dispatch(
const MouseEvent& e
);
// 分发按键消息
virtual void Dispatch(
const KeyEvent& e
);
// 设置转换矩阵
void SetTransform(
const math::Matrix& matrix
);
// 获取转换矩阵
const math::Matrix& GetTransform() const;
private:
spNode root_;
math::Matrix transform_;
}; };
} }

View File

@ -35,13 +35,14 @@ namespace easy2d
, delay_(delay) , delay_(delay)
, callback_(func) , callback_(func)
, name_(name) , name_(name)
, delta_()
{ {
} }
void Task::Start() void Task::Start()
{ {
running_ = true; running_ = true;
last_time_ = time::Now(); delta_ = Duration{};
} }
void Task::Stop() void Task::Stop()
@ -49,16 +50,25 @@ namespace easy2d
running_ = false; running_ = false;
} }
void Task::Update() void Task::Update(Duration const& dt)
{ {
if (!running_)
return;
if (total_times_ == 0) if (total_times_ == 0)
{ {
stopped_ = true; stopped_ = true;
return; return;
} }
if (!delay_.IsZero())
{
delta_ += dt;
if (delta_ < delay_)
return;
}
++run_times_; ++run_times_;
last_time_ += delay_;
if (callback_) if (callback_)
{ {
@ -72,25 +82,9 @@ namespace easy2d
} }
} }
void Task::ResetTime() void Task::Reset()
{ {
last_time_ = time::Now(); delta_ = Duration{};
}
bool Task::IsReady() const
{
if (running_)
{
if (delay_.Milliseconds() == 0)
{
return true;
}
if (time::Now() - last_time_ >= delay_)
{
return true;
}
}
return false;
} }
bool Task::IsRunning() const bool Task::IsRunning() const

View File

@ -25,11 +25,13 @@
namespace easy2d namespace easy2d
{ {
class TaskManager;
// 定时任务 // 定时任务
class Task class Task
: public RefCounter : public RefCounter
{ {
friend class Node; friend class TaskManager;
typedef std::function<void()> Callback; typedef std::function<void()> Callback;
@ -59,11 +61,9 @@ namespace easy2d
const String& GetName() const; const String& GetName() const;
protected: protected:
bool IsReady() const; void Update(Duration const& dt);
void Update(); void Reset();
void ResetTime();
private: private:
bool running_; bool running_;
@ -72,7 +72,7 @@ namespace easy2d
int total_times_; int total_times_;
String name_; String name_;
Duration delay_; Duration delay_;
TimePoint last_time_; Duration delta_;
Callback callback_; Callback callback_;
}; };
} }

131
core/base/TaskManager.cpp Normal file
View File

@ -0,0 +1,131 @@
// Copyright (c) 2016-2018 Easy2D - 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 "TaskManager.h"
namespace easy2d
{
void TaskManager::AddTask(spTask const& task)
{
if (task)
{
auto iter = std::find(tasks_.begin(), tasks_.end(), task);
if (iter == tasks_.end())
{
task->Reset();
tasks_.push_back(task);
}
}
}
void TaskManager::StopTasks(const String& name)
{
for (const auto& task : tasks_)
{
if (task->GetName() == name)
{
task->Stop();
}
}
}
void TaskManager::StartTasks(const String& name)
{
for (const auto& task : tasks_)
{
if (task->GetName() == name)
{
task->Start();
}
}
}
void TaskManager::RemoveTasks(const String& name)
{
for (const auto& task : tasks_)
{
if (task->GetName() == name)
{
task->stopped_ = true;
}
}
}
void TaskManager::StopAllTasks()
{
for (const auto& task : tasks_)
{
task->Stop();
}
}
void TaskManager::StartAllTasks()
{
for (const auto& task : tasks_)
{
task->Start();
}
}
void TaskManager::RemoveAllTasks()
{
for (const auto& task : tasks_)
{
task->stopped_ = true;
}
}
const Tasks & TaskManager::GetAllTasks() const
{
return tasks_;
}
void TaskManager::UpdateTasks(Duration const& dt)
{
if (tasks_.empty())
return;
std::vector<spTask> currTasks;
currTasks.reserve(tasks_.size());
std::copy_if(
tasks_.begin(),
tasks_.end(),
std::back_inserter(currTasks),
[](spTask const& task) { return !task->stopped_; }
);
// 遍历就绪的任务
for (const auto& task : currTasks)
task->Update(dt);
// 清除结束的任务
for (auto iter = tasks_.begin(); iter != tasks_.end();)
{
if ((*iter)->stopped_)
{
iter = tasks_.erase(iter);
}
else
{
++iter;
}
}
}
}

View File

@ -18,45 +18,50 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE. // THE SOFTWARE.
#include "Transform.h" #pragma once
#include "Task.h"
namespace easy2d namespace easy2d
{ {
namespace math class TaskManager
{ {
Transform::Transform() public:
: position() // 添加任务
, size() void AddTask(
, scale_x(1.f) spTask const& task
, scale_y(1.f) );
, rotation(0)
, skew_x(0)
, skew_y(0)
, pivot_x(0)
, pivot_y(0)
{
}
Matrix Transform::ToMatrix() const // 启动任务
{ void StartTasks(
auto pivot = Vector2(size.width * pivot_x, size.height * pivot_y); const String& task_name
return Matrix().Scale(scale_x, scale_y, pivot) );
.Skew(skew_x, skew_y, pivot)
.Rotate(rotation, pivot)
.Translate(position - pivot);
}
bool Transform::operator==(const Transform & other) const // 停止任务
{ void StopTasks(
return position == other.position && const String& task_name
size == other.size && );
scale_x == other.scale_x &&
scale_y == other.scale_y && // 移除任务
skew_x == other.skew_x && void RemoveTasks(
skew_y == other.skew_y && const String& task_name
rotation == other.rotation && );
pivot_x == other.pivot_x &&
pivot_y == other.pivot_y; // 启动所有任务
} void StartAllTasks();
}
// 停止所有任务
void StopAllTasks();
// 移除所有任务
void RemoveAllTasks();
// 获取所有任务
const Tasks& GetAllTasks() const;
protected:
void UpdateTasks(Duration const& dt);
protected:
Tasks tasks_;
};
} }

View File

@ -23,7 +23,6 @@
#include "Scene.h" #include "Scene.h"
#include "window.h" #include "window.h"
#include "render.h" #include "render.h"
#include "../math/Matrix.hpp"
namespace easy2d namespace easy2d
{ {
@ -31,9 +30,10 @@ namespace easy2d
// Transition // Transition
//------------------------------------------------------- //-------------------------------------------------------
Transition::Transition(float duration) Transition::Transition(Duration const& duration)
: done_(false) : done_(false)
, started_() , duration_(duration)
, delta_()
, process_(0) , process_(0)
, window_size_() , window_size_()
, out_scene_(nullptr) , out_scene_(nullptr)
@ -43,7 +43,6 @@ namespace easy2d
, out_layer_prop_() , out_layer_prop_()
, in_layer_prop_() , in_layer_prop_()
{ {
duration_ = std::max(duration, 0.f);
} }
Transition::~Transition() Transition::~Transition()
@ -59,7 +58,9 @@ namespace easy2d
void Transition::Init(spScene const& prev, spScene const& next) void Transition::Init(spScene const& prev, spScene const& next)
{ {
started_ = time::Now(); process_ = 0;
delta_ = Duration{};
out_scene_ = prev; out_scene_ = prev;
in_scene_ = next; in_scene_ = next;
@ -81,16 +82,16 @@ namespace easy2d
out_layer_prop_ = in_layer_prop_ = LayerProperties{ Rect(Point(), window_size_),1.f }; out_layer_prop_ = in_layer_prop_ = LayerProperties{ Rect(Point(), window_size_),1.f };
} }
void Transition::Update() void Transition::Update(Duration const& dt)
{ {
if (duration_ == 0) if (duration_.IsZero())
{ {
process_ = 1; process_ = 1;
} }
else else
{ {
process_ = (time::Now() - started_).Seconds() / duration_; delta_ += dt;
process_ = std::min(process_, 1.f); process_ = std::min(delta_ / duration_, 1.f);
} }
if (process_ >= 1) if (process_ >= 1)
@ -101,32 +102,34 @@ namespace easy2d
void Transition::Draw() void Transition::Draw()
{ {
auto& graphics = devices::Graphics::Instance();
if (out_scene_) if (out_scene_)
{ {
devices::Graphics::Instance().PushClip( graphics.PushClip(
out_scene_->GetTransform(), out_scene_->GetTransform().ToMatrix(),
window_size_ window_size_
); );
devices::Graphics::Instance().PushLayer(out_layer_, out_layer_prop_); graphics.PushLayer(out_layer_, out_layer_prop_);
out_scene_->Draw(); out_scene_->Visit();
devices::Graphics::Instance().PopLayer(); graphics.PopLayer();
devices::Graphics::Instance().PopClip(); graphics.PopClip();
} }
if (in_scene_) if (in_scene_)
{ {
devices::Graphics::Instance().PushClip( graphics.PushClip(
in_scene_->GetTransform(), in_scene_->GetTransform().ToMatrix(),
window_size_ window_size_
); );
devices::Graphics::Instance().PushLayer(in_layer_, in_layer_prop_); graphics.PushLayer(in_layer_, in_layer_prop_);
in_scene_->Draw(); in_scene_->Visit();
devices::Graphics::Instance().PopLayer(); graphics.PopLayer();
devices::Graphics::Instance().PopClip(); graphics.PopClip();
} }
} }
@ -140,7 +143,7 @@ namespace easy2d
// BoxTransition // BoxTransition
//------------------------------------------------------- //-------------------------------------------------------
BoxTransition::BoxTransition(float duration) BoxTransition::BoxTransition(Duration const& duration)
: Transition(duration) : Transition(duration)
{ {
} }
@ -152,9 +155,9 @@ namespace easy2d
in_layer_prop_.opacity = 0; in_layer_prop_.opacity = 0;
} }
void BoxTransition::Update() void BoxTransition::Update(Duration const& dt)
{ {
Transition::Update(); Transition::Update(dt);
if (process_ < .5f) if (process_ < .5f)
{ {
@ -182,7 +185,7 @@ namespace easy2d
// EmergeTransition // EmergeTransition
//------------------------------------------------------- //-------------------------------------------------------
EmergeTransition::EmergeTransition(float duration) EmergeTransition::EmergeTransition(Duration const& duration)
: Transition(duration) : Transition(duration)
{ {
} }
@ -195,9 +198,9 @@ namespace easy2d
in_layer_prop_.opacity = 0; in_layer_prop_.opacity = 0;
} }
void EmergeTransition::Update() void EmergeTransition::Update(Duration const& dt)
{ {
Transition::Update(); Transition::Update(dt);
out_layer_prop_.opacity = 1 - process_; out_layer_prop_.opacity = 1 - process_;
in_layer_prop_.opacity = process_; in_layer_prop_.opacity = process_;
@ -207,7 +210,7 @@ namespace easy2d
// FadeTransition // FadeTransition
//------------------------------------------------------- //-------------------------------------------------------
FadeTransition::FadeTransition(float duration) FadeTransition::FadeTransition(Duration const& duration)
: Transition(duration) : Transition(duration)
{ {
} }
@ -220,9 +223,9 @@ namespace easy2d
in_layer_prop_.opacity = 0; in_layer_prop_.opacity = 0;
} }
void FadeTransition::Update() void FadeTransition::Update(Duration const& dt)
{ {
Transition::Update(); Transition::Update(dt);
if (process_ < 0.5) if (process_ < 0.5)
{ {
@ -240,7 +243,7 @@ namespace easy2d
// MoveTransition // MoveTransition
//------------------------------------------------------- //-------------------------------------------------------
MoveTransition::MoveTransition(float duration, Direction direction) MoveTransition::MoveTransition(Duration const& duration, Direction direction)
: Transition(duration) : Transition(duration)
, direction_(direction) , direction_(direction)
{ {
@ -272,44 +275,33 @@ namespace easy2d
if (out_scene_) if (out_scene_)
{ {
out_scene_->SetTransform(math::Matrix()); out_scene_->SetTransform(math::Transform{});
} }
if (in_scene_) if (in_scene_)
{ {
in_scene_->SetTransform( auto transform = math::Transform{};
math::Matrix::Translation( transform.position = start_pos_;
start_pos_.x, in_scene_->SetTransform(transform);
start_pos_.y
)
);
} }
} }
void MoveTransition::Update() void MoveTransition::Update(Duration const& dt)
{ {
Transition::Update(); Transition::Update(dt);
if (out_scene_) if (out_scene_)
{ {
auto translation = pos_delta_ * process_; auto transform = math::Transform{};
out_scene_->SetTransform( transform.position = pos_delta_ * process_;
math::Matrix::Translation( out_scene_->SetTransform(transform);
translation.x,
translation.y
)
);
} }
if (in_scene_) if (in_scene_)
{ {
auto translation = start_pos_ + pos_delta_ * process_; auto transform = math::Transform{};
in_scene_->SetTransform( transform.position = start_pos_ + pos_delta_ * process_;
math::Matrix::Translation( in_scene_->SetTransform(transform);
translation.x,
translation.y
)
);
} }
} }
@ -317,12 +309,12 @@ namespace easy2d
{ {
if (out_scene_) if (out_scene_)
{ {
out_scene_->SetTransform(math::Matrix()); out_scene_->SetTransform(math::Transform{});
} }
if (in_scene_) if (in_scene_)
{ {
in_scene_->SetTransform(math::Matrix()); in_scene_->SetTransform(math::Transform{});
} }
} }
@ -330,7 +322,7 @@ namespace easy2d
// RotationTransition // RotationTransition
//------------------------------------------------------- //-------------------------------------------------------
RotationTransition::RotationTransition(float duration, float rotation) RotationTransition::RotationTransition(Duration const& duration, float rotation)
: Transition(duration) : Transition(duration)
, rotation_(rotation) , rotation_(rotation)
{ {
@ -340,42 +332,35 @@ namespace easy2d
{ {
Transition::Init(prev, next); Transition::Init(prev, next);
auto transform = math::Transform{};
transform.pivot = Point{ 0.5f, 0.5f };
transform.position = Point{ window_size_.width / 2, window_size_.height / 2 };
if (out_scene_) if (out_scene_)
{ {
out_scene_->SetTransform(math::Matrix()); out_scene_->SetTransform(transform);
} }
if (in_scene_) if (in_scene_)
{ {
in_scene_->SetTransform(math::Matrix()); in_scene_->SetTransform(transform);
} }
in_layer_prop_.opacity = 0; in_layer_prop_.opacity = 0;
} }
void RotationTransition::Update() void RotationTransition::Update(Duration const& dt)
{ {
Transition::Update(); Transition::Update(dt);
auto center_pos = math::Vector2(
window_size_.width / 2,
window_size_.height / 2
);
if (process_ < .5f) if (process_ < .5f)
{ {
if (out_scene_) if (out_scene_)
{ {
out_scene_->SetTransform( auto transform = out_scene_->GetTransform();
math::Matrix::Scaling( transform.scale = Point{ (.5f - process_) * 2, (.5f - process_) * 2 };
(.5f - process_) * 2, transform.rotation = rotation_ * (.5f - process_) * 2;
(.5f - process_) * 2, out_scene_->SetTransform(transform);
center_pos
) * math::Matrix::Rotation(
rotation_ * (.5f - process_) * 2,
center_pos
)
);
} }
} }
else else
@ -385,16 +370,11 @@ namespace easy2d
out_layer_prop_.opacity = 0; out_layer_prop_.opacity = 0;
in_layer_prop_.opacity = 1; in_layer_prop_.opacity = 1;
in_scene_->SetTransform( auto transform = in_scene_->GetTransform();
math::Matrix::Scaling( transform.scale = Point{ (process_ - .5f) * 2, (process_ - .5f) * 2 };
(process_ - .5f) * 2, transform.rotation = rotation_ * (process_ - .5f) * 2;
(process_ - .5f) * 2,
center_pos in_scene_->SetTransform(transform);
) * math::Matrix::Rotation(
rotation_ * (process_ - .5f) * 2,
center_pos
)
);
} }
} }
} }
@ -403,12 +383,12 @@ namespace easy2d
{ {
if (out_scene_) if (out_scene_)
{ {
out_scene_->SetTransform(math::Matrix()); out_scene_->SetTransform(math::Transform{});
} }
if (in_scene_) if (in_scene_)
{ {
in_scene_->SetTransform(math::Matrix()); in_scene_->SetTransform(math::Transform{});
} }
} }
} }

View File

@ -34,38 +34,32 @@ namespace easy2d
public: public:
explicit Transition( explicit Transition(
float duration Duration const& duration
); );
virtual ~Transition(); virtual ~Transition();
// 场景过渡动画是否结束
bool IsDone(); bool IsDone();
protected: protected:
// 初始化场景过渡动画
virtual void Init( virtual void Init(
spScene const& prev, spScene const& prev,
spScene const& next spScene const& next
); );
// 更新场景过渡动画 virtual void Update(Duration const& dt);
virtual void Update();
// 渲染场景过渡动画
virtual void Draw(); virtual void Draw();
// 停止场景过渡动画
virtual void Stop(); virtual void Stop();
// 重置场景过渡动画
virtual void Reset() { }; virtual void Reset() { };
protected: protected:
bool done_; bool done_;
float duration_;
float process_; float process_;
TimePoint started_; Duration duration_;
Duration delta_;
Size window_size_; Size window_size_;
spScene out_scene_; spScene out_scene_;
spScene in_scene_; spScene in_scene_;
@ -82,12 +76,12 @@ namespace easy2d
{ {
public: public:
explicit FadeTransition( explicit FadeTransition(
float duration /* 动画持续时长 */ Duration const& duration /* 动画持续时长 */
); );
protected: protected:
// ¸üж¯»­ // ¸üж¯»­
virtual void Update() override; virtual void Update(Duration const& dt) override;
virtual void Init( virtual void Init(
spScene const& prev, spScene const& prev,
@ -102,11 +96,11 @@ namespace easy2d
{ {
public: public:
explicit EmergeTransition( explicit EmergeTransition(
float duration /* 动画持续时长 */ Duration const& duration /* 动画持续时长 */
); );
protected: protected:
virtual void Update() override; virtual void Update(Duration const& dt) override;
virtual void Init( virtual void Init(
spScene const& prev, spScene const& prev,
@ -121,11 +115,11 @@ namespace easy2d
{ {
public: public:
explicit BoxTransition( explicit BoxTransition(
float duration /* 动画持续时长 */ Duration const& duration /* 动画持续时长 */
); );
protected: protected:
virtual void Update() override; virtual void Update(Duration const& dt) override;
virtual void Init( virtual void Init(
spScene const& prev, spScene const& prev,
@ -140,12 +134,12 @@ namespace easy2d
{ {
public: public:
explicit MoveTransition( explicit MoveTransition(
float moveDuration, /* 动画持续时长 */ Duration const& moveDuration, /* 动画持续时长 */
Direction direction = Direction::Left /* 移动方向 */ Direction direction /* 移动方向 */
); );
protected: protected:
virtual void Update() override; virtual void Update(Duration const& dt) override;
virtual void Init( virtual void Init(
spScene const& prev, spScene const& prev,
@ -167,12 +161,12 @@ namespace easy2d
{ {
public: public:
explicit RotationTransition( explicit RotationTransition(
float moveDuration, /* 动画持续时长 */ Duration const& moveDuration, /* 动画持续时长 */
float rotation = 360 /* Ðýת¶ÈÊý */ float rotation = 360 /* Ðýת¶ÈÊý */
); );
protected: protected:
virtual void Update() override; virtual void Update(Duration const& dt) override;
virtual void Init( virtual void Init(
spScene const& prev, spScene const& prev,

View File

@ -56,16 +56,6 @@ namespace easy2d
{ {
} }
time_t TimePoint::GetTimeStamp() const
{
return static_cast<time_t>(dur_since_epoch_.Seconds());
}
bool TimePoint::IsZero() const
{
return !!dur_since_epoch_.Milliseconds();
}
const TimePoint TimePoint::operator+(const Duration & dur) const const TimePoint TimePoint::operator+(const Duration & dur) const
{ {
return TimePoint(dur_since_epoch_ + dur); return TimePoint(dur_since_epoch_ + dur);
@ -145,11 +135,6 @@ namespace easy2d
{ {
} }
int64_t Duration::Milliseconds() const
{
return milliseconds_;
}
float Duration::Seconds() const float Duration::Seconds() const
{ {
int64_t sec = milliseconds_ / Second.milliseconds_; int64_t sec = milliseconds_ / Second.milliseconds_;
@ -173,7 +158,7 @@ namespace easy2d
std::wstring easy2d::time::Duration::ToString() const std::wstring easy2d::time::Duration::ToString() const
{ {
if (milliseconds_ == 0LL) if (IsZero())
{ {
return std::wstring(L"0s"); return std::wstring(L"0s");
} }
@ -246,6 +231,11 @@ namespace easy2d
return milliseconds_ <= other.milliseconds_; return milliseconds_ <= other.milliseconds_;
} }
float easy2d::time::Duration::operator/(const Duration & other) const
{
return static_cast<float>(milliseconds_) / other.milliseconds_;
}
const Duration Duration::operator+(const Duration & other) const const Duration Duration::operator+(const Duration & other) const
{ {
return Duration(milliseconds_ + other.milliseconds_); return Duration(milliseconds_ + other.milliseconds_);

View File

@ -49,7 +49,7 @@ namespace easy2d
); );
// 转化为毫秒 // 转化为毫秒
int64_t Milliseconds() const; inline int64_t Milliseconds() const { return milliseconds_; }
// 转化为秒 // 转化为秒
float Seconds() const; float Seconds() const;
@ -60,6 +60,9 @@ namespace easy2d
// 转化为小时 // 转化为小时
float Hours() const; float Hours() const;
// 时长是否是零
inline bool IsZero() const { return milliseconds_ == 0LL; }
// 转为字符串 // 转为字符串
std::wstring ToString() const; std::wstring ToString() const;
@ -70,6 +73,8 @@ namespace easy2d
bool operator< (const Duration &) const; bool operator< (const Duration &) const;
bool operator<= (const Duration &) const; bool operator<= (const Duration &) const;
float operator / (const Duration &) const;
const Duration operator + (const Duration &) const; const Duration operator + (const Duration &) const;
const Duration operator - (const Duration &) const; const Duration operator - (const Duration &) const;
const Duration operator - () const; const Duration operator - () const;
@ -155,11 +160,13 @@ namespace easy2d
TimePoint&& other TimePoint&& other
); );
inline Duration const& SinceEpoch() const { return dur_since_epoch_; }
// 获取时间戳 // 获取时间戳
time_t GetTimeStamp() const; inline time_t GetTimeStamp() const { return static_cast<time_t>(dur_since_epoch_.Seconds()); }
// 是否是零时 // 是否是零时
bool IsZero() const; inline bool IsZero() const { return dur_since_epoch_.IsZero(); }
const TimePoint operator + (const Duration &) const; const TimePoint operator + (const Duration &) const;
const TimePoint operator - (const Duration &) const; const TimePoint operator - (const Duration &) const;

View File

@ -21,7 +21,6 @@
#include "window.h" #include "window.h"
#include "render.h" #include "render.h"
#include "Game.h" #include "Game.h"
#include "Scene.h"
#include "KeyEvent.h" #include "KeyEvent.h"
#include "MouseEvent.h" #include "MouseEvent.h"
#include "../math/scalar.hpp" #include "../math/scalar.hpp"
@ -284,14 +283,7 @@ namespace easy2d
case WM_MOUSEMOVE: case WM_MOUSEMOVE:
case WM_MOUSEWHEEL: case WM_MOUSEWHEEL:
{ {
if (game->IsTransitioning()) game->Dispatch(MouseEvent(msg, w_param, l_param));
break;
auto curr_scene = game->GetCurrentScene();
if (curr_scene)
{
curr_scene->Dispatch(MouseEvent(msg, w_param, l_param));
}
} }
result = 0; result = 0;
was_handled = true; was_handled = true;
@ -301,14 +293,7 @@ namespace easy2d
case WM_KEYDOWN: case WM_KEYDOWN:
case WM_KEYUP: case WM_KEYUP:
{ {
if (game->IsTransitioning()) game->Dispatch(KeyEvent(msg, w_param, l_param));
break;
auto curr_scene = game->GetCurrentScene();
if (curr_scene)
{
curr_scene->Dispatch(KeyEvent(msg, w_param, l_param));
}
} }
result = 0; result = 0;
was_handled = true; was_handled = true;

View File

@ -76,7 +76,7 @@
#include "math/scalar.hpp" #include "math/scalar.hpp"
#include "math/vector.hpp" #include "math/vector.hpp"
#include "math/Matrix.hpp" #include "math/Matrix.hpp"
#include "math/Transform.h" #include "math/Transform.hpp"
#include "math/rand.h" #include "math/rand.h"

69
core/math/Transform.hpp Normal file
View File

@ -0,0 +1,69 @@
// Copyright (c) 2016-2018 Easy2D - 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 "../base/BaseTypes.h"
#include "Matrix.hpp"
namespace easy2d
{
namespace math
{
class Transform
{
public:
Size size; // 大小
float rotation; // 旋转
math::Vector2 position; // 坐标
math::Vector2 scale; // 缩放
math::Vector2 skew; // 错切角度
math::Vector2 pivot; // 支点
public:
Transform()
: position()
, size()
, rotation(0)
, scale(1.f, 1.f)
, skew(0.f, 0.f)
, pivot(0.f, 0.f)
{}
inline Matrix ToMatrix() const
{
auto center = Vector2{ size.width * pivot.x, size.height * pivot.y };
return Matrix{}.Scale(scale.x, scale.y, center)
.Skew(skew.x, skew.y, center)
.Rotate(rotation, center)
.Translate(position - center);
}
bool operator== (const Transform& other) const
{
return position == other.position &&
size == other.size &&
scale == other.scale &&
skew == other.skew &&
rotation == other.rotation &&
pivot == other.pivot;
}
};
}
}

View File

@ -73,22 +73,22 @@ namespace easy2d
); );
// 设置一般情况下显示的按钮 // 设置一般情况下显示的按钮
virtual void SetNormal( void SetNormal(
spNode const& normal spNode const& normal
); );
// 设置鼠标移入按钮时显示的按钮 // 设置鼠标移入按钮时显示的按钮
virtual void SetMouseOver( void SetMouseOver(
spNode const& mouseover spNode const& mouseover
); );
// 设置鼠标按下按钮时显示的按钮 // 设置鼠标按下按钮时显示的按钮
virtual void SetSelected( void SetSelected(
spNode const& selected spNode const& selected
); );
// 设置按钮被禁用时显示的按钮 // 设置按钮被禁用时显示的按钮
virtual void SetDisabled( void SetDisabled(
spNode const& disabled spNode const& disabled
); );

View File

@ -22,6 +22,7 @@
<ClInclude Include="..\..\core\base\Action.hpp" /> <ClInclude Include="..\..\core\base\Action.hpp" />
<ClInclude Include="..\..\core\base\ActionCombined.h" /> <ClInclude Include="..\..\core\base\ActionCombined.h" />
<ClInclude Include="..\..\core\base\ActionFiniteTime.h" /> <ClInclude Include="..\..\core\base\ActionFiniteTime.h" />
<ClInclude Include="..\..\core\base\ActionManager.h" />
<ClInclude Include="..\..\core\base\Animation.h" /> <ClInclude Include="..\..\core\base\Animation.h" />
<ClInclude Include="..\..\core\base\audio.h" /> <ClInclude Include="..\..\core\base\audio.h" />
<ClInclude Include="..\..\core\base\base.h" /> <ClInclude Include="..\..\core\base\base.h" />
@ -50,6 +51,7 @@
<ClInclude Include="..\..\core\base\Size.h" /> <ClInclude Include="..\..\core\base\Size.h" />
<ClInclude Include="..\..\core\base\Sprite.h" /> <ClInclude Include="..\..\core\base\Sprite.h" />
<ClInclude Include="..\..\core\base\Task.h" /> <ClInclude Include="..\..\core\base\Task.h" />
<ClInclude Include="..\..\core\base\TaskManager.h" />
<ClInclude Include="..\..\core\base\Text.h" /> <ClInclude Include="..\..\core\base\Text.h" />
<ClInclude Include="..\..\core\base\TextRenderer.h" /> <ClInclude Include="..\..\core\base\TextRenderer.h" />
<ClInclude Include="..\..\core\base\time.h" /> <ClInclude Include="..\..\core\base\time.h" />
@ -59,7 +61,7 @@
<ClInclude Include="..\..\core\math\Matrix.hpp" /> <ClInclude Include="..\..\core\math\Matrix.hpp" />
<ClInclude Include="..\..\core\math\rand.h" /> <ClInclude Include="..\..\core\math\rand.h" />
<ClInclude Include="..\..\core\math\scalar.hpp" /> <ClInclude Include="..\..\core\math\scalar.hpp" />
<ClInclude Include="..\..\core\math\Transform.h" /> <ClInclude Include="..\..\core\math\Transform.hpp" />
<ClInclude Include="..\..\core\math\vector.hpp" /> <ClInclude Include="..\..\core\math\vector.hpp" />
<ClInclude Include="..\..\core\ui\Button.h" /> <ClInclude Include="..\..\core\ui\Button.h" />
<ClInclude Include="..\..\core\ui\Menu.h" /> <ClInclude Include="..\..\core\ui\Menu.h" />
@ -72,6 +74,7 @@
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\core\base\ActionCombined.cpp" /> <ClCompile Include="..\..\core\base\ActionCombined.cpp" />
<ClCompile Include="..\..\core\base\ActionFiniteTime.cpp" /> <ClCompile Include="..\..\core\base\ActionFiniteTime.cpp" />
<ClCompile Include="..\..\core\base\ActionManager.cpp" />
<ClCompile Include="..\..\core\base\Animation.cpp" /> <ClCompile Include="..\..\core\base\Animation.cpp" />
<ClCompile Include="..\..\core\base\audio.cpp" /> <ClCompile Include="..\..\core\base\audio.cpp" />
<ClCompile Include="..\..\core\base\CallFunc.cpp" /> <ClCompile Include="..\..\core\base\CallFunc.cpp" />
@ -92,13 +95,13 @@
<ClCompile Include="..\..\core\base\Size.cpp" /> <ClCompile Include="..\..\core\base\Size.cpp" />
<ClCompile Include="..\..\core\base\Sprite.cpp" /> <ClCompile Include="..\..\core\base\Sprite.cpp" />
<ClCompile Include="..\..\core\base\Task.cpp" /> <ClCompile Include="..\..\core\base\Task.cpp" />
<ClCompile Include="..\..\core\base\TaskManager.cpp" />
<ClCompile Include="..\..\core\base\Text.cpp" /> <ClCompile Include="..\..\core\base\Text.cpp" />
<ClCompile Include="..\..\core\base\TextRenderer.cpp" /> <ClCompile Include="..\..\core\base\TextRenderer.cpp" />
<ClCompile Include="..\..\core\base\time.cpp" /> <ClCompile Include="..\..\core\base\time.cpp" />
<ClCompile Include="..\..\core\base\Transition.cpp" /> <ClCompile Include="..\..\core\base\Transition.cpp" />
<ClCompile Include="..\..\core\base\window.cpp" /> <ClCompile Include="..\..\core\base\window.cpp" />
<ClCompile Include="..\..\core\math\rand.cpp" /> <ClCompile Include="..\..\core\math\rand.cpp" />
<ClCompile Include="..\..\core\math\Transform.cpp" />
<ClCompile Include="..\..\core\ui\Button.cpp" /> <ClCompile Include="..\..\core\ui\Button.cpp" />
<ClCompile Include="..\..\core\ui\Menu.cpp" /> <ClCompile Include="..\..\core\ui\Menu.cpp" />
<ClCompile Include="..\..\core\utils\Data.cpp" /> <ClCompile Include="..\..\core\utils\Data.cpp" />

View File

@ -104,9 +104,6 @@
<ClInclude Include="..\..\core\math\scalar.hpp"> <ClInclude Include="..\..\core\math\scalar.hpp">
<Filter>math</Filter> <Filter>math</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\core\math\Transform.h">
<Filter>math</Filter>
</ClInclude>
<ClInclude Include="..\..\core\math\vector.hpp"> <ClInclude Include="..\..\core\math\vector.hpp">
<Filter>math</Filter> <Filter>math</Filter>
</ClInclude> </ClInclude>
@ -146,6 +143,15 @@
<ClInclude Include="..\..\core\base\Action.hpp"> <ClInclude Include="..\..\core\base\Action.hpp">
<Filter>base</Filter> <Filter>base</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\core\base\ActionManager.h">
<Filter>base</Filter>
</ClInclude>
<ClInclude Include="..\..\core\base\TaskManager.h">
<Filter>base</Filter>
</ClInclude>
<ClInclude Include="..\..\core\math\Transform.hpp">
<Filter>math</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Filter Include="base"> <Filter Include="base">
@ -243,9 +249,6 @@
<ClCompile Include="..\..\core\math\rand.cpp"> <ClCompile Include="..\..\core\math\rand.cpp">
<Filter>math</Filter> <Filter>math</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\math\Transform.cpp">
<Filter>math</Filter>
</ClCompile>
<ClCompile Include="..\..\core\utils\Data.cpp"> <ClCompile Include="..\..\core\utils\Data.cpp">
<Filter>utils</Filter> <Filter>utils</Filter>
</ClCompile> </ClCompile>
@ -270,5 +273,11 @@
<ClCompile Include="..\..\core\base\Music.cpp"> <ClCompile Include="..\..\core\base\Music.cpp">
<Filter>base</Filter> <Filter>base</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\base\TaskManager.cpp">
<Filter>base</Filter>
</ClCompile>
<ClCompile Include="..\..\core\base\ActionManager.cpp">
<Filter>base</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -22,6 +22,7 @@
<ClInclude Include="..\..\core\base\Action.hpp" /> <ClInclude Include="..\..\core\base\Action.hpp" />
<ClInclude Include="..\..\core\base\ActionCombined.h" /> <ClInclude Include="..\..\core\base\ActionCombined.h" />
<ClInclude Include="..\..\core\base\ActionFiniteTime.h" /> <ClInclude Include="..\..\core\base\ActionFiniteTime.h" />
<ClInclude Include="..\..\core\base\ActionManager.h" />
<ClInclude Include="..\..\core\base\Animation.h" /> <ClInclude Include="..\..\core\base\Animation.h" />
<ClInclude Include="..\..\core\base\audio.h" /> <ClInclude Include="..\..\core\base\audio.h" />
<ClInclude Include="..\..\core\base\base.h" /> <ClInclude Include="..\..\core\base\base.h" />
@ -50,6 +51,7 @@
<ClInclude Include="..\..\core\base\Size.h" /> <ClInclude Include="..\..\core\base\Size.h" />
<ClInclude Include="..\..\core\base\Sprite.h" /> <ClInclude Include="..\..\core\base\Sprite.h" />
<ClInclude Include="..\..\core\base\Task.h" /> <ClInclude Include="..\..\core\base\Task.h" />
<ClInclude Include="..\..\core\base\TaskManager.h" />
<ClInclude Include="..\..\core\base\Text.h" /> <ClInclude Include="..\..\core\base\Text.h" />
<ClInclude Include="..\..\core\base\TextRenderer.h" /> <ClInclude Include="..\..\core\base\TextRenderer.h" />
<ClInclude Include="..\..\core\base\time.h" /> <ClInclude Include="..\..\core\base\time.h" />
@ -59,7 +61,7 @@
<ClInclude Include="..\..\core\math\Matrix.hpp" /> <ClInclude Include="..\..\core\math\Matrix.hpp" />
<ClInclude Include="..\..\core\math\rand.h" /> <ClInclude Include="..\..\core\math\rand.h" />
<ClInclude Include="..\..\core\math\scalar.hpp" /> <ClInclude Include="..\..\core\math\scalar.hpp" />
<ClInclude Include="..\..\core\math\Transform.h" /> <ClInclude Include="..\..\core\math\Transform.hpp" />
<ClInclude Include="..\..\core\math\vector.hpp" /> <ClInclude Include="..\..\core\math\vector.hpp" />
<ClInclude Include="..\..\core\ui\Button.h" /> <ClInclude Include="..\..\core\ui\Button.h" />
<ClInclude Include="..\..\core\ui\Menu.h" /> <ClInclude Include="..\..\core\ui\Menu.h" />
@ -72,6 +74,7 @@
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\core\base\ActionCombined.cpp" /> <ClCompile Include="..\..\core\base\ActionCombined.cpp" />
<ClCompile Include="..\..\core\base\ActionFiniteTime.cpp" /> <ClCompile Include="..\..\core\base\ActionFiniteTime.cpp" />
<ClCompile Include="..\..\core\base\ActionManager.cpp" />
<ClCompile Include="..\..\core\base\Animation.cpp" /> <ClCompile Include="..\..\core\base\Animation.cpp" />
<ClCompile Include="..\..\core\base\audio.cpp" /> <ClCompile Include="..\..\core\base\audio.cpp" />
<ClCompile Include="..\..\core\base\CallFunc.cpp" /> <ClCompile Include="..\..\core\base\CallFunc.cpp" />
@ -92,13 +95,13 @@
<ClCompile Include="..\..\core\base\Size.cpp" /> <ClCompile Include="..\..\core\base\Size.cpp" />
<ClCompile Include="..\..\core\base\Sprite.cpp" /> <ClCompile Include="..\..\core\base\Sprite.cpp" />
<ClCompile Include="..\..\core\base\Task.cpp" /> <ClCompile Include="..\..\core\base\Task.cpp" />
<ClCompile Include="..\..\core\base\TaskManager.cpp" />
<ClCompile Include="..\..\core\base\Text.cpp" /> <ClCompile Include="..\..\core\base\Text.cpp" />
<ClCompile Include="..\..\core\base\TextRenderer.cpp" /> <ClCompile Include="..\..\core\base\TextRenderer.cpp" />
<ClCompile Include="..\..\core\base\time.cpp" /> <ClCompile Include="..\..\core\base\time.cpp" />
<ClCompile Include="..\..\core\base\Transition.cpp" /> <ClCompile Include="..\..\core\base\Transition.cpp" />
<ClCompile Include="..\..\core\base\window.cpp" /> <ClCompile Include="..\..\core\base\window.cpp" />
<ClCompile Include="..\..\core\math\rand.cpp" /> <ClCompile Include="..\..\core\math\rand.cpp" />
<ClCompile Include="..\..\core\math\Transform.cpp" />
<ClCompile Include="..\..\core\ui\Button.cpp" /> <ClCompile Include="..\..\core\ui\Button.cpp" />
<ClCompile Include="..\..\core\ui\Menu.cpp" /> <ClCompile Include="..\..\core\ui\Menu.cpp" />
<ClCompile Include="..\..\core\utils\Data.cpp" /> <ClCompile Include="..\..\core\utils\Data.cpp" />

View File

@ -104,9 +104,6 @@
<ClInclude Include="..\..\core\math\scalar.hpp"> <ClInclude Include="..\..\core\math\scalar.hpp">
<Filter>math</Filter> <Filter>math</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\core\math\Transform.h">
<Filter>math</Filter>
</ClInclude>
<ClInclude Include="..\..\core\math\vector.hpp"> <ClInclude Include="..\..\core\math\vector.hpp">
<Filter>math</Filter> <Filter>math</Filter>
</ClInclude> </ClInclude>
@ -146,6 +143,15 @@
<ClInclude Include="..\..\core\base\Action.hpp"> <ClInclude Include="..\..\core\base\Action.hpp">
<Filter>base</Filter> <Filter>base</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\core\base\ActionManager.h">
<Filter>base</Filter>
</ClInclude>
<ClInclude Include="..\..\core\base\TaskManager.h">
<Filter>base</Filter>
</ClInclude>
<ClInclude Include="..\..\core\math\Transform.hpp">
<Filter>math</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Filter Include="base"> <Filter Include="base">
@ -243,9 +249,6 @@
<ClCompile Include="..\..\core\math\rand.cpp"> <ClCompile Include="..\..\core\math\rand.cpp">
<Filter>math</Filter> <Filter>math</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\math\Transform.cpp">
<Filter>math</Filter>
</ClCompile>
<ClCompile Include="..\..\core\utils\Data.cpp"> <ClCompile Include="..\..\core\utils\Data.cpp">
<Filter>utils</Filter> <Filter>utils</Filter>
</ClCompile> </ClCompile>
@ -270,5 +273,11 @@
<ClCompile Include="..\..\core\base\Music.cpp"> <ClCompile Include="..\..\core\base\Music.cpp">
<Filter>base</Filter> <Filter>base</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\base\TaskManager.cpp">
<Filter>base</Filter>
</ClCompile>
<ClCompile Include="..\..\core\base\ActionManager.cpp">
<Filter>base</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -22,6 +22,7 @@
<ClInclude Include="..\..\core\base\Action.hpp" /> <ClInclude Include="..\..\core\base\Action.hpp" />
<ClInclude Include="..\..\core\base\ActionCombined.h" /> <ClInclude Include="..\..\core\base\ActionCombined.h" />
<ClInclude Include="..\..\core\base\ActionFiniteTime.h" /> <ClInclude Include="..\..\core\base\ActionFiniteTime.h" />
<ClInclude Include="..\..\core\base\ActionManager.h" />
<ClInclude Include="..\..\core\base\Animation.h" /> <ClInclude Include="..\..\core\base\Animation.h" />
<ClInclude Include="..\..\core\base\audio.h" /> <ClInclude Include="..\..\core\base\audio.h" />
<ClInclude Include="..\..\core\base\base.h" /> <ClInclude Include="..\..\core\base\base.h" />
@ -50,6 +51,7 @@
<ClInclude Include="..\..\core\base\Size.h" /> <ClInclude Include="..\..\core\base\Size.h" />
<ClInclude Include="..\..\core\base\Sprite.h" /> <ClInclude Include="..\..\core\base\Sprite.h" />
<ClInclude Include="..\..\core\base\Task.h" /> <ClInclude Include="..\..\core\base\Task.h" />
<ClInclude Include="..\..\core\base\TaskManager.h" />
<ClInclude Include="..\..\core\base\Text.h" /> <ClInclude Include="..\..\core\base\Text.h" />
<ClInclude Include="..\..\core\base\TextRenderer.h" /> <ClInclude Include="..\..\core\base\TextRenderer.h" />
<ClInclude Include="..\..\core\base\time.h" /> <ClInclude Include="..\..\core\base\time.h" />
@ -59,7 +61,7 @@
<ClInclude Include="..\..\core\math\Matrix.hpp" /> <ClInclude Include="..\..\core\math\Matrix.hpp" />
<ClInclude Include="..\..\core\math\rand.h" /> <ClInclude Include="..\..\core\math\rand.h" />
<ClInclude Include="..\..\core\math\scalar.hpp" /> <ClInclude Include="..\..\core\math\scalar.hpp" />
<ClInclude Include="..\..\core\math\Transform.h" /> <ClInclude Include="..\..\core\math\Transform.hpp" />
<ClInclude Include="..\..\core\math\vector.hpp" /> <ClInclude Include="..\..\core\math\vector.hpp" />
<ClInclude Include="..\..\core\ui\Button.h" /> <ClInclude Include="..\..\core\ui\Button.h" />
<ClInclude Include="..\..\core\ui\Menu.h" /> <ClInclude Include="..\..\core\ui\Menu.h" />
@ -72,6 +74,7 @@
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\core\base\ActionCombined.cpp" /> <ClCompile Include="..\..\core\base\ActionCombined.cpp" />
<ClCompile Include="..\..\core\base\ActionFiniteTime.cpp" /> <ClCompile Include="..\..\core\base\ActionFiniteTime.cpp" />
<ClCompile Include="..\..\core\base\ActionManager.cpp" />
<ClCompile Include="..\..\core\base\Animation.cpp" /> <ClCompile Include="..\..\core\base\Animation.cpp" />
<ClCompile Include="..\..\core\base\audio.cpp" /> <ClCompile Include="..\..\core\base\audio.cpp" />
<ClCompile Include="..\..\core\base\CallFunc.cpp" /> <ClCompile Include="..\..\core\base\CallFunc.cpp" />
@ -92,13 +95,13 @@
<ClCompile Include="..\..\core\base\Size.cpp" /> <ClCompile Include="..\..\core\base\Size.cpp" />
<ClCompile Include="..\..\core\base\Sprite.cpp" /> <ClCompile Include="..\..\core\base\Sprite.cpp" />
<ClCompile Include="..\..\core\base\Task.cpp" /> <ClCompile Include="..\..\core\base\Task.cpp" />
<ClCompile Include="..\..\core\base\TaskManager.cpp" />
<ClCompile Include="..\..\core\base\Text.cpp" /> <ClCompile Include="..\..\core\base\Text.cpp" />
<ClCompile Include="..\..\core\base\TextRenderer.cpp" /> <ClCompile Include="..\..\core\base\TextRenderer.cpp" />
<ClCompile Include="..\..\core\base\time.cpp" /> <ClCompile Include="..\..\core\base\time.cpp" />
<ClCompile Include="..\..\core\base\Transition.cpp" /> <ClCompile Include="..\..\core\base\Transition.cpp" />
<ClCompile Include="..\..\core\base\window.cpp" /> <ClCompile Include="..\..\core\base\window.cpp" />
<ClCompile Include="..\..\core\math\rand.cpp" /> <ClCompile Include="..\..\core\math\rand.cpp" />
<ClCompile Include="..\..\core\math\Transform.cpp" />
<ClCompile Include="..\..\core\ui\Button.cpp" /> <ClCompile Include="..\..\core\ui\Button.cpp" />
<ClCompile Include="..\..\core\ui\Menu.cpp" /> <ClCompile Include="..\..\core\ui\Menu.cpp" />
<ClCompile Include="..\..\core\utils\Data.cpp" /> <ClCompile Include="..\..\core\utils\Data.cpp" />
@ -197,7 +200,7 @@
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck> <SDLCheck>false</SDLCheck>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat> <DebugInformationFormat>None</DebugInformationFormat>
<MinimalRebuild>false</MinimalRebuild> <MinimalRebuild>false</MinimalRebuild>
<TreatWarningAsError>true</TreatWarningAsError> <TreatWarningAsError>true</TreatWarningAsError>
</ClCompile> </ClCompile>

View File

@ -104,9 +104,6 @@
<ClInclude Include="..\..\core\math\scalar.hpp"> <ClInclude Include="..\..\core\math\scalar.hpp">
<Filter>math</Filter> <Filter>math</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\core\math\Transform.h">
<Filter>math</Filter>
</ClInclude>
<ClInclude Include="..\..\core\math\vector.hpp"> <ClInclude Include="..\..\core\math\vector.hpp">
<Filter>math</Filter> <Filter>math</Filter>
</ClInclude> </ClInclude>
@ -146,6 +143,15 @@
<ClInclude Include="..\..\core\base\Action.hpp"> <ClInclude Include="..\..\core\base\Action.hpp">
<Filter>base</Filter> <Filter>base</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\core\base\ActionManager.h">
<Filter>base</Filter>
</ClInclude>
<ClInclude Include="..\..\core\base\TaskManager.h">
<Filter>base</Filter>
</ClInclude>
<ClInclude Include="..\..\core\math\Transform.hpp">
<Filter>math</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Filter Include="base"> <Filter Include="base">
@ -243,9 +249,6 @@
<ClCompile Include="..\..\core\math\rand.cpp"> <ClCompile Include="..\..\core\math\rand.cpp">
<Filter>math</Filter> <Filter>math</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\math\Transform.cpp">
<Filter>math</Filter>
</ClCompile>
<ClCompile Include="..\..\core\utils\Data.cpp"> <ClCompile Include="..\..\core\utils\Data.cpp">
<Filter>utils</Filter> <Filter>utils</Filter>
</ClCompile> </ClCompile>
@ -270,5 +273,11 @@
<ClCompile Include="..\..\core\base\Music.cpp"> <ClCompile Include="..\..\core\base\Music.cpp">
<Filter>base</Filter> <Filter>base</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\base\TaskManager.cpp">
<Filter>base</Filter>
</ClCompile>
<ClCompile Include="..\..\core\base\ActionManager.cpp">
<Filter>base</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>