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

View File

@@ -28,8 +28,8 @@ namespace e2d
gobject instantiate(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 prefab& prefab, 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 t2f& transform);
void destroy_instance(gobject& inst) noexcept;
void finalize_instances() noexcept;

View File

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

View File

@@ -4,7 +4,7 @@ local world = {
---@overload fun(prefab: prefab): 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
function world:instantiate(...) end

View File

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

View File

@@ -13,9 +13,9 @@ namespace e2d
"required" : [],
"additionalProperties" : false,
"properties" : {
"translation" : { "$ref": "#/common_definitions/v3" },
"rotation" : { "$ref": "#/common_definitions/q4" },
"scale" : { "$ref": "#/common_definitions/v3" }
"translation" : { "$ref": "#/common_definitions/v2" },
"rotation" : { "type" : "number" },
"scale" : { "$ref": "#/common_definitions/v2" }
}
})json";
@@ -28,7 +28,7 @@ namespace e2d
}
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) ) {
the<debug>().error("ACTOR: Incorrect formatting of 'translation' property");
return false;
@@ -37,7 +37,7 @@ namespace e2d
}
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) ) {
the<debug>().error("ACTOR: Incorrect formatting of 'rotation' property");
return false;
@@ -46,7 +46,7 @@ namespace e2d
}
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) ) {
the<debug>().error("ACTOR: Incorrect formatting of 'scale' property");
return false;

View File

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

View File

@@ -211,11 +211,11 @@ namespace e2d
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);
}
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);
inst.component<actor>()->node()->transform(transform);