Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
w3dappdata.cpp
Go to the documentation of this file.
1/*
2** Command & Conquer Generals Zero Hour(tm)
3** Copyright 2025 Electronic Arts Inc.
4**
5** This program is free software: you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation, either version 3 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19/***********************************************************************************************
20 *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
21 ***********************************************************************************************
22 * *
23 * Project Name : Max2W3d *
24 * *
25 * $Archive:: /Commando/Code/Tools/max2w3d/w3dappdata.cpp $*
26 * *
27 * Original Author:: Greg Hjelstrom *
28 * *
29 * $Author:: Greg_h $*
30 * *
31 * $Modtime:: 8/21/01 9:45a $*
32 * *
33 * $Revision:: 9 $*
34 * *
35 *---------------------------------------------------------------------------------------------*
36 * Functions: *
37 * Is_Bone -- check if a node is a "bone" *
38 * Is_Geometry -- Check if an INode is marked for "geometry" export *
39 * Is_Normal_Mesh -- check if a node is a mesh *
40 * Is_Camera_Aligned_Mesh -- check if a node is to be a camera aligned mesh *
41 * Is_Camera_Oriented_Mesh -- check if a node is to be a camera oriented mesh *
42 * Is_Collision_AABox -- check if a node is a collision box mesh *
43 * Is_Collision_OBBox -- check if a node is a collision box mesh *
44 * Is_Skin -- check if a node is a skin *
45 * Is_Shadow -- check if a node marked to cast shadows *
46 * Is_Damage -- check if a node is a damage version of a mesh *
47 * Is_Damage_For_Mesh -- check if a node is a damage version of a particular mesh *
48 * Is_Physical_Collision -- Is node categorized as "physical collision geometry" *
49 * Is_Projectile_Collision -- Is node categorized as "projectile collision geometry"? *
50 * Is_Vis_Collision -- Is node categorized as "vis collision geometry"? *
51 * Is_Camera_Collision -- Is node categorized as "camera collision geometry"? *
52 * Is_Hidden -- checks whether the node should be hidden *
53 * Is_Two_Sided -- Checks whether the node should be two sided *
54 * Is_ZNormals -- checks if the node should be exported with 0,0,1 vert normals *
55 * Is_Dazzle -- check if a node is a dazzle object *
56 * Is_Aggregate -- check if a node is an aggregate object *
57 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
58
59#include "w3dappdata.h"
60#include "w3dutil.h"
61#include "util.h"
62#include "modstack.h"
63
64
65/***********************************************************************************************
66**
67** W3DAppData2Struct Implementation
68**
69***********************************************************************************************/
70
71/*
72** Current version of the W3dAppData2 structure
73** History:
74** version 0 - initial implementation.
75** version 1 - added camera collision option, initialize to match physical collision settting
76** when converting from version 0.
77*/
79
80
81
91
93 ExportFlags(0),
94 GeometryType(0),
97{
98 memset(UnUsed,0,sizeof(UnUsed));
99 Init_From_AppData0(olddata);
100}
101
112
114{
115 ExportFlags = 0;
116 GeometryType = 0;
117 GeometryFlags = 0;
118 CollisionFlags = 0;
119 memset(UnUsed,0,sizeof(UnUsed));
120
122}
123
162
164{
165 /*
166 ** If this is a version 0 struct, We need to initialize the camera collision
167 ** setting to be equal to the physical collision setting and convert to version 1
168 */
169 if (Get_Version() == 0) {
171 Set_Version(1);
172 }
173
174 /*
175 ** Add future version conversion code here!
176 */
177}
178
180{
181 /*
182 ** Export flags have to match
183 */
184 if (ExportFlags != that.ExportFlags) return false;
185
186 /*
187 ** If geometry is enabled, verify the geometry type and options
188 */
189 if (Is_Geometry()) {
190 if (Get_Geometry_Type() != that.Get_Geometry_Type()) return false;
191 if (GeometryFlags != that.GeometryFlags) return false;
192 if (CollisionFlags != that.CollisionFlags) return false;
193 }
194
195 return true;
196}
197
199{
200 if (Get_Geometry_Type() != that.Get_Geometry_Type()) return false;
201 if (GeometryFlags != that.GeometryFlags) return false;
202 if (CollisionFlags != that.CollisionFlags) return false;
203 return true;
204}
205
206
208(
209 INode * node,
210 bool create_if_missing
211)
212{
213 /*
214 ** Try to get our AppData which has the export flags
215 */
216 W3DAppData2Struct * wdata = NULL;
217 AppDataChunk * appdata = node->GetAppDataChunk(W3DUtilityClassID,UTILITY_CLASS_ID,W3D_APPDATA_2);
218
219 /*
220 ** If there wasn't one, look for an AppData0 chunk and convert that.
221 ** If there was one, get the data from it
222 */
223 if (appdata) {
224
225 wdata = (W3DAppData2Struct *)(appdata->data);
226 wdata->Update_Version();
227
228 } else {
229
230 /*
231 ** Create a new W3DAppData2Struct for this node
232 */
233 wdata = (W3DAppData2Struct *)malloc(sizeof(W3DAppData2Struct));
234
235 /*
236 ** If we have the old AppData0 then initialize from it otherwise
237 ** just initialize to the defaults
238 */
239 AppDataChunk * oldappdata = node->GetAppDataChunk(W3DUtilityClassID,UTILITY_CLASS_ID,W3D_APPDATA_0);
240 if (oldappdata) {
241
242 /*
243 ** initializing from the old app data 0 chunk;
244 */
245 wdata->Init_From_AppData0(*(W3DAppData0Struct*)(oldappdata->data));
246
247 /*
248 ** Destroy the old obsolete App Data 0 chunk
249 */
250 node->RemoveAppDataChunk(W3DUtilityClassID, UTILITY_CLASS_ID, W3D_APPDATA_0);
251
252 } else {
253
254 /*
255 ** If this object looks like it is going to be a mesh, then default
256 ** it to have the mesh export flags (export its transform and the
257 ** triangle mesh). Otherwise use the default of completely ignoring it!
258 */
259 if (Is_Max_Tri_Mesh(node)) {
261 } else {
263 }
264
265 }
266 node->AddAppDataChunk(W3DUtilityClassID,UTILITY_CLASS_ID,2,sizeof(W3DAppData2Struct),wdata);
267 appdata = node->GetAppDataChunk(W3DUtilityClassID,UTILITY_CLASS_ID,2);
268 assert(appdata);
269
270 }
271
272 return wdata;
273}
274
275
276/***********************************************************************************************
277**
278** W3DDazzleAppDataStruct Implementation
279**
280***********************************************************************************************/
282{
283 UnUsed[0] = 0;
284 UnUsed[1] = 0;
285 UnUsed[2] = 0;
286 UnUsed[3] = 0;
287 memset(DazzleType,0,sizeof(DazzleType));
288 strcpy(DazzleType,"DEFAULT");
289}
290
291
293{
294 /*
295 ** Try to get the existing AppData chunk
296 */
297 W3DDazzleAppDataStruct * dazzledata = NULL;
298 AppDataChunk * appdata = node->GetAppDataChunk(W3DUtilityClassID,UTILITY_CLASS_ID,W3D_DAZZLE_APPDATA);
299
300 if (appdata) {
301
302 /*
303 ** Found it, get the pointer to the dazzle data
304 */
305 dazzledata = (W3DDazzleAppDataStruct *)(appdata->data);
306
307 } else if (create_if_missing) {
308
309 /*
310 ** Create a new W3DDazzleAppDataStruct for this node
311 */
312 dazzledata = new W3DDazzleAppDataStruct;
313 node->AddAppDataChunk(W3DUtilityClassID,UTILITY_CLASS_ID,W3D_DAZZLE_APPDATA,sizeof(W3DDazzleAppDataStruct),dazzledata);
314
315 appdata = node->GetAppDataChunk(W3DUtilityClassID,UTILITY_CLASS_ID,W3D_DAZZLE_APPDATA);
316 assert(appdata);
317 }
318 return dazzledata;
319}
320
321
322
323
324
325/***********************************************************************************************
326**
327** Utility functions for reading the W3D options that are set for a given INode
328**
329***********************************************************************************************/
330
331static int get_geometry_type(INode * node)
332{
333 assert(node != NULL);
335}
336
337/***********************************************************************************************
338 * Is_Bone -- check if a node is a "bone" *
339 * *
340 * INPUT: *
341 * *
342 * OUTPUT: *
343 * *
344 * WARNINGS: *
345 * *
346 * HISTORY: *
347 * 10/26/1997 GH : Created. *
348 *=============================================================================================*/
349bool Is_Bone(INode * node)
350{
351 /*
352 ** regardless of the bits, skins should not have their transform exported.
353 */
354 if (Is_Skin(node)) return false;
355 if (Is_Origin(node)) return false;
356 //if (Is_Proxy(*node)) return false;
357 else return (W3DAppData2Struct::Get_App_Data(node)->Is_Bone());
358}
359
360/***********************************************************************************************
361 * Is_Geometry -- Check if an INode is marked for "geometry" export *
362 * *
363 * INPUT: *
364 * *
365 * OUTPUT: *
366 * *
367 * WARNINGS: *
368 * *
369 * HISTORY: *
370 * 1/13/98 GTH : Created. *
371 *=============================================================================================*/
372bool Is_Geometry(INode * node)
373{
375}
376
377/***********************************************************************************************
378 * Is_Mesh -- check if a node is a mesh *
379 * *
380 * INPUT: *
381 * *
382 * OUTPUT: *
383 * *
384 * WARNINGS: *
385 * *
386 * HISTORY: *
387 * 10/26/1997 GH : Created. *
388 *=============================================================================================*/
389bool Is_Normal_Mesh(INode * node)
390{
391 if (!Is_Geometry(node)) return false;
392 if (Is_Skin(node)) return false;
393 if (Is_Proxy(*node)) return false;
394 return (get_geometry_type(node) == W3DAppData2Struct::GEO_TYPE_NORMAL_MESH);
395}
396
397
398/***********************************************************************************************
399 * Is_Camera_Aligned_Mesh -- check if a node is to be a camera aligned mesh *
400 * *
401 * INPUT: *
402 * *
403 * OUTPUT: *
404 * *
405 * WARNINGS: *
406 * *
407 * HISTORY: *
408 * 5/5/98 GTH : Created. *
409 *=============================================================================================*/
410bool Is_Camera_Aligned_Mesh(INode * node)
411{
412 if (!Is_Geometry(node)) return false;
413 return (get_geometry_type(node) == W3DAppData2Struct::GEO_TYPE_CAMERA_ALIGNED);
414}
415
416/***********************************************************************************************
417 * Is_Camera_Oriented_Mesh -- check if a node is to be a camera oriented mesh *
418 * *
419 * INPUT: *
420 * *
421 * OUTPUT: *
422 * *
423 * WARNINGS: *
424 * *
425 * HISTORY: *
426 * 3/2/99 NH : Created. *
427 *=============================================================================================*/
428bool Is_Camera_Oriented_Mesh(INode * node)
429{
430 if (!Is_Geometry(node)) return false;
431 return (get_geometry_type(node) == W3DAppData2Struct::GEO_TYPE_CAMERA_ORIENTED);
432}
433
434/***********************************************************************************************
435 * Is_Collision_AABox -- check if a node is a collision box *
436 * *
437 * INPUT: *
438 * *
439 * OUTPUT: *
440 * *
441 * WARNINGS: *
442 * *
443 * HISTORY: *
444 * 10/26/1997 GH : Created. *
445 *=============================================================================================*/
446bool Is_Collision_AABox(INode * node)
447{
448 if (!Is_Geometry(node)) return false;
449 return (get_geometry_type(node) == W3DAppData2Struct::GEO_TYPE_AABOX);
450}
451
452
453/***********************************************************************************************
454 * Is_Collision_OBBox -- check if a node is a collision box *
455 * *
456 * INPUT: *
457 * *
458 * OUTPUT: *
459 * *
460 * WARNINGS: *
461 * *
462 * HISTORY: *
463 * 11/17/1998 GH : Created. *
464 *=============================================================================================*/
465bool Is_Collision_OBBox(INode * node)
466{
467 if (!Is_Geometry(node)) return false;
468 return (get_geometry_type(node) == W3DAppData2Struct::GEO_TYPE_OBBOX);
469}
470
471/***********************************************************************************************
472 * Is_Skin -- check if a node is a skin *
473 * *
474 * INPUT: *
475 * *
476 * OUTPUT: *
477 * *
478 * WARNINGS: *
479 * *
480 * HISTORY: *
481 * 10/26/1997 GH : Created. *
482 *=============================================================================================*/
483bool Is_Skin(INode * node)
484{
485 if (!Is_Geometry(node)) return false;
486 if (get_geometry_type(node) != W3DAppData2Struct::GEO_TYPE_NORMAL_MESH) return false;
487
488 for (int i = 0; i < node->NumRefs(); i++) {
489
490 ReferenceTarget *refTarg = node->GetReference(i);
491
492 if (refTarg != NULL && refTarg->ClassID() == Class_ID(WSM_DERIVOB_CLASS_ID,0)) {
493
494 IDerivedObject * wsm_der_obj = (IDerivedObject *)refTarg;
495 //MessageBox(NULL, "WSM found", _T("WSM"), MB_OK);
496
497 for (int j = 0; j < wsm_der_obj->NumModifiers(); j++) {
498 Modifier * mod = wsm_der_obj->GetModifier(j);
499 if (mod->ClassID() == SKIN_MOD_CLASS_ID) {
500 return true;
501 }
502 }
503 }
504 }
505
506 return false;
507}
508
509/***********************************************************************************************
510 * Is_Shadow -- check if a node marked to cast shadows *
511 * *
512 * INPUT: *
513 * *
514 * OUTPUT: *
515 * *
516 * WARNINGS: *
517 * *
518 * HISTORY: *
519 * 10/26/1997 GH : Created. *
520 *=============================================================================================*/
521bool Is_Shadow(INode * node)
522{
523 if (!Is_Geometry(node)) return false;
525 return (wdata->Is_Shadow_Enabled());
526}
527
528/***********************************************************************************************
529 * Is_Null_Object -- check if a node is a null object *
530 * *
531 * INPUT: *
532 * *
533 * OUTPUT: *
534 * *
535 * WARNINGS: *
536 * *
537 * HISTORY: *
538 * 10/26/1997 GH : Created. *
539 *=============================================================================================*/
540bool Is_Null_Object(INode * node)
541{
542 if (!Is_Geometry(node)) return false;
543 return (get_geometry_type(node) == W3DAppData2Struct::GEO_TYPE_NULL);
544}
545
546
547/***********************************************************************************************
548 * Is_Dazzle -- check if a node is a dazzle object *
549 * *
550 * INPUT: *
551 * *
552 * OUTPUT: *
553 * *
554 * WARNINGS: *
555 * *
556 * HISTORY: *
557 * 8/5/2000 gth : Created. *
558 *=============================================================================================*/
559bool Is_Dazzle(INode * node)
560{
561 if (!Is_Geometry(node)) return false;
562 return (get_geometry_type(node) == W3DAppData2Struct::GEO_TYPE_DAZZLE);
563}
564
565
566/***********************************************************************************************
567 * Is_Aggregate -- check if a node is an aggregate object *
568 * *
569 * INPUT: *
570 * *
571 * OUTPUT: *
572 * *
573 * WARNINGS: *
574 * *
575 * HISTORY: *
576 * 10/24/2000 gth : Created. *
577 *=============================================================================================*/
578bool Is_Aggregate(INode * node)
579{
580 if (!Is_Geometry(node)) return false;
581 return (get_geometry_type(node) == W3DAppData2Struct::GEO_TYPE_AGGREGATE);
582}
583
584/***********************************************************************************************
585 * Is_Physical_Collision -- Is node categorized as "physical collision geometry" *
586 * *
587 * INPUT: *
588 * *
589 * OUTPUT: *
590 * *
591 * WARNINGS: *
592 * *
593 * HISTORY: *
594 * 1/23/98 GTH : Created. *
595 *=============================================================================================*/
596bool Is_Physical_Collision(INode * node)
597{
599 return (wdata->Is_Physical_Collision_Enabled());
600}
601
602
603/***********************************************************************************************
604 * Is_Projectile_Collision -- Is node categorized as "projectile collision geometry"? *
605 * *
606 * INPUT: *
607 * *
608 * OUTPUT: *
609 * *
610 * WARNINGS: *
611 * *
612 * HISTORY: *
613 * 1/23/98 GTH : Created. *
614 *=============================================================================================*/
615bool Is_Projectile_Collision(INode * node)
616{
618 return (wdata->Is_Projectile_Collision_Enabled());
619}
620
621
622/***********************************************************************************************
623 * Is_Projectile_Collision -- Is node categorized as "vis collision geometry"? *
624 * *
625 * INPUT: *
626 * *
627 * OUTPUT: *
628 * *
629 * WARNINGS: *
630 * *
631 * HISTORY: *
632 * 1/23/98 GTH : Created. *
633 *=============================================================================================*/
634bool Is_Vis_Collision(INode * node)
635{
637 return (wdata->Is_Vis_Collision_Enabled());
638}
639
640
641/***********************************************************************************************
642 * Is_Camera_Collision -- Is node categorized as "camera collision geometry"? *
643 * *
644 * INPUT: *
645 * *
646 * OUTPUT: *
647 * *
648 * WARNINGS: *
649 * *
650 * HISTORY: *
651 * 8/4/2000 gth : Created. *
652 *=============================================================================================*/
653bool Is_Camera_Collision(INode * node)
654{
656 return (wdata->Is_Camera_Collision_Enabled());
657}
658
659/***********************************************************************************************
660 * Is_Vehicle_Collision -- Is node categorized as "Vehicle collision geometry"? *
661 * *
662 * INPUT: *
663 * *
664 * OUTPUT: *
665 * *
666 * WARNINGS: *
667 * *
668 * HISTORY: *
669 * 8/4/2000 gth : Created. *
670 *=============================================================================================*/
671bool Is_Vehicle_Collision(INode * node)
672{
674 return (wdata->Is_Vehicle_Collision_Enabled());
675}
676
677/***********************************************************************************************
678 * Is_Hidden -- checks whether the node should be hidden *
679 * *
680 * INPUT: *
681 * *
682 * OUTPUT: *
683 * *
684 * WARNINGS: *
685 * This has nothing to do with its hidden status inside of max. Things hidden in max are *
686 * ignored by the exporter. (artist request way back...wierd huh?) *
687 * *
688 * HISTORY: *
689 * 11/18/98 GTH : Created. *
690 *=============================================================================================*/
691bool Is_Hidden(INode * node)
692{
694 return (wdata->Is_Hidden_Enabled());
695}
696
697
698/***********************************************************************************************
699 * Is_Two_Sided -- Checks whether the node should be two sided *
700 * *
701 * INPUT: *
702 * *
703 * OUTPUT: *
704 * *
705 * WARNINGS: *
706 * *
707 * HISTORY: *
708 * 11/18/98 GTH : Created. *
709 *=============================================================================================*/
710bool Is_Two_Sided(INode * node)
711{
713 return (wdata->Is_Two_Sided_Enabled());
714}
715
716
717/***********************************************************************************************
718 * Is_ZNormals -- checks if the node should be exported with 0,0,1 vert normals *
719 * *
720 * INPUT: *
721 * *
722 * OUTPUT: *
723 * *
724 * WARNINGS: *
725 * *
726 * HISTORY: *
727 * 2/9/99 GTH : Created. *
728 *=============================================================================================*/
729bool Is_ZNormals(INode * node)
730{
732 return (wdata->Is_ZNormals_Enabled());
733}
734
735
736bool Is_Vertex_Alpha(INode * node)
737{
739 return (wdata->Is_Vertex_Alpha_Enabled());
740}
741
742bool Is_Shatterable(INode * node)
743{
745 return (wdata->Is_Shatterable_Enabled());
746}
747
748bool Is_NPatchable(INode * node)
749{
751 return (wdata->Is_NPatchable_Enabled());
752}
753
754
755
756
#define NULL
Definition BaseType.h:92
#define SKIN_MOD_CLASS_ID
Definition skin.h:50
bool Is_Collision_AABox(void)
Definition w3dappdata.h:197
bool Is_Normal_Mesh(void)
Definition w3dappdata.h:194
bool Is_Vis_Collision(void)
Definition w3dappdata.h:203
bool Is_Hidden(void)
Definition w3dappdata.h:205
bool Is_ZNormals(void)
Definition w3dappdata.h:208
bool Is_Physical_Collision(void)
Definition w3dappdata.h:201
bool Is_Bone(void)
Definition w3dappdata.h:191
bool Is_Vertex_Alpha(void)
Definition w3dappdata.h:207
bool Is_Camera_Aligned_Mesh(void)
Definition w3dappdata.h:195
bool Is_Projectile_Collision(void)
Definition w3dappdata.h:202
bool Is_Two_Sided(void)
Definition w3dappdata.h:206
bool Is_Geometry(void)
Definition w3dappdata.h:192
bool Is_Null(void)
Definition w3dappdata.h:199
bool Is_Camera_Oriented_Mesh(void)
Definition w3dappdata.h:196
bool Is_Shadow(void)
Definition w3dappdata.h:209
bool Is_Collision_OBBox(void)
Definition w3dappdata.h:198
void Enable_Export_Transform(bool onoff)
Definition w3dappdata.h:307
int Get_Geometry_Type(void) const
Definition w3dappdata.h:281
void Enable_Projectile_Collision(bool onoff)
Definition w3dappdata.h:321
void Enable_Export_Geometry(bool onoff)
Definition w3dappdata.h:308
void Enable_Two_Sided(bool onoff)
Definition w3dappdata.h:313
void Enable_Camera_Collision(bool onoff)
Definition w3dappdata.h:323
void Set_Geometry_Type(GeometryTypeEnum type)
Definition w3dappdata.h:310
bool Is_Physical_Collision_Enabled(void) const
Definition w3dappdata.h:298
bool Is_Vertex_Alpha_Enabled(void) const
Definition w3dappdata.h:292
void Init_With_Mesh_Defaults(void)
int Get_Version(void)
Definition w3dappdata.h:342
bool operator==(const W3DAppData2Struct &that)
bool Is_NPatchable_Enabled(void) const
Definition w3dappdata.h:296
void Enable_Vis_Collision(bool onoff)
Definition w3dappdata.h:322
void Init_With_Other_Defaults(void)
void Init_From_AppData0(W3DAppData0Struct &olddata)
void Set_Version(int ver)
Definition w3dappdata.h:341
bool Is_Geometry(void) const
Definition w3dappdata.h:279
unsigned int CollisionFlags
Definition w3dappdata.h:376
unsigned int GeometryType
Definition w3dappdata.h:374
void Update_Version(void)
static W3DAppData2Struct * Get_App_Data(INode *node, bool create_if_missing=true)
void Enable_Physical_Collision(bool onoff)
Definition w3dappdata.h:320
void Enable_Shadow(bool onoff)
Definition w3dappdata.h:314
unsigned int GeometryFlags
Definition w3dappdata.h:375
bool Is_ZNormals_Enabled(void) const
Definition w3dappdata.h:293
bool Is_Vis_Collision_Enabled(void) const
Definition w3dappdata.h:300
unsigned int UnUsed[4]
Definition w3dappdata.h:379
bool Is_Two_Sided_Enabled(void) const
Definition w3dappdata.h:291
bool Is_Hidden_Enabled(void) const
Definition w3dappdata.h:290
bool Is_Shatterable_Enabled(void) const
Definition w3dappdata.h:295
void Enable_ZNormals(bool onoff)
Definition w3dappdata.h:316
unsigned int ExportFlags
Definition w3dappdata.h:373
bool Geometry_Options_Match(const W3DAppData2Struct &that)
void Enable_Hidden(bool onoff)
Definition w3dappdata.h:312
bool Is_Camera_Collision_Enabled(void) const
Definition w3dappdata.h:301
void Enable_Vertex_Alpha(bool onoff)
Definition w3dappdata.h:315
bool Is_Vehicle_Collision_Enabled(void) const
Definition w3dappdata.h:302
bool Is_Shadow_Enabled(void) const
Definition w3dappdata.h:294
bool Is_Projectile_Collision_Enabled(void) const
Definition w3dappdata.h:299
unsigned int UnUsed[4]
Definition w3dappdata.h:409
static W3DDazzleAppDataStruct * Get_App_Data(INode *node, bool create_if_missing=true)
bool Is_Origin(INode *node)
Definition util.cpp:495
bool Is_Max_Tri_Mesh(INode *node)
Definition util.cpp:441
bool Is_Collision_OBBox(INode *node)
bool Is_Dazzle(INode *node)
bool Is_Geometry(INode *node)
bool Is_Hidden(INode *node)
bool Is_Shatterable(INode *node)
bool Is_Aggregate(INode *node)
bool Is_Normal_Mesh(INode *node)
bool Is_Camera_Oriented_Mesh(INode *node)
bool Is_Camera_Aligned_Mesh(INode *node)
bool Is_Skin(INode *node)
bool Is_Null_Object(INode *node)
bool Is_Vertex_Alpha(INode *node)
bool Is_Projectile_Collision(INode *node)
bool Is_Collision_AABox(INode *node)
bool Is_Two_Sided(INode *node)
bool Is_Vis_Collision(INode *node)
bool Is_Camera_Collision(INode *node)
bool Is_Bone(INode *node)
bool Is_NPatchable(INode *node)
bool Is_Physical_Collision(INode *node)
bool Is_Shadow(INode *node)
bool Is_ZNormals(INode *node)
const int W3DAPPDATA2_CURRENT_VERSION
bool Is_Vehicle_Collision(INode *node)
bool Is_Proxy(INode &node)
Definition w3dappdata.h:120
#define W3D_APPDATA_2
Definition w3dappdata.h:51
#define W3D_APPDATA_0
Definition w3dappdata.h:49
#define W3D_DAZZLE_APPDATA
Definition w3dappdata.h:52
#define W3DUtilityClassID
Definition w3dutil.h:49