Added getting body parts file names from C++ code
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <core/list.h>
|
#include <core/list.h>
|
||||||
|
#include <core/os/file_access.h>
|
||||||
#include <scene/3d/spatial.h>
|
#include <scene/3d/spatial.h>
|
||||||
#include <scene/3d/physics_body.h>
|
#include <scene/3d/physics_body.h>
|
||||||
#include <scene/3d/immediate_geometry.h>
|
#include <scene/3d/immediate_geometry.h>
|
||||||
@@ -15,7 +16,7 @@
|
|||||||
|
|
||||||
Characters_::Characters_() : query(memnew(DetourNavigationQuery)),
|
Characters_::Characters_() : query(memnew(DetourNavigationQuery)),
|
||||||
initialized(false), debug(NULL),
|
initialized(false), debug(NULL),
|
||||||
crowd(NULL)
|
crowd(NULL), scenes_path("res://scenes/")
|
||||||
{
|
{
|
||||||
smm = NULL;
|
smm = NULL;
|
||||||
no_navmesh = true;
|
no_navmesh = true;
|
||||||
@@ -621,6 +622,7 @@ void Characters_::_notification(int p_what)
|
|||||||
set_physics_process(true);
|
set_physics_process(true);
|
||||||
smm = memnew(SmartObjectManager);
|
smm = memnew(SmartObjectManager);
|
||||||
add_child(smm);
|
add_child(smm);
|
||||||
|
load_body_parts(scenes_path);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -848,3 +850,44 @@ DetourCrowdManager *Characters_::get_crowd() const
|
|||||||
return crowd;
|
return crowd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Characters_::load_body_parts(const String &path)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
String base_path = path;
|
||||||
|
if (!path.ends_with("/"))
|
||||||
|
base_path += "/";
|
||||||
|
String base_hair_path = base_path + "hair/";
|
||||||
|
String base_face_path = base_path + "face/";
|
||||||
|
String base_name_male_hair = "male-hair.tscn", base_name_female_hair = "female-hair.tscn";
|
||||||
|
if (FileAccess::exists(base_hair_path + base_name_male_hair))
|
||||||
|
male_hairs.push_back(base_hair_path + base_name_male_hair);
|
||||||
|
if (FileAccess::exists(base_hair_path + base_name_female_hair))
|
||||||
|
female_hairs.push_back(base_hair_path + base_name_female_hair);
|
||||||
|
String base_name_male_face = "male-face.tscn", base_name_female_face = "female-face.tscn";
|
||||||
|
if (FileAccess::exists(base_face_path + base_name_male_face))
|
||||||
|
male_faces.push_back(base_face_path + base_name_male_face);
|
||||||
|
if (FileAccess::exists(base_face_path + base_name_female_face))
|
||||||
|
female_faces.push_back(base_face_path + base_name_female_face);
|
||||||
|
|
||||||
|
for (i = 0; i < 1000; i++) {
|
||||||
|
String fn1h = (base_hair_path + "male-hair") + itos(i) + ".tscn";
|
||||||
|
String fn2h = (base_hair_path + "female-hair") + itos(i) + ".tscn";
|
||||||
|
String fn2m = (base_hair_path + "hair") + itos(i) + ".tres";
|
||||||
|
String fn1f = (base_face_path + "male-face") + itos(i) + ".tscn";
|
||||||
|
String fn2f = (base_face_path + "female-face") + itos(i) + ".tscn";
|
||||||
|
if (FileAccess::exists(fn1h))
|
||||||
|
male_hairs.push_back(fn1h);
|
||||||
|
if (FileAccess::exists(fn2h))
|
||||||
|
female_hairs.push_back(fn2h);
|
||||||
|
if (FileAccess::exists(fn2m))
|
||||||
|
hair_materials.push_back(fn2m);
|
||||||
|
if (FileAccess::exists(fn1f))
|
||||||
|
male_faces.push_back(fn1f);
|
||||||
|
if (FileAccess::exists(fn2f))
|
||||||
|
female_faces.push_back(fn2f);
|
||||||
|
}
|
||||||
|
assert(male_hairs.size() > 0 && female_hairs.size() > 0);
|
||||||
|
assert(male_faces.size() > 0 && female_faces.size() > 0);
|
||||||
|
assert(hair_materials.size() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ public:
|
|||||||
void agent_walk_stop(Object *obj);
|
void agent_walk_stop(Object *obj);
|
||||||
void set_root_motion_mod(const Transform &xform);
|
void set_root_motion_mod(const Transform &xform);
|
||||||
Transform get_root_motion_mod() const;
|
Transform get_root_motion_mod() const;
|
||||||
|
void load_body_parts(const String &path);
|
||||||
protected:
|
protected:
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
@@ -60,5 +61,11 @@ protected:
|
|||||||
float arrive_precision;
|
float arrive_precision;
|
||||||
Transform root_motion_mod;
|
Transform root_motion_mod;
|
||||||
bool no_navmesh;
|
bool no_navmesh;
|
||||||
|
PoolVector<String> male_hairs;
|
||||||
|
PoolVector<String> female_hairs;
|
||||||
|
PoolVector<String> hair_materials;
|
||||||
|
PoolVector<String> male_faces;
|
||||||
|
PoolVector<String> female_faces;
|
||||||
|
String scenes_path;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user