| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /* $Header: /Commando/Code/Tools/max2w3d/nodefilt.cpp 9 1/16/98 10:34a Greg_h $ */
- /***********************************************************************************************
- *** Confidential - Westwood Studios ***
- ***********************************************************************************************
- * *
- * Project Name : Commando / G *
- * *
- * File Name : NODEFILT.CPP *
- * *
- * Programmer : Greg Hjelstrom *
- * *
- * Start Date : 06/09/97 *
- * *
- * Last Update : June 9, 1997 [GH] *
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * VisibleMeshINodeFilter::Accept_Node -- Accepts visible meshes *
- * AnimatedINodeFilter::Accept_Node -- Accepts animated INodes *
- * RootINodeFilter::Accept_Node -- Accepts root INodes *
- * VisibleHelperINodeFilter::Accept_Node -- Accepts visible helper objects *
- * VisibleMeshOrHelperINodeFilter::Accept_Node -- Accepts visible helper or mesh objects *
- * HelperINodeFilter::Accept_Node -- Accepts all helper inodes (including hidden) *
- * MeshINodeFilter::Accept_Node -- Accepts all mesh inodes (including hidden) *
- * VisibleSelectedINodeFilter::Accept_Node -- Accepts Visible and selected inodes *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #include "nodefilt.h"
- #include <istdplug.h>
- /*
- ** The default node filter:
- */
- VisibleMeshINodeFilter DefaultINodeFilter;
- /***********************************************************************************************
- * HelperINodeFilter::Accept_Node -- Accepts all helper inodes (including hidden) *
- * *
- * INPUT: *
- * *
- * OUTPUT: *
- * *
- * WARNINGS: *
- * *
- * HISTORY: *
- * 07/10/1997 GH : Created. *
- *=============================================================================================*/
- BOOL HelperINodeFilter::Accept_Node(INode * node,TimeValue time)
- {
- Object * obj = node->EvalWorldState(time).obj;
- if (obj && obj->SuperClassID() == HELPER_CLASS_ID) {
-
- return TRUE;
- }
- return FALSE;
- }
- /***********************************************************************************************
- * MeshINodeFilter::Accept_Node -- Accepts all mesh inodes (including hidden) *
- * *
- * INPUT: *
- * *
- * OUTPUT: *
- * *
- * WARNINGS: *
- * *
- * HISTORY: *
- * 07/10/1997 GH : Created. *
- *=============================================================================================*/
- BOOL MeshINodeFilter::Accept_Node(INode * node,TimeValue time)
- {
- Object * obj = node->EvalWorldState(time).obj;
- if (obj &&
- obj->CanConvertToType(triObjectClassID) &&
- obj->SuperClassID() == GEOMOBJECT_CLASS_ID)
- {
- return TRUE;
- } else {
- return FALSE;
- }
- }
- /***********************************************************************************************
- * VisibleMeshINodeFilter::Accept_Node -- Accepts visible meshes *
- * *
- * Accepts nodes which: *
- * - can be converted to tri-meshes *
- * - are not hidden *
- * - whose visibility > 0.0 *
- * *
- * INPUT: *
- * *
- * OUTPUT: *
- * *
- * WARNINGS: *
- * *
- * HISTORY: *
- * 06/09/1997 GH : Created. *
- *=============================================================================================*/
- BOOL VisibleMeshINodeFilter::Accept_Node(INode * node, TimeValue time)
- {
- Object * obj = node->EvalWorldState(time).obj;
- if
- (
- obj
- && !node->IsHidden ()
- && obj->CanConvertToType(triObjectClassID)
- && obj->SuperClassID() == GEOMOBJECT_CLASS_ID
- // && node->GetVisibility (time) > 0.0f
- )
- {
- return TRUE;
- } else {
- return FALSE;
- }
- }
- /***********************************************************************************************
- * VisibleHelperINodeFilter::Accept_Node -- Accepts visible helper objects *
- * *
- * INPUT: *
- * *
- * OUTPUT: *
- * *
- * WARNINGS: *
- * *
- * HISTORY: *
- * 07/03/1997 GH : Created. *
- *=============================================================================================*/
- BOOL VisibleHelperINodeFilter::Accept_Node(INode * node, TimeValue time)
- {
- Object * obj = node->EvalWorldState(time).obj;
- if ((!obj) || (node->IsHidden()) /*|| (node->GetVisibility(time) <= 0.0f)*/) {
-
- return FALSE;
- }
- if (obj->SuperClassID() == HELPER_CLASS_ID) {
-
- return TRUE;
- }
- return FALSE;
- }
- /***********************************************************************************************
- * VisibleMeshOrHelperINodeFilter::Accept_Node -- Accepts visible helper or mesh objects *
- * *
- * INPUT: *
- * *
- * OUTPUT: *
- * *
- * WARNINGS: *
- * *
- * HISTORY: *
- * 07/03/1997 GH : Created. *
- *=============================================================================================*/
- BOOL VisibleMeshOrHelperINodeFilter::Accept_Node(INode * node, TimeValue time)
- {
- Object * obj = node->EvalWorldState(time).obj;
- if ((!obj) || (node->IsHidden()) /*|| (node->GetVisibility(time) <= 0.0f)*/) {
-
- return FALSE;
- }
- if (obj->CanConvertToType(triObjectClassID) && obj->SuperClassID() == GEOMOBJECT_CLASS_ID) {
- return TRUE;
- }
- if (obj->SuperClassID() == HELPER_CLASS_ID) {
-
- return TRUE;
- }
- return FALSE;
- }
- /***********************************************************************************************
- * AnimatedINodeFilter::Accept_Node -- Accepts animated INodes *
- * *
- * Accepts nodes which: *
- * - can be converted to tri-meshes *
- * - are not hidden *
- * - whose visibility > 0.0 *
- * - have animation keys! *
- * *
- * INPUT: *
- * *
- * OUTPUT: *
- * *
- * WARNINGS: *
- * *
- * HISTORY: *
- * 06/09/1997 GH : Created. *
- *=============================================================================================*/
- BOOL AnimatedINodeFilter::Accept_Node(INode * node, TimeValue time)
- {
- Object * obj = node->EvalWorldState(time).obj;
- Control * poscon = node->GetTMController()->GetPositionController();
- Control * rotcon = node->GetTMController()->GetRotationController();
-
- int numkeys = 0;
- if (poscon != NULL) {
- IKeyControl * poskeys = GetKeyControlInterface(poscon);
- if (poskeys != NULL) numkeys += poskeys->GetNumKeys();
- }
-
- if (rotcon != NULL) {
- IKeyControl * rotkeys = GetKeyControlInterface(rotcon);
- if (rotkeys != NULL) numkeys += rotkeys->GetNumKeys();
- }
- if (obj && !node->IsHidden() && numkeys > 0) {
- return TRUE;
- }
-
- return FALSE;
- }
- /***********************************************************************************************
- * VisibleSelectedINodeFilter::Accept_Node -- Accepts Visible and selected inodes *
- * *
- * INPUT: *
- * *
- * OUTPUT: *
- * *
- * WARNINGS: *
- * *
- * HISTORY: *
- * 1/13/98 GTH : Created. *
- *=============================================================================================*/
- BOOL VisibleSelectedINodeFilter::Accept_Node(INode * node, TimeValue time)
- {
- if (!node->IsHidden() && node->Selected()) {
- return TRUE;
- } else {
- return FALSE;
- }
- }
|