📄 campaign.cpp
字号:
if(hittype != C_TYPE_LMOUSEUP)
return;
JStarsDirection=1;
JStarsDelay=1 * _UI95_TICKS_PER_SECOND_; // Seconds
control->Parent_->SetGroupState(-200,0);
control->SetState(1);
}
void HistoryPlayReverse(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
JStarsDirection=-1;
JStarsDelay=1*_UI95_TICKS_PER_SECOND_; // Seconds
control->Parent_->SetGroupState(-200,0);
control->SetState(1);
}
void HistoryStepForward(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
JStarsDirection=0;
if(JStarsCurrent < (JStarsLast-1))
JStarsCurrent++;
control->Parent_->SetGroupState(-200,0);
}
void HistoryStepReverse(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
JStarsDirection=0;
if(JStarsCurrent > JStarsFirst)
JStarsCurrent--;
control->Parent_->SetGroupState(-200,0);
}
void HistoryFastForward(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
JStarsDirection=1;
JStarsDelay=static_cast<long>(0.25*_UI95_TICKS_PER_SECOND_); // Second
control->Parent_->SetGroupState(-200,0);
control->SetState(1);
}
void HistoryFastReverse(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
JStarsDirection=-1;
JStarsDelay=static_cast<long>(0.25*_UI95_TICKS_PER_SECOND_); // Second
control->Parent_->SetGroupState(-200,0);
control->SetState(1);
}
void HistoryStop(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
JStarsDirection=0;
control->Parent_->SetGroupState(-200,0);
}
void HistoryDragBallCB(long,short hittype,C_Base *control)
{
C_Slider *sldr;
long Offset,step,Range;
if(hittype != C_TYPE_MOUSEMOVE)
return;
JStarsDirection=0;
sldr=(C_Slider*)control;
Offset=sldr->GetSliderPos()-sldr->GetSliderMin();
Range=sldr->GetSliderMax()-sldr->GetSliderMin();
if(Range >= 1)
{
step=(Offset * (JStarsLast-2)) / Range + JStarsFirst;
if(step < JStarsFirst)
step=JStarsFirst;
if(step >= (JStarsLast-1))
step=JStarsLast-1;
JStarsCurrent=step;
}
}
void HistoryTimerCB(long,short,C_Base *control)
{
C_History *hist;
C_Text *txt;
C_Slider *sldr;
long TimeID;
_TCHAR buffer[15];
F4CSECTIONHANDLE *Leave;
if(JStarsCurrent != JStarsPrevious)
{
Leave=UI_Enter(control->Parent_);
control->Parent_->HideGroup(JStarsPrevious);
JStarsPrevious=JStarsCurrent;
control->Parent_->UnHideGroup(JStarsPrevious);
control->Parent_->RefreshClient(control->GetClient());
txt=(C_Text*)control->Parent_->FindControl(COUNTER);
if(txt)
{
hist=(C_History*)control->Parent_->FindControl(JStarsCurrent);
if(hist)
{
TimeID=hist->GetUserNumber(0);
_stprintf(buffer,"%s%2ld %02d:00",gStringMgr->GetString(TXT_DAY),TimeID/1440l+1,(TimeID/60)%24);
txt->Refresh();
txt->SetText(buffer);
txt->Refresh();
}
}
sldr=(C_Slider*)control->Parent_->FindControl(PLAYBALL);
if(sldr)
PositionSlider(sldr,JStarsCurrent,JStarsFirst,JStarsLast-2);
UI_Leave(Leave);
}
if(!JStarsDirection)
return;
if(control->GetUserNumber(_UI95_TIMER_COUNTER_) < 1)
{
JStarsCurrent+=JStarsDirection;
if(JStarsCurrent >= JStarsLast)
{
JStarsDirection=0;
JStarsCurrent=JStarsLast-1;
control->Parent_->SetGroupState(-200,0);
}
if(JStarsCurrent < JStarsFirst)
{
JStarsCurrent=JStarsFirst;
JStarsDirection=0;
control->Parent_->SetGroupState(-200,0);
}
control->SetUserNumber(_UI95_TIMER_COUNTER_,JStarsDelay);
}
control->SetUserNumber(_UI95_TIMER_COUNTER_,control->GetUserNumber(_UI95_TIMER_COUNTER_)-1);
}
void FitFlightPlanCB(long,short hittype,C_Base *control)
{
F4CSECTIONHANDLE *Leave;
if(hittype != C_TYPE_LMOUSEUP)
return;
if(gMapMgr)
{
Leave=UI_Enter(control->Parent_);
gMapMgr->FitFlightPlan();
gMapMgr->DrawMap();
UI_Leave(Leave);
}
}
void OpenCrossSectionCB(long,short hittype,C_Base *control)
{
C_Text *txt;
C_Window *win;
C_Waypoint *wpz;
_TCHAR buffer[30];
F4CSECTIONHANDLE *Leave;
if(hittype != C_TYPE_LMOUSEUP)
return;
win=gMapMgr->GetZWindow();
if(win)
{
Leave=UI_Enter(win);
if(StupidHackToCloseCSECT != control->GetUserNumber(0))
{
StupidHackToCloseCSECT=control->GetUserNumber(0);
gMapMgr->RecalcWaypointZs(StupidHackToCloseCSECT/100);
wpz=gMapMgr->GetCurWPZ();
txt=(C_Text*)win->FindControl(DISTANCE_FIELD);
if(txt)
{
if(wpz)
_stprintf(buffer,"%5.1f%s",(float)(wpz->GetUserNumber(2))*FT_TO_NM,gStringMgr->GetString(TXT_NM));
else
_tcscpy(buffer," ");
Uni_Float(buffer);
txt->SetText(buffer);
}
txt=(C_Text*)win->FindControl(FUEL_FIELD);
if(txt)
{
if(wpz)
_stprintf(buffer,"%1ld",wpz->GetUserNumber(3));
else
_tcscpy(buffer," ");
txt->SetText(buffer);
}
txt=(C_Text*)win->FindControl(DURATION_FIELD);
if(txt)
{
if(wpz)
GetTimeString(wpz->GetUserNumber(1),buffer);
else
_tcscpy(buffer," ");
txt->SetText(buffer);
}
win->HideCluster(control->GetUserNumber(1));
win->UnHideCluster(StupidHackToCloseCSECT);
win->RefreshWindow();
gMainHandler->ShowWindow(win);
}
else
{
gMainHandler->HideWindow(win);
StupidHackToCloseCSECT=0;
}
UI_Leave(Leave);
}
}
void LoadTroopMovementHistory()
{
C_Window *win;
C_History *hist;
C_Slider *sldr;
int i,recnum;
CampaignTime time;
UnitHistoryType *rec;
char *filedata;
FILE *fp;
short Reading;
short count;
C_Text *txt;
long TimeID;
_TCHAR buffer[15];
JStarsFirst=0;
JStarsLast=0;
JStarsCurrent=0;
recnum=1;
DeleteGroupList(HISTORY_WIN);
win=gMainHandler->FindWindow(HISTORY_WIN);
if(win)
{
fp = OpenCampFile("tmp","his","rb");
if(!fp)
return;
CampEnterCriticalSection();
Reading=1;
while(Reading)
{
Reading=static_cast<short>(fread(&time,sizeof(CampaignTime),1,fp));
if(Reading)
{
fread(&count,sizeof(short),1,fp);
if(count)
{
if(recnum == 1)
{
txt=(C_Text*)win->FindControl(COUNTER);
if(txt)
{
TimeID=time/(VU_TICS_PER_SECOND*60);
_stprintf(buffer,"%s%2ld %02d:00",gStringMgr->GetString(TXT_DAY),TimeID/1440l+1,(TimeID/60)%24);
txt->Refresh();
txt->SetText(buffer);
txt->Refresh();
}
}
hist=new C_History;
hist->Setup(recnum,0,count);
hist->SetFlagBitOn(C_BIT_INVISIBLE);
hist->SetGroup(recnum);
hist->SetClient(1);
hist->SetUserNumber(0,(long)time/(VU_TICS_PER_SECOND*60));
hist->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
hist->SetImage(0,REDDOT5);
hist->SetImage(1,BLUEDOT5);
hist->SetImage(2,BLUEDOT5);
hist->SetImage(3,BLUEDOT5);
hist->SetImage(4,REDDOT5);
hist->SetImage(5,REDDOT5);
hist->SetImage(6,REDDOT5);
hist->SetImage(7,REDDOT5);
filedata=new char[count * sizeof(UnitHistoryType)];
fread(filedata,count * sizeof(UnitHistoryType),1,fp);
rec=(UnitHistoryType*)filedata;
for(i=0;i<count;i++)
{
hist->AddIconSet(static_cast<short>(i),rec->team,(short)((float)rec->x * 0.36198),(short)((float)(1024-rec->y) * 0.36198));
rec++;
}
hist->SetReady(1);
delete filedata;
win->AddControl(hist);
recnum++;
}
}
}
fclose(fp);
CampLeaveCriticalSection();
JStarsDirection=0;
JStarsFirst=1;
JStarsLast=recnum;
JStarsCurrent=1;
JStarsPrevious=1;
sldr=(C_Slider*)win->FindControl(PLAYBALL);
if(sldr)
{
sldr->Refresh();
sldr->SetSliderPos(0);
sldr->Refresh();
if(recnum > 2)
sldr->SetFlagBitOn(C_BIT_ENABLED);
else
sldr->SetFlagBitOff(C_BIT_ENABLED);
}
win->UnHideGroup(JStarsCurrent);
}
}
#define _MAX_CATEGORIES_ (7)
long FrcLvlCatID[_MAX_CATEGORIES_]=
{
STAT_1,
STAT_2,
STAT_3,
STAT_4,
STAT_5,
STAT_6,
STAT_7,
};
static long FindStatIndex(long ID)
{
short i;
for(i=0;i<_MAX_CATEGORIES_;i++)
if(ID == FrcLvlCatID[i])
return(i);
return(0);
}
void SelectForceCategoryCB(long,short hittype,C_Base *control)
{
C_Window *win;
C_Text *txt;
C_Level *lvl;
if(hittype != C_TYPE_SELECT)
return;
win=gMainHandler->FindWindow(FORCE_WIN);
if(win)
{
win->HideGroup(LastForceCatID);
LastForceCatID=((C_ListBox *)control)->GetTextID();
lvl=(C_Level*)win->FindControl(4441313+FindStatIndex(LastForceCatID));
if(lvl)
{
txt=(C_Text*)win->FindControl(HIGH_Y);
if(txt)
{
txt->Refresh();
txt->SetText(lvl->GetYLabel(2));
txt->Refresh();
}
txt=(C_Text*)win->FindControl(HALF_Y);
if(txt)
{
txt->Refresh();
txt->SetText(lvl->GetYLabel(1));
txt->Refresh();
}
txt=(C_Text*)win->FindControl(LOW_Y);
if(txt)
{
txt->Refresh();
txt->SetText(lvl->GetYLabel(0));
txt->Refresh();
}
}
win->UnHideGroup(LastForceCatID);
win->RefreshClient(1);
}
}
COLORREF FrcTeamColors[_LEVEL_MAX_TEAMS_]=
{
0x00000000, // Team 0
0x00ff0000, // Team 1 (US)
0x00f5f502, // Team 2 (ROK)
0x00000000, // Team 3 (Japan)
0x000098ec, // Team 4 (CIS)
0x0000ffff, // Team 5 (China)
0x000202f8, // Team 6 (DPRK)
0x00000000, // Team 7
};
void LoadForceLevelHistory()
{
C_Window *win;
C_Level *stats[_MAX_CATEGORIES_];
C_Text *txt;
short i,j;
short numteams;
CampaignTime time;
TeamStatusType teamstats[_LEVEL_MAX_TEAMS_];
C_ListBox *lbox;
FILE *fp;
short Reading,First=1;
long MaxValue,MinValue;
long TimeID,StatIdx,count,start=0,end=0;
_TCHAR buffer[20];
DeleteGroupList(FORCE_WIN);
win=gMainHandler->FindWindow(FORCE_WIN);
if(win)
{
fp = OpenCampFile("tmp","frc","rb");
if(!fp)
return;
for(i=0;i<_MAX_CATEGORIES_;i++)
{
stats[i]=new C_Level;
stats[i]->Setup(4441313+i,0);
stats[i]->SetDrawArea(1,1,
static_cast<short>(win->ClientArea_[1].right-win->ClientArea_[1].left-2),
static_cast<short>(win->ClientArea_[1].bottom-win->ClientArea_[1].top-2));
stats[i]->SetGroup(FrcLvlCatID[i]);
stats[i]->SetClient(1);
stats[i]->SetFlagBitOn(C_BIT_INVISIBLE);
stats[i]->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
for(j=0;j<_LEVEL_MAX_TEAMS_;j++)
stats[i]->SetTeamColor(static_cast<short>(j),FrcTeamColors[j]);
}
CampEnterCriticalSection();
Reading=1;
numteams=0;
count=0;
while(Reading)
{
Reading=static_cast<short>(fread(&time,sizeof(CampaignTime),1,fp));
if(Reading)
{
count++;
TimeID=time / (VU_TICS_PER_SECOND * 60);
if(First)
start = TimeID;
end = TimeID;
if(!fread(&numteams,sizeof(short),1,fp))
MonoPrint("Error Reading Force Level\n");
for (i=0; i<numteams; i++)
{
if(!fread(&teamstats[i],sizeof(TeamStatusType),1,fp))
MonoPrint("Error Reading Force Level\n");
}
for(i=0;i<_MAX_CATEGORIES_;i++)
{
if(First)
stats[i]->SetStart(TimeID);
stats[i]->SetEnd(TimeID);
}
First=0;
for(i=0;i<numteams;i++)
{
if (teamstats[i].supplyLevel < 255)
{
// Team is active
stats[0]->AddPoint(i,teamstats[i].airDefenseVehs);
stats[1]->AddPoint(i,teamstats[i].ships);
stats[2]->AddPoint(i,teamstats[i].supplyLevel);
stats[3]->AddPoint(i,teamstats[i].fuelLevel);
stats[4]->AddPoint(i,teamstats[i].airbases);
stats[5]->AddPoint(i,teamstats[i].aircraft);
stats[6]->AddPoint(i,teamstats[i].groundVehs);
}
else
{
// Team is inactive.
stats[0]->AddPoint(i,-1);
stats[1]->AddPoint(i,-1);
stats[2]->AddPoint(i,-1);
stats[3]->AddPoint(i,-1);
stats[4]->AddPoint(i,-1);
stats[5]->AddPoint(i,-1);
stats[6]->AddPoint(i,-1);
}
}
}
}
fclose(fp);
CampLeaveCriticalSection();
for(i=0;i<_MAX_CATEGORIES_;i++)
{
stats[i]->CalcPositions();
MaxValue=stats[i]->GetMaxValue();
MinValue=stats[i]->GetMinValue();
_stprintf(buffer,"%1ld",MaxValue);
stats[i]->SetYLabel(2,buffer);
_stprintf(buffer,"%1ld",(MaxValue-MinValue)/2);
stats[i]->SetYLabel(1,buffer);
_stprintf(buffer,"%1ld",MinValue);
stats[i]->SetYLabel(0,buffer);
win->AddControl(stats[i]);
}
_stprintf(buffer,"%s %1ld %02ld:00",gStringMgr->GetString(TXT_DAY),start / (60 * 24)+1,(start / 60) % 24);
txt=(C_Te
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -