-Fixes to OBJ importer, option to disable optimization
-Fixes to script language, PlaceHolder can now get and check methods
This commit is contained in:
parent
3852c5f8a0
commit
b3627e29f0
5 changed files with 44 additions and 8 deletions
|
@ -347,6 +347,20 @@ Variant::Type PlaceHolderScriptInstance::get_property_type(const StringName &p_n
|
|||
return Variant::NIL;
|
||||
}
|
||||
|
||||
void PlaceHolderScriptInstance::get_method_list(List<MethodInfo> *p_list) const {
|
||||
|
||||
if (script.is_valid()) {
|
||||
script->get_script_method_list(p_list);
|
||||
}
|
||||
}
|
||||
bool PlaceHolderScriptInstance::has_method(const StringName &p_method) const {
|
||||
|
||||
if (script.is_valid()) {
|
||||
return script->has_method(p_method);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void PlaceHolderScriptInstance::update(const List<PropertyInfo> &p_properties, const Map<StringName, Variant> &p_values) {
|
||||
|
||||
Set<StringName> new_values;
|
||||
|
|
|
@ -304,8 +304,8 @@ public:
|
|||
virtual void get_property_list(List<PropertyInfo> *p_properties) const;
|
||||
virtual Variant::Type get_property_type(const StringName &p_name, bool *r_is_valid = NULL) const;
|
||||
|
||||
virtual void get_method_list(List<MethodInfo> *p_list) const {}
|
||||
virtual bool has_method(const StringName &p_method) const { return false; }
|
||||
virtual void get_method_list(List<MethodInfo> *p_list) const;
|
||||
virtual bool has_method(const StringName &p_method) const;
|
||||
virtual Variant call(const StringName &p_method, VARIANT_ARG_LIST) { return Variant(); }
|
||||
virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
|
|
|
@ -188,7 +188,7 @@ static Error _parse_material_library(const String &p_path, Map<String, Ref<Spati
|
|||
return OK;
|
||||
}
|
||||
|
||||
static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p_single_mesh, bool p_generate_tangents, Vector3 p_scale_mesh, List<String> *r_missing_deps) {
|
||||
static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p_single_mesh, bool p_generate_tangents, bool p_optimize, Vector3 p_scale_mesh, List<String> *r_missing_deps) {
|
||||
|
||||
FileAccessRef f = FileAccess::open(p_path, FileAccess::READ);
|
||||
|
||||
|
@ -200,6 +200,8 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p
|
|||
bool generate_tangents = p_generate_tangents;
|
||||
Vector3 scale_mesh = p_scale_mesh;
|
||||
bool flip_faces = false;
|
||||
int mesh_flags = p_optimize ? Mesh::ARRAY_COMPRESS_DEFAULT : 0;
|
||||
|
||||
//bool flip_faces = p_options["force/flip_faces"];
|
||||
//bool force_smooth = p_options["force/smooth_shading"];
|
||||
//bool weld_vertices = p_options["force/weld_vertices"];
|
||||
|
@ -331,7 +333,7 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh> > &r_meshes, bool p
|
|||
surf_tool->set_material(material_map[current_material_library][current_material]);
|
||||
}
|
||||
|
||||
mesh = surf_tool->commit(mesh);
|
||||
mesh = surf_tool->commit(mesh, mesh_flags);
|
||||
|
||||
if (current_material != String()) {
|
||||
mesh->surface_set_name(mesh->get_surface_count() - 1, current_material.get_basename());
|
||||
|
@ -402,7 +404,7 @@ Node *EditorOBJImporter::import_scene(const String &p_path, uint32_t p_flags, in
|
|||
|
||||
List<Ref<Mesh> > meshes;
|
||||
|
||||
Error err = _parse_obj(p_path, meshes, false, p_flags & IMPORT_GENERATE_TANGENT_ARRAYS, Vector3(1, 1, 1), r_missing_deps);
|
||||
Error err = _parse_obj(p_path, meshes, false, p_flags & IMPORT_GENERATE_TANGENT_ARRAYS, p_flags & IMPORT_USE_COMPRESSION, Vector3(1, 1, 1), r_missing_deps);
|
||||
|
||||
if (err != OK) {
|
||||
if (r_err) {
|
||||
|
@ -470,6 +472,7 @@ void ResourceImporterOBJ::get_import_options(List<ImportOption> *r_options, int
|
|||
|
||||
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "generate_tangents"), true));
|
||||
r_options->push_back(ImportOption(PropertyInfo(Variant::VECTOR3, "scale_mesh"), Vector3(1, 1, 1)));
|
||||
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "optimize_mesh"), true));
|
||||
}
|
||||
bool ResourceImporterOBJ::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
|
||||
|
||||
|
@ -480,7 +483,7 @@ Error ResourceImporterOBJ::import(const String &p_source_file, const String &p_s
|
|||
|
||||
List<Ref<Mesh> > meshes;
|
||||
|
||||
Error err = _parse_obj(p_source_file, meshes, true, p_options["generate_tangents"], p_options["scale_mesh"], NULL);
|
||||
Error err = _parse_obj(p_source_file, meshes, true, p_options["generate_tangents"], p_options["optimize_mesh"], p_options["scale_mesh"], NULL);
|
||||
|
||||
ERR_FAIL_COND_V(err != OK, err);
|
||||
ERR_FAIL_COND_V(meshes.size() != 1, ERR_BUG);
|
||||
|
|
|
@ -37,6 +37,14 @@ float RootMotionView::get_radius() const {
|
|||
return radius;
|
||||
}
|
||||
|
||||
void RootMotionView::set_zero_y(bool p_zero_y) {
|
||||
zero_y = p_zero_y;
|
||||
}
|
||||
|
||||
bool RootMotionView::get_zero_y() const {
|
||||
return zero_y;
|
||||
}
|
||||
|
||||
void RootMotionView::_notification(int p_what) {
|
||||
|
||||
if (p_what == NOTIFICATION_ENTER_TREE) {
|
||||
|
@ -77,9 +85,11 @@ void RootMotionView::_notification(int p_what) {
|
|||
transform.orthonormalize(); //dont want scale, too imprecise
|
||||
transform.affine_invert();
|
||||
|
||||
accumulated = accumulated * transform;
|
||||
accumulated = transform * accumulated;
|
||||
accumulated.origin.x = Math::fposmod(accumulated.origin.x, cell_size);
|
||||
accumulated.origin.y = Math::fposmod(accumulated.origin.y, cell_size);
|
||||
if (zero_y) {
|
||||
accumulated.origin.y = 0;
|
||||
}
|
||||
accumulated.origin.z = Math::fposmod(accumulated.origin.z, cell_size);
|
||||
|
||||
VS::get_singleton()->immediate_clear(immediate);
|
||||
|
@ -142,13 +152,18 @@ void RootMotionView::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_radius", "size"), &RootMotionView::set_radius);
|
||||
ClassDB::bind_method(D_METHOD("get_radius"), &RootMotionView::get_radius);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_zero_y", "enable"), &RootMotionView::set_zero_y);
|
||||
ClassDB::bind_method(D_METHOD("get_zero_y"), &RootMotionView::get_zero_y);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "animation_path", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "AnimationTree"), "set_animation_path", "get_animation_path");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color"), "set_color", "get_color");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "cell_size", PROPERTY_HINT_RANGE, "0.1,16,0.01,or_greater"), "set_cell_size", "get_cell_size");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "radius", PROPERTY_HINT_RANGE, "0.1,16,0.01,or_greater"), "set_radius", "get_radius");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "zero_y"), "set_zero_y", "get_zero_y");
|
||||
}
|
||||
|
||||
RootMotionView::RootMotionView() {
|
||||
zero_y = true;
|
||||
radius = 10;
|
||||
cell_size = 1;
|
||||
set_process_internal(true);
|
||||
|
|
|
@ -13,6 +13,7 @@ public:
|
|||
bool use_in_game;
|
||||
Color color;
|
||||
bool first;
|
||||
bool zero_y;
|
||||
|
||||
Transform accumulated;
|
||||
|
||||
|
@ -33,6 +34,9 @@ public:
|
|||
void set_radius(float p_radius);
|
||||
float get_radius() const;
|
||||
|
||||
void set_zero_y(bool p_zero_y);
|
||||
bool get_zero_y() const;
|
||||
|
||||
virtual AABB get_aabb() const;
|
||||
virtual PoolVector<Face3> get_faces(uint32_t p_usage_flags) const;
|
||||
|
||||
|
|
Loading…
Reference in a new issue