change node transform type to trs2

This commit is contained in:
2019-11-30 09:52:34 +07:00
parent 59c7d8763b
commit 4b266de434
9 changed files with 57 additions and 56 deletions

View File

@@ -30,31 +30,31 @@ namespace e2d
virtual ~node() noexcept; virtual ~node() noexcept;
static node_iptr create(); static node_iptr create();
static node_iptr create(const t3f& transform); static node_iptr create(const t2f& transform);
static node_iptr create(const node_iptr& parent); static node_iptr create(const node_iptr& parent);
static node_iptr create(const node_iptr& parent, const t3f& transform); static node_iptr create(const node_iptr& parent, const t2f& transform);
static node_iptr create(gobject owner); static node_iptr create(gobject owner);
static node_iptr create(gobject owner, const t3f& transform); static node_iptr create(gobject owner, const t2f& transform);
static node_iptr create(gobject owner, const node_iptr& parent); static node_iptr create(gobject owner, const node_iptr& parent);
static node_iptr create(gobject owner, const node_iptr& parent, const t3f& transform); static node_iptr create(gobject owner, const node_iptr& parent, const t2f& transform);
void owner(gobject owner) noexcept; void owner(gobject owner) noexcept;
gobject owner() const noexcept; gobject owner() const noexcept;
void transform(const t3f& transform) noexcept; void transform(const t2f& transform) noexcept;
const t3f& transform() const noexcept; const t2f& transform() const noexcept;
void translation(const v3f& translation) noexcept; void translation(const v2f& translation) noexcept;
const v3f& translation() const noexcept; const v2f& translation() const noexcept;
void rotation(const q4f& rotation) noexcept; void rotation(const radf& rotation) noexcept;
const q4f& rotation() const noexcept; const radf& rotation() const noexcept;
void scale(const v3f& scale) noexcept; void scale(const v2f& scale) noexcept;
const v3f& scale() const noexcept; const v2f& scale() const noexcept;
const m4f& local_matrix() const noexcept; const m4f& local_matrix() const noexcept;
const m4f& world_matrix() const noexcept; const m4f& world_matrix() const noexcept;
@@ -145,7 +145,7 @@ namespace e2d
void update_local_matrix_() const noexcept; void update_local_matrix_() const noexcept;
void update_world_matrix_() const noexcept; void update_world_matrix_() const noexcept;
private: private:
t3f transform_; t2f transform_;
gobject owner_; gobject owner_;
node* parent_{nullptr}; node* parent_{nullptr};
node_children children_; node_children children_;

View File

@@ -28,8 +28,8 @@ namespace e2d
gobject instantiate(const node_iptr& parent); gobject instantiate(const node_iptr& parent);
gobject instantiate(const prefab& prefab, const node_iptr& parent); gobject instantiate(const prefab& prefab, const node_iptr& parent);
gobject instantiate(const node_iptr& parent, const t3f& transform); gobject instantiate(const node_iptr& parent, const t2f& transform);
gobject instantiate(const prefab& prefab, const node_iptr& parent, const t3f& transform); gobject instantiate(const prefab& prefab, const node_iptr& parent, const t2f& transform);
void destroy_instance(gobject& inst) noexcept; void destroy_instance(gobject& inst) noexcept;
void finalize_instances() noexcept; void finalize_instances() noexcept;

View File

@@ -1,16 +1,19 @@
---@class node ---@class node
local node = { local node = {
---@type t3f ---@type gobject
transform = t3f.identity(), owner = nil,
---@type v3f ---@type t2f
translation = v3f.zero(), transform = t2f.identity(),
---@type q4f ---@type v2f
rotation = q4f.identity(), translation = v2f.zero(),
---@type v3f ---@type number
scale = v3f.unit(), rotation = 0,
---@type v2f
scale = v2f.unit(),
---@type m4f ---@type m4f
local_matrix = m4f.identity(), local_matrix = m4f.identity(),

View File

@@ -4,7 +4,7 @@ local world = {
---@overload fun(prefab: prefab): gobject ---@overload fun(prefab: prefab): gobject
---@overload fun(prefab: prefab, parent: node): gobject ---@overload fun(prefab: prefab, parent: node): gobject
---@overload fun(prefab: prefab, parent: node, transform: t3f): gobject ---@overload fun(prefab: prefab, parent: node, transform: t2f): gobject
---@return gobject ---@return gobject
function world:instantiate(...) end function world:instantiate(...) end

View File

@@ -15,25 +15,23 @@ namespace e2d::bindings::high
sol::no_constructor, sol::no_constructor,
"owner", sol::property( "owner", sol::property(
[](const node& n) -> gobject { [](const node& n) -> gobject { return n.owner(); }),
return n.owner();
}),
"transform", sol::property( "transform", sol::property(
[](const node& n) -> t3f { return n.transform(); }, [](const node& n) -> t2f { return n.transform(); },
sol::resolve<void(const t3f&)>(&node::transform)), [](node& n, const t2f& v) { n.transform(v); }),
"translation", sol::property( "translation", sol::property(
[](const node& n) -> v3f { return n.translation(); }, [](const node& n) -> v2f { return n.translation(); },
sol::resolve<void(const v3f&)>(&node::translation)), [](node& n, const v2f& v) { n.translation(v); }),
"rotation", sol::property( "rotation", sol::property(
[](const node& n) -> q4f { return n.rotation(); }, [](const node& n) -> f32 { return n.rotation().value; },
sol::resolve<void(const q4f&)>(&node::rotation)), [](node& n, f32 v) { n.rotation(make_rad(v)); }),
"scale", sol::property( "scale", sol::property(
[](const node& n) -> v3f { return n.scale(); }, [](const node& n) -> v2f { return n.scale(); },
sol::resolve<void(const v3f&)>(&node::scale)), [](node& n, const v2f& v) { n.scale(v); }),
"local_matrix", sol::property( "local_matrix", sol::property(
[](const node& n) -> m4f { return n.local_matrix(); }), [](const node& n) -> m4f { return n.local_matrix(); }),

View File

@@ -21,7 +21,7 @@ namespace e2d::bindings::high
[](world& w, const prefab& prefab, const node_iptr& parent) -> gobject { [](world& w, const prefab& prefab, const node_iptr& parent) -> gobject {
return w.instantiate(prefab, parent); return w.instantiate(prefab, parent);
}, },
[](world& w, const prefab& prefab, const node_iptr& parent, const t3f& transform) -> gobject { [](world& w, const prefab& prefab, const node_iptr& parent, const t2f& transform) -> gobject {
return w.instantiate(prefab, parent, transform); return w.instantiate(prefab, parent, transform);
} }
) )

View File

@@ -13,9 +13,9 @@ namespace e2d
"required" : [], "required" : [],
"additionalProperties" : false, "additionalProperties" : false,
"properties" : { "properties" : {
"translation" : { "$ref": "#/common_definitions/v3" }, "translation" : { "$ref": "#/common_definitions/v2" },
"rotation" : { "$ref": "#/common_definitions/q4" }, "rotation" : { "type" : "number" },
"scale" : { "$ref": "#/common_definitions/v3" } "scale" : { "$ref": "#/common_definitions/v2" }
} }
})json"; })json";
@@ -28,7 +28,7 @@ namespace e2d
} }
if ( ctx.root.HasMember("translation") ) { if ( ctx.root.HasMember("translation") ) {
auto translation = component.node()->translation(); v2f translation = component.node()->translation();
if ( !json_utils::try_parse_value(ctx.root["translation"], translation) ) { if ( !json_utils::try_parse_value(ctx.root["translation"], translation) ) {
the<debug>().error("ACTOR: Incorrect formatting of 'translation' property"); the<debug>().error("ACTOR: Incorrect formatting of 'translation' property");
return false; return false;
@@ -37,7 +37,7 @@ namespace e2d
} }
if ( ctx.root.HasMember("rotation") ) { if ( ctx.root.HasMember("rotation") ) {
auto rotation = component.node()->rotation(); radf rotation = component.node()->rotation();
if ( !json_utils::try_parse_value(ctx.root["rotation"], rotation) ) { if ( !json_utils::try_parse_value(ctx.root["rotation"], rotation) ) {
the<debug>().error("ACTOR: Incorrect formatting of 'rotation' property"); the<debug>().error("ACTOR: Incorrect formatting of 'rotation' property");
return false; return false;
@@ -46,7 +46,7 @@ namespace e2d
} }
if ( ctx.root.HasMember("scale") ) { if ( ctx.root.HasMember("scale") ) {
auto scale = component.node()->scale(); v2f scale = component.node()->scale();
if ( !json_utils::try_parse_value(ctx.root["scale"], scale) ) { if ( !json_utils::try_parse_value(ctx.root["scale"], scale) ) {
the<debug>().error("ACTOR: Incorrect formatting of 'scale' property"); the<debug>().error("ACTOR: Incorrect formatting of 'scale' property");
return false; return false;

View File

@@ -21,7 +21,7 @@ namespace e2d
return node_iptr(new node()); return node_iptr(new node());
} }
node_iptr node::create(const t3f& transform) { node_iptr node::create(const t2f& transform) {
node_iptr n = create(); node_iptr n = create();
n->transform(transform); n->transform(transform);
return n; return n;
@@ -35,7 +35,7 @@ namespace e2d
return child; return child;
} }
node_iptr node::create(const node_iptr& parent, const t3f& transform) { node_iptr node::create(const node_iptr& parent, const t2f& transform) {
node_iptr n = create(parent); node_iptr n = create(parent);
n->transform(transform); n->transform(transform);
return n; return n;
@@ -45,7 +45,7 @@ namespace e2d
return node_iptr(new node(std::move(owner))); return node_iptr(new node(std::move(owner)));
} }
node_iptr node::create(gobject owner, const t3f& transform) { node_iptr node::create(gobject owner, const t2f& transform) {
node_iptr n = create(owner); node_iptr n = create(owner);
n->transform(transform); n->transform(transform);
return n; return n;
@@ -59,7 +59,7 @@ namespace e2d
return child; return child;
} }
node_iptr node::create(gobject owner, const node_iptr& parent, const t3f& transform) { node_iptr node::create(gobject owner, const node_iptr& parent, const t2f& transform) {
node_iptr n = create(owner, parent); node_iptr n = create(owner, parent);
n->transform(transform); n->transform(transform);
return n; return n;
@@ -73,39 +73,39 @@ namespace e2d
return owner_; return owner_;
} }
void node::transform(const t3f& transform) noexcept { void node::transform(const t2f& transform) noexcept {
transform_ = transform; transform_ = transform;
mark_dirty_local_matrix_(); mark_dirty_local_matrix_();
} }
const t3f& node::transform() const noexcept { const t2f& node::transform() const noexcept {
return transform_; return transform_;
} }
void node::translation(const v3f& translation) noexcept { void node::translation(const v2f& translation) noexcept {
transform_.translation = translation; transform_.translation = translation;
mark_dirty_local_matrix_(); mark_dirty_local_matrix_();
} }
const v3f& node::translation() const noexcept { const v2f& node::translation() const noexcept {
return transform_.translation; return transform_.translation;
} }
void node::rotation(const q4f& rotation) noexcept { void node::rotation(const radf& rotation) noexcept {
transform_.rotation = rotation; transform_.rotation = rotation;
mark_dirty_local_matrix_(); mark_dirty_local_matrix_();
} }
const q4f& node::rotation() const noexcept { const radf& node::rotation() const noexcept {
return transform_.rotation; return transform_.rotation;
} }
void node::scale(const v3f& scale) noexcept { void node::scale(const v2f& scale) noexcept {
transform_.scale = scale; transform_.scale = scale;
mark_dirty_local_matrix_(); mark_dirty_local_matrix_();
} }
const v3f& node::scale() const noexcept { const v2f& node::scale() const noexcept {
return transform_.scale; return transform_.scale;
} }

View File

@@ -211,11 +211,11 @@ namespace e2d
return inst; return inst;
} }
gobject world::instantiate(const node_iptr& parent, const t3f& transform) { gobject world::instantiate(const node_iptr& parent, const t2f& transform) {
return instantiate(prefab(), parent, transform); return instantiate(prefab(), parent, transform);
} }
gobject world::instantiate(const prefab& prefab, const node_iptr& parent, const t3f& transform) { gobject world::instantiate(const prefab& prefab, const node_iptr& parent, const t2f& transform) {
gobject inst = new_instance(*this, prefab); gobject inst = new_instance(*this, prefab);
inst.component<actor>()->node()->transform(transform); inst.component<actor>()->node()->transform(transform);