瀏覽代碼

support multiple collide flags on a node

David Rose 23 年之前
父節點
當前提交
2db50240ac
共有 2 個文件被更改,包括 6 次插入6 次删除
  1. 3 3
      panda/src/egg/eggGroup.I
  2. 3 3
      panda/src/egg/parser.yxx

+ 3 - 3
panda/src/egg/eggGroup.I

@@ -485,6 +485,7 @@ set_collide_mask(CollideMask mask) {
 INLINE void EggGroup::
 clear_collide_mask() {
   _flags2 &= ~F2_collide_mask;
+  _collide_mask = CollideMask::all_off();
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -504,7 +505,6 @@ has_collide_mask() const {
 ////////////////////////////////////////////////////////////////////
 INLINE CollideMask EggGroup::
 get_collide_mask() const {
-  nassertr(has_collide_mask(), CollideMask());
   return _collide_mask;
 }
 
@@ -527,6 +527,7 @@ set_from_collide_mask(CollideMask mask) {
 INLINE void EggGroup::
 clear_from_collide_mask() {
   _flags2 &= ~F2_from_collide_mask;
+  _from_collide_mask = CollideMask::all_off();
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -546,7 +547,6 @@ has_from_collide_mask() const {
 ////////////////////////////////////////////////////////////////////
 INLINE CollideMask EggGroup::
 get_from_collide_mask() const {
-  nassertr(has_from_collide_mask(), CollideMask());
   return _from_collide_mask;
 }
 
@@ -569,6 +569,7 @@ set_into_collide_mask(CollideMask mask) {
 INLINE void EggGroup::
 clear_into_collide_mask() {
   _flags2 &= ~F2_into_collide_mask;
+  _into_collide_mask = CollideMask::all_off();
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -588,7 +589,6 @@ has_into_collide_mask() const {
 ////////////////////////////////////////////////////////////////////
 INLINE CollideMask EggGroup::
 get_into_collide_mask() const {
-  nassertr(has_into_collide_mask(), CollideMask());
   return _into_collide_mask;
 }
 

+ 3 - 3
panda/src/egg/parser.yxx

@@ -906,11 +906,11 @@ group_body:
   } else if (cmp_nocase_uh(name, "bin") == 0) {
     group->set_bin(strval);
   } else if (cmp_nocase_uh(name, "collide_mask") == 0) {
-    group->set_collide_mask(ulong_value);
+    group->set_collide_mask(group->get_collide_mask() | ulong_value);
   } else if (cmp_nocase_uh(name, "from_collide_mask") == 0) {
-    group->set_from_collide_mask(ulong_value);
+    group->set_from_collide_mask(group->get_from_collide_mask() | ulong_value);
   } else if (cmp_nocase_uh(name, "into_collide_mask") == 0) {
-    group->set_into_collide_mask(ulong_value);
+    group->set_into_collide_mask(group->get_into_collide_mask() | ulong_value);
   } else {
     eggyywarning("Unknown group scalar " + name);
   }