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

244 lines
8.4 KiB
C++

// EdGUIObject.h: interface for the EdGUIObject class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_EDGUIOBJECT_H__A1F90212_DD09_4804_925F_AEE14F3D42E1__INCLUDED_)
#define AFX_EDGUIOBJECT_H__A1F90212_DD09_4804_925F_AEE14F3D42E1__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include<Stuff\Stuff.hpp>
class DrawInfo;
class ViewWindowInfo;
class EdGUIObject;
class CObjPanelDlg;
#include"GlobalFlags.h"
using namespace Stuff;
class UndoCommand;
class ObjectManager;
class CObjManListCtrl;
class GUILine
{
protected:
Stuff::Point3D Begin,End;
public:
void SetLine(Point3D s,Point3D f) {Begin=s; End=f; }
void SetLine(Scalar sx,Scalar sy,Scalar ex,Scalar ey) {Begin=Point3D(sx,0.0f,sy); End=Point3D(ex,0.0f,ey); }
friend class EdGUIObject;
};
class BaseEdObject
{
private:
UnitQuaternion RotQuat;
Point3D Pos;
protected:
void Copy(BaseEdObject &obj);
public:
BaseEdObject() {RotQuat=UnitQuaternion::Identity; Pos=Point3D(0.0f,0.0f,0.0f); }
Scalar DistSquTo(Point3D &pnt) { return (Pos.x-pnt.x)*(Pos.x-pnt.x)+(Pos.z-pnt.z)*(Pos.z-pnt.z);}
void SetRot(UnitQuaternion &rot) { RotQuat=rot; UpdateMat(); }
void SetPos(Point3D &newloc) { Pos=newloc; UpdateMat(); }
void SetPosNoUpdate(Point3D &newloc) { Pos=newloc; }
void SetRotNoUpdate(UnitQuaternion &newrot) { RotQuat=newrot; }
void SetMatNoUpdate(LinearMatrix4D &mat) { Pos=mat; RotQuat=mat;}
void SetPos(Scalar x,Scalar y,Scalar z) { SetPos(Point3D(x,y,z)); }
const Point3D &GetPos() { return Pos;}
const UnitQuaternion &GetRot() { return RotQuat;}
LinearMatrix4D GetMat();
void SetMat(const LinearMatrix4D &mat);
virtual void OffsetBy( Point3D &pnt) { Pos+=pnt; UpdateMat(); }
virtual void RotateBy(UnitQuaternion &rot);
void RotateAround(Point3D &pnt,UnitQuaternion &rot);
virtual void UpdateMat() {RotQuat.Normalize();}
};
class GUIObjectList;
class MoveCommand;
class RotateCommand;
class CObjProps;
class EdGUIObject:public BaseEdObject
{
friend class GUIObjectList;
private:
protected:
void Copy(EdGUIObject &obj);
GUIObjectList *Parent;
GUILine *LineList;
int LineCount;
Scalar RadiusSqu;
CString Name;
Scalar HoverElevation;
bool Selected;
bool SnapToGround;
bool Frozen;
bool Modified;
bool Visual;
bool Hidden;
bool InMap;
int ReferenceCount;
int DrawPen,SelPen;
int ScreenDiv;
int GetScreenRadius(ViewWindowInfo &vinf);
virtual void BuildRadius();
bool InDisplayRegion(DrawInfo &dinf);
virtual bool InRadius( Point3D &pnt);
bool InsideBox( Point3D &tl, Point3D &br);
bool IntersectsBox( Point3D &tl, Point3D &br);
virtual bool DeleteSelected(UndoCommand **delcom) { return false;}
virtual bool DeleteSelected() { return false;}
public:
virtual void DefaultExtraData() {HoverElevation=0.0f; SnapToGround=true;}
void Freeze() {Frozen=true;}
void UnFreeze() {Frozen=false;}
bool IsFrozen() {return Frozen;}
virtual CString GetTypeName() {return ("GUI Helper");}
virtual int GetUnSelIcon() {return ICON_NONE; }
virtual int GetSelIcon() {return ICON_NONE; }
void OffsetBy( Point3D &pnt);
void RotateBy(UnitQuaternion &rot) { if(!IsHidden()) BaseEdObject::RotateBy(rot); }
virtual void SnapObjectToGround(bool overrideflag=true);
virtual EdGUIObject *FindFirstSelected() { if(IsSelected()) return this; else return NULL;}
void AddRefernce() {ReferenceCount++; Verify(ReferenceCount>=0);}
void RemoveRefernce() {ReferenceCount--; Verify(ReferenceCount>=0);}
virtual void SaveTextInfo(NotationFile *not_file);
virtual void SetInfo(Page *page);
virtual void SyncData() {}
virtual void AddPanel(CObjPanelDlg *pnl,UndoCommand **cmd);
GUIObjectList *GetParent() {return Parent;}
// Undo Methods
virtual void SavePosIfSelected(UndoCommand **cmd);
virtual void SaveRotIfSelected(UndoCommand **cmd);
void SaveGroup(UndoCommand **cmd);
void SavePos(UndoCommand **cmd);
void SaveRot(UndoCommand **cmd);
virtual void GetMultiPropsIfSelected(CObjProps *props) {if(IsSelected()) GetMultiProps(props);}
virtual void SetMultiPropsIfSelected(CObjProps *props,UndoCommand **cmd) {if(IsSelected()) SetMultiProps(props,cmd);}
virtual void GetMultiProps(CObjProps *props);
virtual void SetMultiProps(CObjProps *props,UndoCommand **cmd);
virtual EdGUIObject *SelectClosestInternal(Point3D &pnt,Scalar *crat);
void SetPen(DrawInfo &dinf);
virtual void SortChildren() {return;}
virtual void SetHide(bool flag) {Hidden=flag;}
virtual bool IsMultiZone() {return false;}
virtual bool IsMultiTile() {return false;}
virtual void SelectMultiZone() { }
virtual void SelectMultiTile() { }
bool IsHidden() {return Hidden;}
bool IsVisual() { return Visual;}
virtual bool IsModified() {return Modified;}
virtual void ClearModifyFlags() {Modified=false;}
void Modify() {Modified=true;}
// Tags
virtual CString GetTag(unsigned long tag_flags);
EdGUIObject &operator=(EdGUIObject &obj) { Copy(obj); return *this;}
virtual EdGUIObject *Clone();
virtual EdGUIObject *GetObjectByName(CString name);
bool GetSnapToGround() {return SnapToGround;}
float GetHoverElevation() {return HoverElevation;}
virtual void SetSnapToGround(bool snap,bool preservepos=false);
virtual void SetHoverElevation(float elev) {HoverElevation=elev; UpdateMat();}
void UpdateMat();
virtual ObjectManager *GetMyMission();
CString GetMissionName() {return ((EdGUIObject *)GetMyMission())->GetName();}
virtual void SetName( CString &name);
virtual void Draw(DrawInfo &dinf);
virtual void DrawTileViolation(DrawInfo &dinf) {}
virtual void DrawTag(DrawInfo &dinf, unsigned long tag_flags);
virtual void DrawSelectedObjects(DrawInfo &dinf,bool drawTags, unsigned long tag_flags );
virtual void DrawUnSelectedObjects(DrawInfo &dinf,bool drawTags, unsigned long tag_flags);
virtual bool InTree(EdGUIObject *gobj) {return gobj==this;}
virtual void GetExtents(Point3D *tl,Point3D *br);
virtual bool GetSelectionExtents(Point3D *tl,Point3D *br);
virtual void Dissociate() {}
virtual HTREEITEM AddToBranch(CTreeCtrl *tree,HTREEITEM itm) {return NULL;}
virtual int AddToList(CObjManListCtrl *list,unsigned long tag_flags);
virtual void RemoveFromMap() {InMap=false;}
virtual void AddToMap() {InMap=true; }
virtual bool HasLocalizedName() { return false;}
virtual void UseLocalizedName(bool flag) {}
virtual void CopySelectionToList(GUIObjectList *list);
//Selection Members
virtual int DeSelect(Point3D &pnt);
virtual int Select(Point3D &pnt);
bool SelectClosest(Point3D &pnt);
virtual bool SelectNext(Point3D &pnt,bool found=false);
virtual int SelectionCount() {return Selected && !Hidden;} //Cannot be selected if you are hidden
virtual int SelectionDepth(Point3D &pnt);
virtual int ObjectDepth(Point3D &pnt);
virtual int ToggleSelect(Point3D &pnt);
virtual int Select(Point3D &topleft,Point3D &bottomright);
virtual EdGUIObject *GetObjAtPoint(Point3D &pnt) {if(InRadius(pnt)) return this; else return NULL;}
virtual void Select() {Selected=true;}
virtual void DeSelect() {Selected=false;}
virtual void ToggleSelect() {Selected=!Selected;}
virtual EdGUIObject *AddNodeIfSelected(Point3D &pnt,bool insert) {return NULL;}
virtual bool ContainsSelection() { return false;}
virtual bool IsEmpty() {return false;}
virtual int GroupSelected(UndoCommand **cmd) {return 0;}
virtual bool UnGroupSelected(UndoCommand **cmd);
virtual void MoveToGroup(EdGUIObject *gobj);
virtual void PruneEmpty(UndoCommand **cmd) {}
void YawAround(Point3D &pnt,Scalar yaw);
void RollAround(Point3D &pnt,Scalar roll);
void PitchAround(Point3D &pnt,Scalar pitch);
bool IsSelected() {return Selected;}
CString &GetName() {return Name;}
//Test Members
Scalar GetRadius();
virtual void UpdateVisibility(DWORD visflag) { SetHide(false); }
//Location Members
virtual void RotateSelectionAround(Point3D &pnt,UnitQuaternion &vct);
virtual void OffsetSelection(Point3D &vct);
virtual void RotateSelection(UnitQuaternion &vct);
//Vector Rep Members
int GetLineCount() {return LineCount;}
void GetLine(int idx,Point3D *start,Point3D *end);
EdGUIObject(CString name="Helper",Point3D pnt=Point3D(0,0,0));
virtual ~EdGUIObject();
};
int _cdecl CompareGUIObjs(const void *elem1, const void *elem2);
#endif // !defined(AFX_EDGUIOBJECT_H__A1F90212_DD09_4804_925F_AEE14F3D42E1__INCLUDED_)