/* ** 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 . */ /*********************************************************************************************** *** 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 *** *********************************************************************************************** * * * Project Name : wwphys * * * * $Archive:: /Commando/Code/wwphys/transitioneffect.h $* * * * Original Author:: Greg Hjelstrom * * * * $Author:: Patrick $* * * * $Modtime:: 10/06/01 6:59p $* * * * $Revision:: 7 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #ifndef TRANSITIONEFFECT_H #define TRANSITIONEFFECT_H #include "always.h" #include "materialeffect.h" #include "vector2.h" #include "matrixmapper.h" class ChunkSaveClass; class ChunkLoadClass; class TextureClass; /** ** TransitionEffectClass ** This material effect can manage and display a "transition" effect for an object. ** It has a requirement that the user "timestep" it each frame so that its internal ** state gets updated. The transition is controlled by a single parameter which ** when zero, the object is invisible and when 1, the object is fully visible. */ class TransitionEffectClass : public MaterialEffectClass { public: TransitionEffectClass(void); ~TransitionEffectClass(void); virtual void Timestep(float dt); virtual void Render_Push(RenderInfoClass & rinfo,PhysClass * obj); virtual void Render_Pop(RenderInfoClass & rinfo); /* ** Initialization */ void Set_Parameter(float param) { CurrentParameter = param; } void Set_Target_Parameter(float param) { TargetParameter = param; } void Set_Texture(TextureClass * texture); void Set_Start_Delay(float seconds) { StartDelay = seconds; } void Set_Transition_Time(float seconds) { if (seconds > 0.0f) ParameterVelocity = 1.0f / seconds; } void Set_Min_UV_Velocity(const Vector2 & uv_vel) { MinUVRate = uv_vel; } void Set_Max_UV_Velocity(const Vector2 & uv_vel) { MaxUVRate = uv_vel; } void Set_Max_Intensity(float max_inten) { MaxIntensity = max_inten; } void Enable_Remove_On_Complete(bool onoff) { RemoveOnComplete = onoff; } float Get_Parameter(void) const { return CurrentParameter; } float Get_Target_Parameter(void) const { return TargetParameter; } float Get_Max_Intensity(void) const { return MaxIntensity; } float Get_Start_Delay(void) const { return StartDelay; } bool Is_Remove_On_Complete_Enabled(void) const { return RemoveOnComplete; } /* ** Save-Load support */ bool Save(ChunkSaveClass & csave); bool Load(ChunkLoadClass & cload); protected: /* ** Current State */ float CurrentParameter; float TargetParameter; /* ** Properties */ float ParameterVelocity; Vector2 MinUVRate; Vector2 MaxUVRate; Vector2 UVRate; float MaxIntensity; float StartDelay; bool RemoveOnComplete; /* ** Render State */ bool RenderBaseMaterial; bool RenderTransitionMaterial; float IntensityScale; Vector2 UVOffset; MatrixMapperClass * Mapper; MaterialPassClass * MaterialPass; }; #endif //TRANSITIONEFFECT_H