add TaskManager and ActionManager, expands time package
This commit is contained in:
parent
ccba1363a0
commit
32ecc0cbe8
|
|
@ -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_;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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_;
|
||||||
|
|
|
||||||
|
|
@ -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_);
|
||||||
|
|
|
||||||
|
|
@ -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,10 +122,10 @@ 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,10 +158,10 @@ 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,14 +191,14 @@ 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,14 +230,14 @@ 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,8 +268,8 @@ 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,8 +299,8 @@ 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,8 +358,8 @@ 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,8 +389,8 @@ 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_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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:
|
void RunAction(
|
||||||
Point position; // 坐标
|
spAction const& action
|
||||||
Size size; // 大小
|
);
|
||||||
float scale_x; // 横向缩放
|
|
||||||
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_;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -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_;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "Action.hpp"
|
#include "Action.hpp"
|
||||||
#include "Image.h"
|
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
|
|
@ -34,16 +33,16 @@ namespace easy2d
|
||||||
Animation();
|
Animation();
|
||||||
|
|
||||||
explicit Animation(
|
explicit Animation(
|
||||||
const Images& frames /* 关键帧数组 */
|
const Images& frames /* 关键帧数组 */
|
||||||
);
|
);
|
||||||
|
|
||||||
explicit Animation(
|
explicit Animation(
|
||||||
float interval /* 帧间隔(秒) */
|
Duration const& interval /* 帧间隔(秒) */
|
||||||
);
|
);
|
||||||
|
|
||||||
explicit Animation(
|
explicit Animation(
|
||||||
float interval, /* 帧间隔(秒) */
|
Duration const& interval, /* 帧间隔(秒) */
|
||||||
const Images& frames /* 关键帧数组 */
|
const Images& frames /* 关键帧数组 */
|
||||||
);
|
);
|
||||||
|
|
||||||
virtual ~Animation();
|
virtual ~Animation();
|
||||||
|
|
@ -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,8 +75,8 @@ 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_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void CallFunc::Update(Node*)
|
void CallFunc::Update(Node*, Duration const&)
|
||||||
{
|
{
|
||||||
callback_();
|
callback_();
|
||||||
this->Stop();
|
this->Stop();
|
||||||
|
|
|
||||||
|
|
@ -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_;
|
||||||
|
|
|
||||||
|
|
@ -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,18 +166,27 @@ 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)
|
||||||
{
|
{
|
||||||
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_)
|
||||||
}
|
|
||||||
|
|
||||||
void Game::UpdateScene(float dt)
|
|
||||||
{
|
|
||||||
auto update = [&](spScene const& scene) -> void
|
|
||||||
{
|
{
|
||||||
if (scene)
|
curr_scene_->Update(dt);
|
||||||
{
|
}
|
||||||
scene->OnUpdate(dt);
|
|
||||||
spNode const& root = scene->GetRoot();
|
|
||||||
if (root)
|
|
||||||
{
|
|
||||||
root->UpdateChildren(dt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
update(curr_scene_);
|
if (next_scene_)
|
||||||
update(next_scene_);
|
{
|
||||||
|
next_scene_->Update(dt);
|
||||||
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
|
|
||||||
|
|
@ -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, /* 场景 */
|
spScene const& scene /* 场景 */
|
||||||
spTransition const& transition = nullptr /* 场景动画 */
|
);
|
||||||
|
|
||||||
|
// 切换场景
|
||||||
|
bool EnterScene(
|
||||||
|
spScene const& scene, /* 场景 */
|
||||||
|
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:
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
161
core/base/Node.h
161
core/base/Node.h
|
|
@ -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_;
|
||||||
|
|
|
||||||
|
|
@ -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_;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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_;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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_;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -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{});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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_);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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" />
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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" />
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
Loading…
Reference in New Issue