Files
firestorm/Gameleap/code/mw4/Code/MW4GameEd2/ObjProps.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

298 lines
8.1 KiB
C++

// ObjProps.cpp: implementation of the CObjProps class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "mw4gameed2.h"
#include"EdGameObject.h"
#include "ObjProps.h"
#include "ObjPanelDlg.h"
#include "GameObjPropPanal.h"
#include "GUIObjPanel.h"
#include "TNPanel.h"
#include "UndoManager.h"
enum
{
CTL_NAME = 1 << 0,
CTL_TYPE = 1 << 1,
CTL_ALIGNMENT = 1 << 2,
CTL_SCRIPT = 1 << 3,
CTL_DRIVER = 1 << 4,
CTL_HOVER_ELEVATION = 1 << 5,
CTL_SKIN = 1 << 6,
CTL_SNAP = 1 << 7,
CTL_RESOURCE = 1 << 8,
CTL_POS_X = 1 << 9,
CTL_POS_Y = 1 << 10,
CTL_POS_Z = 1 << 11,
CTL_ROT_YAW = 1 << 12,
CTL_ROT_PITCH = 1 << 13,
CTL_ROT_ROLL = 1 << 14,
CTL_MEMCELL_0 = 1 << 15,
CTL_MEMCELL_1 = 1 << 16,
CTL_MEMCELL_2 = 1 << 17,
CTL_MEMCELL_3 = 1 << 18,
CTL_MEMCELL_4 = 1 << 19,
CTL_MEMCELL_5 = 1 << 20,
CTL_MEMCELL_6 = 1 << 21,
CTL_MEMCELL_7 = 1 << 22,
CTL_MEMCELL_8 = 1 << 23,
CTL_MEMCELL_9 = 1 << 24,
CTL_UIG = 1 << 25,
CTL_INVUL = 1 << 26
};
CObjProps::CObjProps()
{
DiffTag=ModTag=0;
Virgin=true;
Name="";
Pos=Point3D(0.0f,0.0f,0.0f);
Rot=YawPitchRoll(0.0f,0.0f,0.0f);
Snap=false;
HoverElev=0.0f;
Script="";
SrcResource="";
Skin=0;
Alignment=0;
for(int i=0;i<MEMCELLS;i++) MemoryCell[i]=0.0f;
GamePropsFlag=false;
UseInGame=false;
Invulnerable=false;
}
// CMultiObjProps message handlers
void CObjProps::SetModTagFrom(EdGUIObject *gobj)
{
if(Virgin)
{
MissionName=gobj->GetMissionName();
Name="Multiple Objects";
Pos=gobj->GetPos();
Rot=gobj->GetRot();
Snap=gobj->GetSnapToGround();
HoverElev=gobj->GetHoverElevation();
DiffTag=0;
UseInGame=gobj->HasLocalizedName();
}
else
{
if(Name!=gobj->GetName() ) DiffTag|=CTL_NAME;
if(Snap!=gobj->GetSnapToGround() ) DiffTag|=CTL_SNAP;
if(UseInGame!=gobj->HasLocalizedName()) DiffTag|=CTL_UIG;
if(HoverElev!=gobj->GetHoverElevation() ) DiffTag|=CTL_HOVER_ELEVATION;
Point3D newpos=gobj->GetPos();
if(Pos.x!=newpos.x ) DiffTag|=CTL_POS_X;
if(Pos.y!=newpos.y ) DiffTag|=CTL_POS_Y;
if(Pos.z!=newpos.z ) DiffTag|=CTL_POS_Z;
YawPitchRoll newrot;
newrot=gobj->GetRot();
if(Rot.yaw!=newrot.yaw ) DiffTag|=CTL_ROT_YAW;
if(Rot.pitch!=newrot.pitch ) DiffTag|=CTL_ROT_PITCH;
if(Rot.roll!=newrot.roll ) DiffTag|=CTL_ROT_ROLL;
}
Virgin=false;
}
void CObjProps::SetModTagFrom(EdGameObject *gobj)
{
GamePropsFlag=true;
if(Virgin)
{
Script=gobj->GetScriptName();
SrcResource=gobj->GetResourcePath();
Skin=gobj->GetSkin();
Alignment=gobj->GetAlignment();
for(int i=0;i<MEMCELLS;i++) MemoryCell[i]=gobj->GetMemoryCell(i);
DiffTag=0;
}
else
{
if(MemoryCell[0]!=gobj->GetMemoryCell(0) ) DiffTag|=CTL_MEMCELL_0;
if(MemoryCell[1]!=gobj->GetMemoryCell(1) ) DiffTag|=CTL_MEMCELL_1;
if(MemoryCell[2]!=gobj->GetMemoryCell(2) ) DiffTag|=CTL_MEMCELL_2;
if(MemoryCell[3]!=gobj->GetMemoryCell(3) ) DiffTag|=CTL_MEMCELL_3;
if(MemoryCell[4]!=gobj->GetMemoryCell(4) ) DiffTag|=CTL_MEMCELL_4;
if(MemoryCell[5]!=gobj->GetMemoryCell(5) ) DiffTag|=CTL_MEMCELL_5;
if(MemoryCell[6]!=gobj->GetMemoryCell(6) ) DiffTag|=CTL_MEMCELL_6;
if(MemoryCell[7]!=gobj->GetMemoryCell(7) ) DiffTag|=CTL_MEMCELL_7;
if(MemoryCell[8]!=gobj->GetMemoryCell(8) ) DiffTag|=CTL_MEMCELL_8;
if(MemoryCell[9]!=gobj->GetMemoryCell(9) ) DiffTag|=CTL_MEMCELL_9;
if(Skin!=gobj->GetSkin() ) DiffTag|=CTL_SKIN;
if(Invulnerable!=gobj->IsInvulnerable() ) DiffTag|=CTL_INVUL;
if(Script.CompareNoCase(gobj->GetScriptName()) ) DiffTag|=CTL_SCRIPT;
if(SrcResource.CompareNoCase(gobj->GetResourcePath()) ) DiffTag|=CTL_RESOURCE;
if(Alignment!=gobj->GetAlignment() ) DiffTag|=CTL_ALIGNMENT;
}
SetModTagFrom((EdGUIObject *)gobj);
}
void CObjProps::SetData(EdGUIObject *gobj,UndoCommand **cmdlst)
{
if(ModTag&CTL_NAME )
{
RenameCommand *cmd=new RenameCommand(gobj);
gobj->SetName(Name);
if(*cmdlst==NULL) *cmdlst=cmd; else (*cmdlst)->Attach(cmd);
}
if(ModTag&CTL_SNAP) gobj->SetSnapToGround(Snap);
if(ModTag&CTL_UIG) gobj->UseLocalizedName(UseInGame);
if(ModTag&CTL_HOVER_ELEVATION) gobj->SetHoverElevation(HoverElev);
if(ModTag&(CTL_POS_X|CTL_POS_Y|CTL_POS_Z))
{
Point3D newpos=gobj->GetPos();
if(ModTag&CTL_POS_X) newpos.x=Pos.x;
if(ModTag&CTL_POS_Y) newpos.y=Pos.y;
if(ModTag&CTL_POS_Z) newpos.z=Pos.z;
gobj->SavePos(cmdlst);
gobj->SetPos(newpos);
}
if(ModTag&(CTL_ROT_YAW|CTL_ROT_PITCH|CTL_ROT_ROLL))
{
YawPitchRoll newrot;
newrot=gobj->GetRot();
if(ModTag&CTL_ROT_YAW) newrot.yaw=Rot.yaw;
if(ModTag&CTL_ROT_PITCH) newrot.pitch=Rot.pitch;
if(ModTag&CTL_ROT_ROLL) newrot.roll=Rot.roll;
UnitQuaternion newrotquat;
newrotquat=newrot;
gobj->SaveRot(cmdlst);
gobj->SetRot(newrotquat);
}
gobj->RemoveFromMap();
gobj->AddToMap();
}
void CObjProps::SetData(EdGameObject *gobj,UndoCommand **cmdlst)
{
if(ModTag&CTL_MEMCELL_0) gobj->SetMemoryCell(0,MemoryCell[0]);
if(ModTag&CTL_MEMCELL_1) gobj->SetMemoryCell(1,MemoryCell[1]);
if(ModTag&CTL_MEMCELL_2) gobj->SetMemoryCell(2,MemoryCell[2]);
if(ModTag&CTL_MEMCELL_3) gobj->SetMemoryCell(3,MemoryCell[3]);
if(ModTag&CTL_MEMCELL_4) gobj->SetMemoryCell(4,MemoryCell[4]);
if(ModTag&CTL_MEMCELL_5) gobj->SetMemoryCell(5,MemoryCell[5]);
if(ModTag&CTL_MEMCELL_6) gobj->SetMemoryCell(6,MemoryCell[6]);
if(ModTag&CTL_MEMCELL_7) gobj->SetMemoryCell(7,MemoryCell[7]);
if(ModTag&CTL_MEMCELL_8) gobj->SetMemoryCell(8,MemoryCell[8]);
if(ModTag&CTL_MEMCELL_9) gobj->SetMemoryCell(9,MemoryCell[9]);
if(ModTag&CTL_SKIN) gobj->SetSkin(Skin);
if(ModTag&CTL_INVUL) gobj->SetInvulnerable(Invulnerable);
if(ModTag&CTL_SCRIPT) gobj->SetScriptName(Script);
if(ModTag&CTL_ALIGNMENT) gobj->SetAlignment(Alignment);
if(ModTag&CTL_RESOURCE) gobj->ChangeTo(SrcResource);
SetData((EdGUIObject *)gobj,cmdlst);
}
void CObjProps::AddPanel(CObjPanelDlg *pnl)
{
pnl->AddPanel(new CTNPanel(this,(CWnd *)pnl));
pnl->AddPanel(new GUIObjPanel(this,(CWnd *)pnl));
if(GamePropsFlag)
pnl->AddPanel(new CGameObjPropPanal(this,(CWnd *)pnl));
}
void CObjProps::SetName(CString s) {ModTag|=CTL_NAME; Name=s;}
void CObjProps::SetScript(CString s) {ModTag|=CTL_SCRIPT; Script=s;}
void CObjProps::SetDriver(CString s) {ModTag|=CTL_DRIVER; Driver=s;}
void CObjProps::SetSrcResource(CString s) {ModTag|=CTL_RESOURCE; SrcResource=s;}
void CObjProps::SetSnap(bool b) {ModTag|=CTL_SNAP; Snap=b;}
void CObjProps::SetUseInGame(bool b) {ModTag|=CTL_UIG; UseInGame=b;}
void CObjProps::SetHoverElev(float f) {ModTag|=CTL_HOVER_ELEVATION; HoverElev=f;}
void CObjProps::SetAlignment(int a) { ModTag|=CTL_ALIGNMENT; Alignment=a;}
void CObjProps::SetSkin(int s) { ModTag|=CTL_SKIN; Skin=s;}
void CObjProps::SetInvulnerable(bool s) { ModTag|=CTL_INVUL; Invulnerable=s;}
void CObjProps::SetPosX(float f)
{
ModTag|=CTL_POS_X;
Pos.x=f;
}
void CObjProps::SetPosY(float f)
{
ModTag|=CTL_POS_Y;
Pos.y=f;
}
void CObjProps::SetPosZ(float f)
{
ModTag|=CTL_POS_Z;
Pos.z=f;
}
void CObjProps::SetYaw(float f)
{
ModTag|=CTL_ROT_YAW;
Rot.yaw=f;
}
void CObjProps::SetPitch(float f)
{
ModTag|=CTL_ROT_PITCH;
Rot.pitch=f;
}
void CObjProps::SetRoll(float f)
{
ModTag|=CTL_ROT_ROLL;
Rot.roll=f;
}
void CObjProps::SetPos(Point3D p)
{
SetPosX(p.x);
SetPosY(p.y);
SetPosZ(p.z);
}
void CObjProps::SetRot(YawPitchRoll r)
{
SetYaw(r.yaw);
SetPitch(r.pitch);
SetRoll(r.roll);
}
void CObjProps::SetMemoryCell(int i,float f)
{
Verify(i<MEMCELLS);
switch(i)
{
case 0: ModTag|=CTL_MEMCELL_0; break;
case 1: ModTag|=CTL_MEMCELL_1; break;
case 2: ModTag|=CTL_MEMCELL_2; break;
case 3: ModTag|=CTL_MEMCELL_3; break;
case 4: ModTag|=CTL_MEMCELL_4; break;
case 5: ModTag|=CTL_MEMCELL_5; break;
case 6: ModTag|=CTL_MEMCELL_6; break;
case 7: ModTag|=CTL_MEMCELL_7; break;
case 8: ModTag|=CTL_MEMCELL_8; break;
case 9: ModTag|=CTL_MEMCELL_9; break;
}
}