Files
firestorm/Gameleap/code/mw4/Tools/PixelWhipPro/CurveSet.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

278 lines
5.2 KiB
C++

#include "stdafx.h"
#include <GosFx\GosFx.hpp>
#include <GosFx\Card.hpp>
#include "resource.h"
#include "CurveSet.h"
#include "TextPanel.h"
#include "BlankPanel.h"
#include "DVPanel.h"
#include "TexturePanel.h"
#include "TexturePanel2.h"
#include "TFPanel.h"
#include "NumPanel.h"
#include "FloatPanel.h"
#include "ShapePanel.h"
#include "ShapeCloudPanel.h"
#include "ProfilePanel.h"
#include "EBFPanel.h"
#include "Point3DPanel.h"
#include "FloatPanel.h"
#include "EditMLRStatePanel.h"
void CurveSet::Reset()
{
StackLevel=0;
if(Stream)
{
Unregister_Object(Stream);
delete Stream;
}
EffSpec=NULL;
Curve=NULL;
Stream=NULL;
Type=BLANK;
// Min=-99999999.9f;
// Max=99999999.9f;
if(Panel)
{
delete Panel;
Panel=NULL;
}
}
void CurveSet::SetType(ConTypeTag tg,void *dat)
{
Verify(Panel==NULL);
Type=tg;
switch(Type)
{
case BLANK: Panel=new CBlankPanel; break;
case TEXT: Panel=new CTextPanel; break;
case TEXTUREBROWSER: Panel=new CTexturePanel; break;
case TEXTUREBROWSER2: Panel=new CTexturePanel2; break;
case TFPANEL: Panel=new CTFPanel; break;
case FLOATVAL: Panel=new CFloatPanel; break;
case NUMVAL: Panel=new CNumPanel; break;
case POINTPANEL: Panel=new CPoint3DPanel; break;
case SHAPEPANEL: Panel=new CShapePanel; break;
case SHAPECLOUDPANEL: Panel=new CShapeCloudPanel; break;
case EBFPANEL: Panel=new CEBFPanel; break;
case PROFILEPANEL: Panel=new CProfilePanel; break;
case CURVEPANEL: Panel=new DVPanel; break;
case MLRSTATEPANEL: Panel=new CEditMLRStatePanel; break;
default:
Panel=new CBlankPanel;
break;
}
Verify(Panel);
Panel->Set(dat);
Panel->MyCSet=this;
}
bool CurveSet::IsDataValid()
{
switch(Type)
{
case BLANK:
case TEXT:
case TEXTUREBROWSER:
case TEXTUREBROWSER2:
case TFPANEL:
case POINTPANEL:
case SHAPEPANEL:
case SHAPECLOUDPANEL:
case EBFPANEL:
case PROFILEPANEL:
case VARVAL:
case MLRSTATEPANEL:
break;
case NUMVAL:
{
CNumPanel *pan=(CNumPanel *)Panel;
// if(*(pan->intval)<Min || *(pan->intval)>Max)
// return false;
if(EffSpec!=NULL)
{
if(EffSpec->IsDataValid()==false) return false;
switch(EffSpec->GetClassID())
{
case gosFX::TubeClassID:
gosFX::Tube__Specification *tspec;
tspec=Cast_Pointer(gosFX::Tube__Specification *,EffSpec);
Check_Object(tspec);
if(!tspec->CalculateUBias(false)) return false;
break;
}
}
}
case CURVEPANEL:
{
if(EffSpec!=NULL)
{
if(!EffSpec->IsDataValid()) return false;
switch(EffSpec->GetClassID())
{
case gosFX::TubeClassID:
{
gosFX::Tube__Specification *tspec;
tspec=Cast_Pointer(gosFX::Tube__Specification *,EffSpec);
Check_Object(tspec);
if(!tspec->CalculateUBias(false)) return false;
}
break;
case gosFX::CardCloudClassID:
{
gosFX::CardCloud__Specification *tspec;
tspec=Cast_Pointer(gosFX::CardCloud__Specification *,EffSpec);
Check_Object(tspec);
tspec->SetWidth();
}
break;
case gosFX::CardClassID:
{
gosFX::Card__Specification *tspec;
tspec=Cast_Pointer(gosFX::Card__Specification *,EffSpec);
Check_Object(tspec);
tspec->SetWidth();
}
break;
}
}
}
}
return true;
}
void CurveSet::PushState()
{
if(StackLevel>0) STOP(("Nested Pushes Not Supported yet"));
Verify(!(StackLevel==0 && Stream!=NULL));
if(Stream==NULL)
{
Stream=new Stuff::DynamicMemoryStream;
Register_Object(Stream);
}
switch(Type)
{
case BLANK:
case TEXT:
case TEXTUREBROWSER:
case TEXTUREBROWSER2:
case TFPANEL:
case POINTPANEL:
case SHAPEPANEL:
case SHAPECLOUDPANEL:
case EBFPANEL:
case PROFILEPANEL:
case VARVAL:
case MLRSTATEPANEL:
case FLOATVAL:
case NUMVAL:
STOP(("Push Method Unimplemented"));
break;
case CURVEPANEL:
{
Verify(Curve);
Curve->Save(Stream);
}
}
StackLevel++;
}
void CurveSet::PopState()
{
Verify(StackLevel>0);
Check_Pointer(Stream);
Stream->Rewind();
switch(Type)
{
case BLANK:
case TEXT:
case TEXTUREBROWSER:
case TEXTUREBROWSER2:
case TFPANEL:
case POINTPANEL:
case SHAPEPANEL:
case SHAPECLOUDPANEL:
case EBFPANEL:
case PROFILEPANEL:
case VARVAL:
case MLRSTATEPANEL:
case FLOATVAL:
case NUMVAL:
STOP(("Pop Method Unimplemented"));
break;
case CURVEPANEL:
{
Verify(Curve);
Curve->Load(Stream, gosFX::CurrentGFXVersion);
}
}
StackLevel--;
if(StackLevel==0)
{
Unregister_Object(Stream);
delete Stream;
Stream=0;
}
else
if(StackLevel<0)
{
STOP(("Save State Stack Underflow"));
}
}
void CurveSet::PopNoSave()
{
Verify(StackLevel>0);
Check_Pointer(Stream);
StackLevel--;
if(StackLevel==0)
{
Unregister_Object(Stream);
delete Stream;
Stream=0;
}
else
if(StackLevel<0)
{
STOP(("Save State Stack Underflow"));
}
}
void CurveSet::VerifyAndPop()
{
if(IsDataValid())
PopNoSave();
else
PopState();
}