/* ** Command & Conquer Generals(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 . */ //////////////////////////////////////////////////////////////////////////////// // // // (c) 2001-2003 Electronic Arts Inc. // // // //////////////////////////////////////////////////////////////////////////////// // FILE: W3DScene.h /////////////////////////////////////////////////////////// // // Scene manger for display using W3DDispaly. A scene manager can customize // the rendering process, culling, material passes ... // // Author: Colin Day, April 2001 // /////////////////////////////////////////////////////////////////////////////// #pragma once #ifndef __W3DSCENE_H_ #define __W3DSCENE_H_ // SYSTEM INCLUDES //////////////////////////////////////////////////////////// // USER INCLUDES ////////////////////////////////////////////////////////////// #include "WW3D2/Scene.h" #include "WW3D2/RInfo.h" #include "WW3D2/Coltest.h" #include "WW3D2/lightenvironment.h" /////////////////////////////////////////////////////////////////////////////// // PROTOTYPES ///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// class W3DDynamicLight; class LightClass; class Drawable; enum CustomScenePassModes; class MaterialPassClass; class W3DShroudMaterialPassClass; class W3DMaskMaterialPassClass; //----------------------------------------------------------------------------- // RTS3DScene //----------------------------------------------------------------------------- /** Scene management for 3D RTS game */ //----------------------------------------------------------------------------- class RTS3DScene : public SimpleSceneClass, public SubsystemInterface { public: RTS3DScene(); ///< RTSScene constructor ~RTS3DScene(); ///< RTSScene desctructor /// ray picking against objects in scene Bool castRay(RayCollisionTestClass & raytest, Bool testAll, Int collisionType); /// customizable renderer for the RTS3DScene virtual void Customized_Render( RenderInfoClass &rinfo ); virtual void Visibility_Check(CameraClass * camera); virtual void Render(RenderInfoClass & rinfo); void setCustomPassMode (CustomScenePassModes mode) {m_customPassMode = mode;} CustomScenePassModes getCustomPassMode (void) {return m_customPassMode;} void Flush(RenderInfoClass & rinfo); //draw queued up models. /// Drawing control method void drawTerrainOnly(Bool draw) {m_drawTerrainOnly = draw;}; /// Drawing control method void renderSpecificDrawables(RenderInfoClass &rinfo, Int numDrawables, Drawable **theDrawables) ; /// Lighting methods void addDynamicLight(W3DDynamicLight * obj); void removeDynamicLight(W3DDynamicLight * obj); RefRenderObjListIterator * createLightsIterator(void); void destroyLightsIterator(RefRenderObjListIterator * it); RefRenderObjListClass *getDynamicLights(void) {return &m_dynamicLightList;}; W3DDynamicLight *getADynamicLight(void); void setGlobalLight(LightClass *pLight,Int lightIndex=0); LightEnvironmentClass &getDefaultLightEnv(void) {return m_defaultLightEnv;} void init() {} void update() {} void draw(); void reset(){} void doRender(CameraClass * cam); protected: void renderOneObject(RenderInfoClass &rinfo, RenderObjClass *robj, Int localPlayerIndex); void updateFixedLightEnvironments(RenderInfoClass & rinfo); void flushTranslucentObjects(RenderInfoClass & rinfo); void flushOccludedObjects(RenderInfoClass & rinfo); void flagOccludedObjects(CameraClass * camera); void flushOccludedObjectsIntoStencil(RenderInfoClass & rinfo); void updatePlayerColorPasses(void); protected: RefRenderObjListClass m_dynamicLightList; Bool m_drawTerrainOnly; LightClass *m_globalLight[LightEnvironmentClass::MAX_LIGHTS]; ///< The global directional light (sun, moon) Applies to objects. LightClass *m_scratchLight; ///< a workspace for copying global lights and modifying // MLorenzen Vector3 m_infantryAmbient; ///