⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 events.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************\
	UI_IA.cpp
	Peter Ward
	December 3, 1996

	Main UI screen stuff for falcon
\***************************************************************************/
#include <windows.h>
#include "entity.h"
#include "feature.h"
#include "vehicle.h"
#include "evtparse.h"
#include "Mesg.h"
#include "MsgInc\DamageMsg.h"
#include "MsgInc\WeaponFireMsg.h"
#include "MsgInc\DeathMessage.h"
#include "MsgInc\MissileEndMsg.h"
#include "MsgInc\LandingMessage.h"
#include "MsgInc\EjectMsg.h"
#include "MsgInc\PlayerStatusMsg.h"
#include "PlayerOp.h"
#include "classtbl.h"
#include "chandler.h"
#include "ui95_ext.h"
#include "acmi\src\include\acmirec.h"
#include "ui_ia.h"
#include "events.h"
#include "userids.h"
#include "textids.h"
#include "MissEval.h"
#include "CampStr.h"

// External function prototypes
_TCHAR *UI_WordWrap(C_Window *win,_TCHAR *str,long fontid,short width,BOOL *status);
void DeleteGroupList( long ID );

// ==================================
// Global sorted event list
// ==================================

EventElement *SortedEventList=NULL;

// ==================================
// Event list maintenance routines
// ==================================

void AddtoEventList(EventElement *theEvent)
	{
	EventElement	*cur,*last=NULL,*newone;

	while (theEvent)
		{
		newone = new EventElement;
		newone->next = NULL;
		newone->eventTime = theEvent->eventTime;
		newone->vuIdData1 = theEvent->vuIdData1;
		newone->vuIdData2 = theEvent->vuIdData2;
		strcpy(newone->eventString,theEvent->eventString);

		cur = SortedEventList;
		while (cur && cur->eventTime < newone->eventTime)
			{
			last = cur;
			cur = cur->next;
			}

		if (last)
			{
			newone->next = cur;
			last->next = newone;
			}
		else
			{
			newone->next = SortedEventList;
			SortedEventList = newone;
			}
		theEvent = theEvent->next;
		}
	}

void ClearSortedEventList()
	{
	EventElement *cur,*last;

	cur=SortedEventList;
	while(cur)
		{
		last=cur;
		cur=cur->next;
		delete last;
		}
	SortedEventList=NULL;
	}

// ==================================================
// The thing which makes the list and adds to windows
// ==================================================

static void AddMessageToWindow(C_Window *win, long client, int *y, CampaignTime eventtime, _TCHAR *eventstr)
{
	C_Text *txt;
	_TCHAR time_str[80];
	int wrap_w;

	// Add it to window
	// Do time string
	GetTimeString(eventtime, time_str);
	txt=new C_Text;
	txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
	txt->SetFixedWidth(_tcsclen(time_str)+1);
	txt->SetText(time_str);
	txt->SetXY(45,*y);
	txt->SetFlagBitOn(C_BIT_RIGHT);
	txt->SetFGColor(0x00f0f0f0);
	txt->SetFont(win->Font_);
	txt->SetFlagBitOn(C_BIT_LEFT);
	txt->SetClient(static_cast<short>(client));
	win->AddControl(txt);

	// Do event string
	wrap_w = win->ClientArea_[client].right-win->ClientArea_[client].left - 48;
	txt=new C_Text;
	txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
	txt->SetFixedWidth(_tcsclen(eventstr)+1);
	txt->SetXY(48,*y);
	txt->SetW(wrap_w);
	txt->SetFGColor(0x00f0f0f0);
	txt->SetFont(win->Font_);
	txt->SetFlagBitOn(C_BIT_LEFT|C_BIT_WORDWRAP);
	txt->SetClient(static_cast<short>(client));
	txt->SetText(eventstr);
	win->AddControl(txt);
	*y+=txt->GetH();
}

// ProcessEventList now simply builds an ordered event list from the MissionEvaluator 
// and add the messages to a window
void ProcessEventList(C_Window *win,long client)
	{
	EventElement		*cur;
	FlightDataClass		*flight_data;
	PilotDataClass		*pilot_data;
	int					i,y=0;

	// Build an event list from the MissionEvaluator class
	flight_data = TheCampaign.MissionEvaluator->flight_data;
	while (flight_data)
		{
		AddtoEventList(flight_data->root_event);
		pilot_data = flight_data->pilot_list;
		while (pilot_data)
			{
			for (i=0;i<pilot_data->weapon_types;i++)
				AddtoEventList(pilot_data->weapon_data[i].root_event);
			pilot_data = pilot_data->next_pilot;
			}
		flight_data = flight_data->next_flight;
		}
	
	cur=SortedEventList;
	while(cur)
		{
		AddMessageToWindow(win,client,&y,cur->eventTime,cur->eventString);
		cur=cur->next;
		}

	// KCK: Peter suggested we move this to somewhere else
	ClearSortedEventList();
	win->ScanClientArea(client);
	win->RefreshWindow();
	}

// ProcessEventList now simply builds an ordered event list from the MissionEvaluator 
// and add the messages to a window
// This is called by ACMI Import which is also responible for
// cleaning up the sorted list
EventElement * ProcessEventListForACMI(void)
{
	FlightDataClass		*flight_data;
	PilotDataClass		*pilot_data;
	int					i;//,y=0;

	// Build an event list from the MissionEvaluator class
	flight_data = TheCampaign.MissionEvaluator->flight_data;
	while (flight_data)
	{
		AddtoEventList(flight_data->root_event);
		pilot_data = flight_data->pilot_list;
		while (pilot_data)
		{
			for (i=0;i<pilot_data->weapon_types;i++)
				AddtoEventList(pilot_data->weapon_data[i].root_event);
			pilot_data = pilot_data->next_pilot;
		}
		flight_data = flight_data->next_flight;
	}
	
	return SortedEventList;
}

/*
** This is called by the ACMI UI where the events are being read off
** the tape as an array, not a linked list
*/
void ProcessEventArray(C_Window *win, void *events, int count )
{
	C_Text *txt;
	ACMITextEvent *evList,*cur;
	_TCHAR *Time_str,*Message_str;
	int y,fh,wrap_w;
	int i;

	evList=(ACMITextEvent *)events;
	if(evList == NULL)
		return;

	DeleteGroupList( win->GetID() );

	y=0;
	fh=gFontList->GetHeight(win->Font_);
	wrap_w=win->ClientArea_[0].right-win->ClientArea_[0].left - 40;
	for ( i = 0; i < count; i++ )
	{
		cur = &evList[i];
		Time_str = (_TCHAR *)cur->timeStr;
		Message_str = (_TCHAR *)cur->msgStr;

		txt=new C_Text;
		txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
		txt->SetFixedWidth(_tcsclen(Time_str)+1);
		txt->SetText(Time_str);
		txt->SetXY(0,y);
		txt->SetFGColor(0x0000ff00);
		txt->SetFont(win->Font_);
		txt->SetFlagBitOn(C_BIT_LEFT);
		txt->SetUserNumber( 0, cur->intTime );
		txt->SetUserNumber( _UI95_DELGROUP_SLOT_, _UI95_DELGROUP_ID_ );

		win->AddControl(txt);

		txt=new C_Text;
		txt->Setup(C_DONT_CARE,C_TYPE_LEFT);
		txt->SetFixedWidth(_tcsclen(Message_str)+1);
		txt->SetXY(34,y);
		txt->SetW(wrap_w);
		txt->SetFGColor(0x00f0f0f0);
		txt->SetFont(win->Font_);
		txt->SetFlagBitOn(C_BIT_LEFT|C_BIT_WORDWRAP);
		txt->SetUserNumber( _UI95_DELGROUP_SLOT_, _UI95_DELGROUP_ID_ );
		txt->SetText(Message_str);
		win->AddControl(txt);
		y+=txt->GetH();
	}
	win->ScanClientArea(0);
	win->RefreshWindow();
}




















// Everything below here is out of date
#if 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -