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.
476 lines
14 KiB
C++
476 lines
14 KiB
C++
#include "MW4Headers.hpp"
|
|
#include "hudcomp.hpp"
|
|
#include "hudtarg.hpp"
|
|
#include "hudweapon.hpp"
|
|
#include "mwguimanager.hpp"
|
|
|
|
using namespace MechWarrior4;
|
|
|
|
namespace HUDTARGET
|
|
{
|
|
const int LockLoc[4][4] = {
|
|
{ 454,250,482,260 },
|
|
{ 454,262,482,272 },
|
|
{ 454,274,482,284 },
|
|
{ 454,286,482,296 }
|
|
};
|
|
|
|
const int WeapLoc[6][2] = {
|
|
{ 455,300 },
|
|
{ 465,300 },
|
|
{ 475,300 },
|
|
{ 455,316 },
|
|
{ 465,316 },
|
|
{ 475,316 }
|
|
};
|
|
};
|
|
|
|
using namespace HUDTARGET;
|
|
|
|
HUDReticle::HUDReticle()
|
|
{
|
|
Color (0,250,0,255);
|
|
m_Weapons = NULL;
|
|
AddTexture ("hud\\hud5",2,7,10,53,30); // lock on
|
|
AddTexture ("hud\\hud5",3,7,10,53,30);
|
|
AddTexture ("hud\\hud5",4,7,10,53,30);
|
|
AddTexture ("hud\\hud5",5,7,10,53,30);
|
|
AddTexture ("hud\\hud5",6,7,10,53,30);
|
|
AddTexture ("hud\\hud5",7,7,10,53,30);
|
|
|
|
AddTexture ("hud\\hud4",8,176,58,229,111); // neutral
|
|
AddTexture ("hud\\hud4",9,119,59,170,109); // enemy
|
|
AddTexture ("hud\\hud4",10,175,0,227,52); // friendly
|
|
|
|
AddTexture ("hud\\hud4",30,121,34,168,49); // hit rear
|
|
AddTexture ("hud\\hud4",31,121,34,168,49); // hit forward
|
|
AddTexture ("hud\\hud4",32,121,34,168,49); // hit left
|
|
AddTexture ("hud\\hud4",33,121,34,168,49); // hit right
|
|
|
|
AddTexture ("hud\\hud4",34,121,18,168,32); // hit rear
|
|
AddTexture ("hud\\hud4",35,121,18,168,32); // hit forward
|
|
AddTexture ("hud\\hud4",36,121,18,168,32); // hit left
|
|
AddTexture ("hud\\hud4",37,121,18,168,32); // hit right
|
|
|
|
AddTexture ("hud\\hud5",20,20,134,26,141); // 0
|
|
AddTexture ("hud\\hud5",21,27,134,33,141); // 1
|
|
AddTexture ("hud\\hud5",22,34,134,40,141); // 2
|
|
AddTexture ("hud\\hud5",23,20,142,26,150); // 3
|
|
AddTexture ("hud\\hud5",24,27,142,33,150); // 4
|
|
AddTexture ("hud\\hud5",25,34,142,40,150); // 5
|
|
|
|
Location (Point3D (0.5f,0.5f,0.9f));
|
|
Point3D size;
|
|
|
|
m_Textures[30]->Origin (24,-23);
|
|
m_Textures[31]->Origin (24,-23);
|
|
m_Textures[32]->Origin (24,-23);
|
|
m_Textures[33]->Origin (24,-23);
|
|
|
|
m_Textures[34]->Origin (24,-21);
|
|
m_Textures[35]->Origin (24,-21);
|
|
m_Textures[36]->Origin (24,-21);
|
|
m_Textures[37]->Origin (24,-21);
|
|
|
|
m_Textures[31]->Rotate (Pi);
|
|
m_Textures[32]->Rotate (Pi_Over_2);
|
|
m_Textures[33]->Rotate (Pi+Pi_Over_2);
|
|
|
|
m_Textures[35]->Rotate (Pi);
|
|
m_Textures[36]->Rotate (Pi_Over_2);
|
|
m_Textures[37]->Rotate (Pi+Pi_Over_2);
|
|
|
|
size = m_Textures[8]->Size ();
|
|
m_Textures[8]->Origin (size.x/2.0f,size.y/2.0f);
|
|
size = m_Textures[9]->Size ();
|
|
m_Textures[9]->Origin (size.x/2.0f,size.y/2.0f);
|
|
size = m_Textures[10]->Size ();
|
|
m_Textures[10]->Origin (size.x/2.0f,size.y/2.0f);
|
|
|
|
size = m_Textures[2]->Size ();
|
|
// MSL 5.04 Increased Hud Range Text Size
|
|
// m_ReticleRangeText = new HUDNumberText ();
|
|
m_ReticleRangeText = new HUDText ();
|
|
m_ReticleRangeText->SetSize(HUDText::MEDIUM_SIZE); // old value : MEDIUM_SIZE
|
|
m_ReticleName = new HUDText ();
|
|
m_ReticleRangeText->Justification (HUDText::LEFT_ALIGN);
|
|
m_ReticleName->SetSize(HUDText::MEDIUM_SIZE); // old value : none
|
|
ReticleRange (0);
|
|
ReticleName ("");
|
|
|
|
m_isReticleLockedLRMText = new HUDText ();
|
|
m_isReticleLockedLRMText->SetSize(HUDText::SMALL_SIZE);
|
|
m_isReticleLockedLRMText->Color (0,255,0,255);
|
|
m_isReticleLockedLRMText->UpdateText ("LRM");
|
|
m_isReticleLockedMRMText = new HUDText ();
|
|
m_isReticleLockedMRMText->SetSize(HUDText::SMALL_SIZE);
|
|
m_isReticleLockedMRMText->Color (0,255,0,255);
|
|
m_isReticleLockedMRMText->UpdateText ("MRM");
|
|
m_isReticleLockedSRMText = new HUDText ();
|
|
m_isReticleLockedSRMText->SetSize(HUDText::SMALL_SIZE);
|
|
m_isReticleLockedSRMText->Color (0,255,0,255);
|
|
m_isReticleLockedSRMText->UpdateText ("SRM");
|
|
m_isReticleLockedSSRMText = new HUDText ();
|
|
m_isReticleLockedSSRMText->SetSize(HUDText::SMALL_SIZE);
|
|
m_isReticleLockedSSRMText->Color (0,255,0,255);
|
|
m_isReticleLockedSSRMText->UpdateText ("STK");
|
|
|
|
m_RotateTime = 0;
|
|
zrot = 0;
|
|
|
|
m_LockColor2[0] = MakeColor (0,250,0,255);
|
|
m_LockColor2[1] = MakeColor (0,0,255,255);
|
|
m_LockColor2[2] = MakeColor (255,0,0,255);
|
|
|
|
m_ReticleAlignment = 0;
|
|
targeting = true;
|
|
scalexy = 6.0f;
|
|
isReticleLocked = 0;
|
|
isReticleLockedLRM = 0;
|
|
isReticleLockedMRM = 0;
|
|
isReticleLockedSRM = 0;
|
|
isReticleLockedSSRM = 0;
|
|
m_LockAlpha = 100;
|
|
rotclockwise = 0;
|
|
rotcounterclock = 0;
|
|
m_Textures[2]->Scale (scalexy,scalexy);
|
|
m_Textures[3]->Scale (scalexy,scalexy);
|
|
m_Textures[4]->Scale (scalexy,scalexy);
|
|
m_Textures[5]->Scale (scalexy,scalexy);
|
|
m_Textures[6]->Scale (scalexy,scalexy);
|
|
m_Textures[7]->Scale (scalexy,scalexy);
|
|
m_Textures[2]->Origin (size.x/2.0f,size.y+35);
|
|
m_Textures[3]->Origin (size.x/2.0f,size.y+35);
|
|
m_Textures[4]->Origin (size.x/2.0f,size.y+35);
|
|
m_Textures[5]->Origin (size.x/2.0f,size.y+35);
|
|
m_Textures[6]->Origin (size.x/2.0f,size.y+35);
|
|
m_Textures[7]->Origin (size.x/2.0f,size.y+35);
|
|
m_Textures[2]->Clip (true);
|
|
m_Textures[3]->Clip (true);
|
|
m_Textures[4]->Clip (true);
|
|
m_Textures[5]->Clip (true);
|
|
m_Textures[6]->Clip (true);
|
|
m_Textures[7]->Clip (true);
|
|
m_HitTime = 0;
|
|
m_LeftHitColor = Color ();
|
|
m_RightHitColor = Color ();
|
|
m_ForwardHitColor = Color ();
|
|
m_RearHitColor = Color ();
|
|
|
|
m_LeftCenterColor = 0;
|
|
m_RightCenterColor = 0;
|
|
m_ForwardCenterColor = 0;
|
|
m_RearCenterColor = 0;
|
|
}
|
|
|
|
HUDReticle::~HUDReticle()
|
|
{
|
|
delete m_ReticleRangeText;
|
|
delete m_ReticleName;
|
|
delete m_isReticleLockedLRMText;
|
|
delete m_isReticleLockedMRMText;
|
|
delete m_isReticleLockedSRMText;
|
|
delete m_isReticleLockedSSRMText;
|
|
}
|
|
|
|
void HUDReticle::Reset (void)
|
|
{
|
|
m_Weapons = Cast_Object (HUDWeapon *, MWGUIManager::GetInstance ()->Component (MWGUIManager::HUD_WEAPON));
|
|
}
|
|
|
|
|
|
void HUDReticle::AdjustColor (DWORD& color,DWORD alpha)
|
|
{
|
|
DWORD dr,dg,db,da;
|
|
DWORD r,g,b,a;
|
|
DWORD destcolor;
|
|
|
|
destcolor = Color ();
|
|
|
|
r = (color>>16)&0xff;
|
|
g = (color>>8)&0xff;
|
|
b = (color>>0)&0xff;
|
|
a = (color>>24)&0xff;
|
|
|
|
// dr = ((destcolor >> 16)&0xff) - r;
|
|
// dg = ((destcolor >> 8)&0xff) - g;
|
|
// db = ((destcolor >> 0)&0xff) - b;
|
|
dr = 0;
|
|
dg = 0;
|
|
db = 0;
|
|
da = ((alpha >> 24)&0xff) - a;
|
|
|
|
if (dr != 0)
|
|
dr = dr < 0 ? 5:-5;
|
|
if (dg != 0)
|
|
dg = dg < 0 ? 5:-5;
|
|
if (db != 0)
|
|
db = db < 0 ? 5:-5;
|
|
if (da != 0)
|
|
da = da < 0 ? 5:-5;
|
|
r+=dr;
|
|
g+=dg;
|
|
b+=db;
|
|
a+=da;
|
|
Clamp (r,0,255);
|
|
Clamp (g,0,255);
|
|
Clamp (b,0,255);
|
|
Clamp (a,0,255);
|
|
color = MakeColor (r,g,b,a);
|
|
}
|
|
|
|
void HUDReticle::Update (Stuff::Time till)
|
|
{
|
|
if (m_RotateTime == 0)
|
|
m_RotateTime = till;
|
|
if (m_HitTime == 0)
|
|
m_HitTime = till;
|
|
|
|
while (m_HitTime <= till)
|
|
{
|
|
// AdjustColor (m_LeftHitColor,0xff000000);
|
|
// AdjustColor (m_RightHitColor,0xff000000);
|
|
// AdjustColor (m_ForwardHitColor,0xff000000);
|
|
// AdjustColor (m_RearHitColor,0xff000000);
|
|
|
|
AdjustColor (m_LeftCenterColor,0x00000000);
|
|
AdjustColor (m_RightCenterColor,0x00000000);
|
|
AdjustColor (m_ForwardCenterColor,0x00000000);
|
|
AdjustColor (m_RearCenterColor,0x00000000);
|
|
m_HitTime += 1.0/60.0;
|
|
}
|
|
while (m_RotateTime <= till)
|
|
{
|
|
zrot += 0.06f;
|
|
if (zrot > (2*Pi))
|
|
zrot = 0;
|
|
if (isReticleLocked)
|
|
{
|
|
if (targeting)
|
|
{
|
|
scalexy -= 0.45f;
|
|
// MSL 5.04 Disable Missile Lock Zoom In
|
|
// if (scalexy < 0.5f)
|
|
// {
|
|
scalexy = 0.5f;
|
|
// }
|
|
m_Textures[2]->Scale (scalexy,scalexy);
|
|
m_Textures[3]->Scale (scalexy,scalexy);
|
|
m_Textures[4]->Scale (scalexy,scalexy);
|
|
m_Textures[5]->Scale (scalexy,scalexy);
|
|
m_Textures[6]->Scale (scalexy,scalexy);
|
|
m_Textures[7]->Scale (scalexy,scalexy);
|
|
}
|
|
|
|
rotclockwise += (5.0f*2.0f*Pi)/360.0f;
|
|
if (rotclockwise > 2.0f*Pi)
|
|
rotclockwise = 0;
|
|
|
|
rotcounterclock -= (3.0f*2.0f*Pi)/360.0f;
|
|
if (rotcounterclock > 2.0f *Pi)
|
|
rotcounterclock = 0;
|
|
|
|
if (m_LockAlpha < 210)
|
|
{
|
|
m_LockAlpha +=10;
|
|
if (m_LockAlpha > 210)
|
|
{
|
|
m_LockAlpha = 210;
|
|
}
|
|
// MSL 5.04 Target Lock Color Change
|
|
// m_AnimLockColor = MakeColor (255,52,0,m_LockAlpha);
|
|
m_AnimLockColor = MakeColor (200,125,0,m_LockAlpha);
|
|
}
|
|
}
|
|
m_RotateTime += 1.0/26.0;
|
|
}
|
|
inherited::Update (till);
|
|
}
|
|
|
|
void HUDReticle::AllHit (void)
|
|
{
|
|
// m_LeftHitColor = MakeColor (255,0,0,255);
|
|
// m_RightHitColor = MakeColor (255,0,0,255);
|
|
// m_ForwardHitColor = MakeColor (255,0,0,255);
|
|
// m_RearHitColor = MakeColor (255,0,0,255);
|
|
|
|
m_LeftCenterColor = MakeColor (255,0,0,255);
|
|
m_RightCenterColor = MakeColor (255,0,0,255);
|
|
m_ForwardCenterColor = MakeColor (255,0,0,255);
|
|
m_RearCenterColor = MakeColor (255,0,0,255);
|
|
}
|
|
void HUDReticle::LeftHit (void)
|
|
{
|
|
// m_LeftHitColor = MakeColor (255,0,0,255);
|
|
m_LeftCenterColor = MakeColor (255,0,0,255);
|
|
}
|
|
void HUDReticle::RightHit (void)
|
|
{
|
|
// m_RightHitColor = MakeColor (255,0,0,255);
|
|
m_RightCenterColor = MakeColor (255,0,0,255);
|
|
}
|
|
void HUDReticle::ForwardHit (void)
|
|
{
|
|
// m_ForwardHitColor = MakeColor (255,0,0,255);
|
|
m_ForwardCenterColor = MakeColor (255,0,0,255);
|
|
}
|
|
void HUDReticle::RearHit (void)
|
|
{
|
|
// m_RearHitColor = MakeColor (255,0,0,255);
|
|
m_RearCenterColor = MakeColor (255,0,0,255);
|
|
}
|
|
void HUDReticle::DrawImplementation(void)
|
|
{
|
|
Point3D loc,size;
|
|
DWORD color;
|
|
int i;
|
|
// Scalar oldheatlevel;
|
|
|
|
// oldheatlevel = g_HUDHeatLevel;
|
|
// g_HUDHeatLevel = 0;
|
|
|
|
loc = Location ();
|
|
Verify (m_Weapons);
|
|
|
|
color = m_LockColor2[m_ReticleAlignment];
|
|
switch (m_ReticleAlignment)
|
|
{
|
|
case 0:
|
|
m_Textures[8]->Rotate (0);
|
|
size = m_Textures[8]->Size ();
|
|
m_Textures[8]->Draw (loc,size,color);
|
|
break;
|
|
case 1:
|
|
size = m_Textures[10]->Size ();
|
|
m_Textures[10]->Draw (loc,size,color);
|
|
break;
|
|
case 2:
|
|
size = m_Textures[9]->Size ();
|
|
m_Textures[9]->Rotate (zrot);
|
|
m_Textures[9]->Draw (loc,size,color);
|
|
size = m_Textures[8]->Size ();
|
|
m_Textures[8]->Rotate (zrot);
|
|
m_Textures[8]->Draw (loc,size,color);
|
|
break;
|
|
}
|
|
|
|
size = m_Textures[30]->Size ();
|
|
color = Color ();
|
|
|
|
// m_Textures[30]->Draw (loc,size,m_RearHitColor);
|
|
// m_Textures[31]->Draw (loc,size,m_ForwardHitColor);
|
|
// m_Textures[32]->Draw (loc,size,m_LeftHitColor);
|
|
// m_Textures[33]->Draw (loc,size,m_RightHitColor);
|
|
|
|
m_Textures[34]->Draw (loc,size,m_RearCenterColor);
|
|
m_Textures[35]->Draw (loc,size,m_ForwardCenterColor);
|
|
m_Textures[36]->Draw (loc,size,m_LeftCenterColor);
|
|
m_Textures[37]->Draw (loc,size,m_RightCenterColor);
|
|
|
|
for (i=0;i<3;i++)//상훈 원래 6이었음
|
|
{
|
|
size = m_Textures[20+i]->Size ();
|
|
//CanHit는 Hudweapon에서 set한다...
|
|
if (m_Weapons->CanHit (i))
|
|
color = MakeColor (0,255,0,255);
|
|
else {
|
|
// MSL 5.00
|
|
// - original line //color = MakeColor (0,175,0,255);
|
|
color = MakeColor (255,255,0,255);
|
|
}
|
|
|
|
my_DrawRect (WeapLoc[i][0]-1,WeapLoc[i][1]-1,(int) (WeapLoc[i][0]+size.x+1),(int) (WeapLoc[i][1]+size.y+1),color);
|
|
m_Textures[20+i]->Draw (Point3D ((Scalar) WeapLoc[i][0],(Scalar) WeapLoc[i][1],0.9f),size,MakeColor (0,0,0,255));
|
|
}
|
|
|
|
color = MakeColor (0,0,0,100);
|
|
// my_DrawRect ((int) (loc.x+55),(int) (loc.y+30),(int) (loc.x+130),(int) (loc.y+56),color);
|
|
|
|
color = m_LockColor2[m_ReticleAlignment];
|
|
// DrawLine ((int) (loc.x+15),(int) (loc.y+15),(int) (loc.x+40),(int) (loc.y+35),color);
|
|
// DrawLine ((int) (loc.x+40),(int) (loc.y+35),(int) (loc.x+55),(int) (loc.y+35),color);
|
|
|
|
m_ReticleName->Color (m_LockColor2[m_ReticleAlignment]);
|
|
|
|
// MSL 5.00
|
|
// - original line // m_ReticleRangeText->Color (m_LockColor2[m_ReticleAlignment]);
|
|
if (m_ReticleAlignment==2)
|
|
m_ReticleRangeText->Color (m_LockColor2[m_ReticleAlignment]);
|
|
else if (m_ReticleAlignment==1)
|
|
m_ReticleRangeText->Color (m_LockColor2[m_ReticleAlignment]);
|
|
else
|
|
m_ReticleRangeText->Color (255,255,0,255);
|
|
|
|
// m_ReticleRangeText->Color (m_LockColor2[m_ReticleAlignment]);
|
|
// m_ReticleName->TopLeft (loc.x+57,loc.y+32);
|
|
// m_ReticleName->BottomRight ((Scalar) 800,(Scalar) 600);
|
|
// m_ReticleRangeText->TopLeft (loc.x+57,loc.y+32);
|
|
// m_ReticleRangeText->BottomRight ((Scalar) 800,(Scalar) 600);
|
|
|
|
size = m_Textures[9]->Size ();
|
|
DWORD tsizex,tsizey;
|
|
m_ReticleName->DrawSize (tsizex,tsizey);
|
|
m_ReticleName->Draw (Point3D (loc.x-(tsizex/2.0f),loc.y+(size.y/2.0f)+14,0.9f));
|
|
m_ReticleRangeText->DrawSize (tsizex,tsizey);
|
|
m_ReticleRangeText->Draw (Point3D (loc.x-(tsizex/2.0f),loc.y-((size.y/2.0f)+14+tsizey),0.9f));
|
|
|
|
if (isReticleLockedLRM)
|
|
{
|
|
color = MakeColor (10,10,10,150);
|
|
my_DrawRect (LockLoc[0][0],LockLoc[0][1],(int) (LockLoc[0][2]),(int) (LockLoc[0][3]),color);
|
|
DWORD tsizex,tsizey;
|
|
m_isReticleLockedLRMText->DrawSize (tsizex,tsizey);
|
|
m_isReticleLockedLRMText->Draw (Point3D (loc.x-(tsizex/2.0f)+68,loc.y-((size.y/2.0f)+10+tsizey),0.9f));
|
|
}
|
|
if (isReticleLockedMRM)
|
|
{
|
|
color = MakeColor (10,10,10,150);
|
|
my_DrawRect (LockLoc[1][0],LockLoc[1][1],(int) (LockLoc[1][2]),(int) (LockLoc[1][3]),color);
|
|
DWORD tsizex,tsizey;
|
|
m_isReticleLockedMRMText->DrawSize (tsizex,tsizey);
|
|
m_isReticleLockedMRMText->Draw (Point3D (loc.x-(tsizex/2.0f)+68,loc.y-((size.y/2.0f)-2+tsizey),0.9f));
|
|
}
|
|
if (isReticleLockedSRM)
|
|
{
|
|
color = MakeColor (10,10,10,150);
|
|
my_DrawRect (LockLoc[2][0],LockLoc[2][1],(int) (LockLoc[2][2]),(int) (LockLoc[2][3]),color);
|
|
DWORD tsizex,tsizey;
|
|
m_isReticleLockedSRMText->DrawSize (tsizex,tsizey);
|
|
m_isReticleLockedSRMText->Draw (Point3D (loc.x-(tsizex/2.0f)+68,loc.y-((size.y/2.0f)-14+tsizey),0.9f));
|
|
}
|
|
if (isReticleLockedSSRM)
|
|
{
|
|
color = MakeColor (10,10,10,150);
|
|
my_DrawRect (LockLoc[3][0],LockLoc[3][1],(int) (LockLoc[3][2]),(int) (LockLoc[3][3]),color);
|
|
DWORD tsizex,tsizey;
|
|
m_isReticleLockedSSRMText->DrawSize (tsizex,tsizey);
|
|
m_isReticleLockedSSRMText->Draw (Point3D (loc.x-(tsizex/2.0f)+68,loc.y-((size.y/2.0f)-26+tsizey),0.9f));
|
|
}
|
|
|
|
if (isReticleLocked)
|
|
{
|
|
Point3D size;
|
|
size = m_Textures[2]->Size ();
|
|
m_Textures[2]->Rotate (rotclockwise);
|
|
m_Textures[2]->Draw (loc,size,m_AnimLockColor);
|
|
|
|
m_Textures[3]->Rotate (rotcounterclock+(60.0f*2.0f*Pi/360.0f));
|
|
m_Textures[3]->Draw (loc,size,m_AnimLockColor);
|
|
|
|
m_Textures[4]->Rotate (rotclockwise+(120.0f*2.0f*Pi/360.0f));
|
|
m_Textures[4]->Draw (loc,size,m_AnimLockColor);
|
|
|
|
m_Textures[5]->Rotate (rotcounterclock+(180.0f*2.0f*Pi/360.0f));
|
|
m_Textures[5]->Draw (loc,size,m_AnimLockColor);
|
|
|
|
m_Textures[6]->Rotate (rotclockwise+(240.0f*2.0f*Pi/360.0f));
|
|
m_Textures[6]->Draw (loc,size,m_AnimLockColor);
|
|
|
|
m_Textures[7]->Rotate (rotcounterclock+(300.0f*2.0f*Pi/360.0f));
|
|
m_Textures[7]->Draw (loc,size,m_AnimLockColor);
|
|
}
|
|
// g_HUDHeatLevel = oldheatlevel;
|
|
}
|
|
|
|
|