Files
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

96 lines
2.0 KiB
C++

// GUINode.cpp: implementation of the GUINode class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "mw4gameed2.h"
#include "GUINode.h"
#include "DrawInfo.h"
#include "GUIObjPanel.h"
#include "ObjPanelDlg.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GUINode::GUINode(CString name,Point3D pnt):EdGUIObject(name,pnt)
{
ScreenDiv=75;
RadiusSqu=0;
Visual=false;
}
EdGUIObject *GUINode::Clone()
{
GUINode *obj=new GUINode;
obj->Copy(*this);
return obj;
}
void GUINode::Draw(DrawInfo &dinf)
{
SetPen(dinf);
if(IsHidden()) return;
int rad=GetScreenRadius(dinf.vinf);
CPoint spnt,pnt=dinf.vinf.DataToScreen(GetPos());
Point3D pnt2,npt,tpnt=dinf.vinf.ScreenToData(CPoint(0,-rad)),org=dinf.vinf.ScreenToData(CPoint(0,0));
tpnt.x-=org.x;
tpnt.y=0.0f;
tpnt.z-=org.z;
YawPitchRoll rot(GetRot());
rot.pitch=0.0f;
rot.roll=0.0f;
LinearMatrix4D mat(rot);
npt.Multiply(tpnt,mat);
npt+=GetPos();
spnt=dinf.vinf.DataToScreen(npt);
dinf.GetDC()->Ellipse(pnt.x-rad,pnt.y-rad,pnt.x+rad,pnt.y+rad);
dinf.GetDC()->MoveTo(pnt);
dinf.GetDC()->LineTo(spnt);
}
void GUINode::AddPanel(CObjPanelDlg *pnl,UndoCommand **cmd)
{
((EdGUIObject *)GetParent())->AddPanel(pnl,cmd);
pnl->AddPanel(new GUIObjPanel(this,cmd,pnl));
}
GUINode::~GUINode()
{
}
Scalar DistToPoint(Point3D &a,Point3D &b,Point3D &c)
{
Scalar lsqu,r,s;
lsqu=(b.x-a.x)*(b.x-a.x)+(b.z-a.z)*(b.z-a.z);
r=((a.z-c.z)*(a.z-b.z)-(a.x-c.x)*(b.x-a.x))/lsqu;
s=((a.z-c.z)*(b.x-a.x)-(a.x-c.x)*(b.z-a.z))/lsqu;
if(r<=0.0f)
{
return (Scalar)sqrt((c.x-a.x)*(c.x-a.x)+(c.z-a.z)*(c.z-a.z));
}
else
if(r>=1.0f)
{
return (Scalar)sqrt((c.x-b.x)*(c.x-b.x)+(c.z-b.z)*(c.z-b.z));
}
else
{
return (Scalar)fabs(s*sqrt(lsqu));
}
}