|
@@ -135,6 +135,8 @@ EggLoader() {
|
|
|
_data = new EggData;
|
|
_data = new EggData;
|
|
|
_data->set_coordinate_system(egg_coordinate_system);
|
|
_data->set_coordinate_system(egg_coordinate_system);
|
|
|
_error = false;
|
|
_error = false;
|
|
|
|
|
+ _dynamic_override = false;
|
|
|
|
|
+ _dynamic_override_char_maker = NULL;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
@@ -148,6 +150,8 @@ EggLoader(const EggData *data) :
|
|
|
_data(new EggData(*data))
|
|
_data(new EggData(*data))
|
|
|
{
|
|
{
|
|
|
_error = false;
|
|
_error = false;
|
|
|
|
|
+ _dynamic_override = true;
|
|
|
|
|
+ _dynamic_override_char_maker = NULL;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -210,7 +214,6 @@ build_graph() {
|
|
|
apply_deferred_nodes(_root, DeferredNodeProperty());
|
|
apply_deferred_nodes(_root, DeferredNodeProperty());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
// Function: EggLoader::reparent_decals
|
|
// Function: EggLoader::reparent_decals
|
|
|
// Access: Public
|
|
// Access: Public
|
|
@@ -1696,7 +1699,7 @@ make_node(EggBin *egg_bin, PandaNode *parent) {
|
|
|
// node (a parent of one or more similar EggPrimitives).
|
|
// node (a parent of one or more similar EggPrimitives).
|
|
|
switch (egg_bin->get_bin_number()) {
|
|
switch (egg_bin->get_bin_number()) {
|
|
|
case EggBinner::BN_polyset:
|
|
case EggBinner::BN_polyset:
|
|
|
- make_polyset(egg_bin, parent, NULL, false, NULL);
|
|
|
|
|
|
|
+ make_polyset(egg_bin, parent, NULL, _dynamic_override, _dynamic_override_char_maker);
|
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
|
|
case EggBinner::BN_lod:
|
|
case EggBinner::BN_lod:
|
|
@@ -1788,8 +1791,23 @@ make_node(EggGroup *egg_group, PandaNode *parent) {
|
|
|
|
|
|
|
|
if (egg_group->get_dart_type() != EggGroup::DT_none) {
|
|
if (egg_group->get_dart_type() != EggGroup::DT_none) {
|
|
|
// A group with the <Dart> flag set means to create a character.
|
|
// A group with the <Dart> flag set means to create a character.
|
|
|
- CharacterMaker char_maker(egg_group, *this);
|
|
|
|
|
|
|
+ bool structured = (egg_group->get_dart_type() == EggGroup::DT_structured);
|
|
|
|
|
+
|
|
|
|
|
+ CharacterMaker char_maker(egg_group, *this, structured);
|
|
|
|
|
+
|
|
|
node = char_maker.make_node();
|
|
node = char_maker.make_node();
|
|
|
|
|
+ if(structured) {
|
|
|
|
|
+ //we're going to generate the rest of the children normally
|
|
|
|
|
+ //except we'll be making dynamic geometry
|
|
|
|
|
+ _dynamic_override = true;
|
|
|
|
|
+ _dynamic_override_char_maker = &char_maker;
|
|
|
|
|
+ EggGroup::const_iterator ci;
|
|
|
|
|
+ for (ci = egg_group->begin(); ci != egg_group->end(); ++ci) {
|
|
|
|
|
+ make_node(*ci, node);
|
|
|
|
|
+ }
|
|
|
|
|
+ _dynamic_override_char_maker = NULL;
|
|
|
|
|
+ _dynamic_override = false;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
} else if (egg_group->get_cs_type() != EggGroup::CST_none) {
|
|
} else if (egg_group->get_cs_type() != EggGroup::CST_none) {
|
|
|
// A collision group: create collision geometry.
|
|
// A collision group: create collision geometry.
|