/***********************************************************************
*Copyright (c)2012 , 天际边工作室
*All rights reserved.
**
文件名称：	CityList.cpp
*摘要：		游戏城市队列类
**
*修改历史：
*	版本    日期     作者     改动内容和原因
*   ----------------------------------------------------
*	1.0    2012-10-20  wstjb     基本的功能完成
***********************************************************************/

#include "CityList.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "PublicFun.h"

extern  PAINTSTRUCT ps;
extern 	HDC hdc;
extern 	HBITMAP hbmp; 
extern 	HBITMAP hbmp2; 
extern 	BITMAP bmp;
extern 	HDC hdcMem;
extern 	HDC hdcTmp;
extern 	RECT rect;
extern 	HWND hwnd;
extern  char texta[TEXTAMAX][20];
extern int KeyReturn;
extern int KeyEsc;
extern int KeyHome;
extern int KeySpace;
extern int KeyLeft0;
extern int KeyUp0;
extern int KeyRight0;
extern int KeyDown0;
extern int color;

extern char t_heroName[HEROMAX][HERONAMEMAXLEN];
extern HPEN t_hpen;
extern HBRUSH t_hbrush;

using namespace std;


/***********************************************************************
* 说明:     CityList类全局初始化函数
* 输入参数: int choice——所选择历史时期
* 返回值  : 无
* 功能	   : 初始化City类全部数据
* 修改历史:
*               姓名            日期             说明
*             ------          ----------      -------------
*             wstjb          2012-10-20       完成基本功能
***********************************************************************/
void CityList::PubInit(int choice)
{
	wlogfile(1,__FUNCTION__,"开始",0);
	char name[NORMALSTRLEN];
	sprintf_s(name,"Res\\City\\city%d.sdt",choice+1);
	ifstream infile(name,ios::in);
	for(int y=0;y<CITYMAX;y++)
	{
		//city[y]=new City();
		//city[y].InitData(choice,y);


		infile>>city[y].no;
		infile>>city[y].owner;
		infile>>city[y].ownto;
		infile>>city[y].agriculturemax;
		infile>>city[y].agriculture;
		infile>>city[y].businessmax;
		infile>>city[y].business;
		infile>>city[y].heart;
		infile>>city[y].disease;
		infile>>city[y].peoplemax;
		infile>>city[y].people;
		infile>>city[y].money;
		if(city[y].money>99998)city[y].money=1;
		infile>>city[y].foods;
		if(city[y].foods>99998)city[y].foods=1;
		infile>>city[y].soldierspace;
		infile>>city[y].employers;
		infile>>city[y].employnum;
		infile>>city[y].goods;
		infile>>city[y].goodnum;
		city[y].statue=0;
		if(infile.eof()!=0) break;		



	}

	infile.close();

}

/***********************************************************************
* 说明:     CityList类调用初始化函数
* 输入参数: int unx——城市横坐标，int uny——城市纵坐标，
int uchoice——所选择历史时期
* 返回值  : 无
* 功能	   : 初始化CityList类
* 修改历史:
*               姓名            日期             说明
*             ------          ----------      -------------
*             wstjb          2012-10-13       完成基本功能
***********************************************************************/
void CityList::Init(int unx,int uny,int uchoice)
{
	wlogfile(1,__FUNCTION__,"开始",0);
	state=0;
	choice=uchoice;
	this->unx=unx;
	this->uny=uny;
	GetCityNum();
	GetCityName();
	GetCityOwner();
	GetCityOwnto();
}


/***********************************************************************
* 说明:     CityList类显示函数
* 输入参数: 无
* 返回值  : 无
* 功能	   : 显示城市属性
* 修改历史:
*               姓名            日期             说明
*             ------          ----------      -------------
*             wstjb          2012-10-13      完成基本功能
***********************************************************************/
void CityList::Show()
{
	wlogfile(1,__FUNCTION__,"开始",0);
	char str[20];

	MySetShowStyle();
	HPEN hpen=t_hpen;
	HPEN oldhpen=(HPEN)SelectObject(hdcTmp,hpen);

	HBRUSH hbrush = t_hbrush;
	HBRUSH hbrold = (HBRUSH)SelectObject(hdcTmp, hbrush); 
	Rectangle(hdcTmp,140,50,690,450); 
	SelectObject(hdcTmp, hbrold); 
	DeleteObject(hbrush);
	SelectObject(hdcTmp,oldhpen);
	DeleteObject(hpen);
	

	if (state==0)
	{
		ShowText(cityname,155,60);
		ShowText(GetStrText("ATRR_STR1"),155,120);
		ShowText(GetStrText("ATRR_STR2"),155,180);
		ShowText(GetStrText("ATRR_STR3"),155,240);
		ShowText(GetStrText("ATRR_STR4"),155,300);
		ShowText(GetStrText("ATRR_STR5"),155,360);
		OverflowCheck(__FILE__,__LINE__,CITYMAX,number);
		if(city[number].owner==0)
		{
			ShowText(GetStrText("ATRR_STR70"),305,120);
		}
		else
		{
			ShowText(cityowner,305,120);
		}
		if(city[number].ownto==0)
		{
			ShowText(GetStrText("ATRR_STR70"),305,180);
		}
		else
		{
			ShowText(cityownto,305,180);
		}

		if(city[number].agriculture<0)city[number].agriculture=0;
		if(city[number].business<0)city[number].business=0;
		if(city[number].heart<0)city[number].heart=0;
		sprintf_s(str,"%d/%d",city[number].agriculture,city[number].agriculturemax);
		ShowText(str,305,240);
		sprintf_s(str,"%d/%d",city[number].business,city[number].businessmax);
		ShowText(str,305,300);
		sprintf_s(str,"%d",city[number].heart);
		ShowText(str,305,360);
	}
	else if(state==1)
	{
		OverflowCheck(__FILE__,__LINE__,CITYMAX,number);
		ShowText(cityname,155,60);
		ShowText(GetStrText("ATRR_STR6"),155,120);
		ShowText(GetStrText("ATRR_STR7"),155,180);
		ShowText(GetStrText("ATRR_STR8"),155,240);
		ShowText(GetStrText("ATRR_STR9"),155,300);
		ShowText(GetStrText("ATRR_STR10"),155,360);
		if(city[number].disease<0)city[number].disease=0;
		if(city[number].people<0)city[number].people=0;
		if(city[number].money<0)city[number].money=0;
		if(city[number].foods<0)city[number].foods=0;
		if(city[number].soldierspace<0)city[number].soldierspace=0;
		sprintf_s(str,"%d",city[number].disease);
		ShowText(str,305,120);
		sprintf_s(str,"%d",city[number].people);
		ShowText(str,305,180);
		sprintf_s(str,"%d",city[number].money);
		ShowText(str,305,240);
		sprintf_s(str,"%d",city[number].foods);
		ShowText(str,305,300);
		sprintf_s(str,"%d",city[number].soldierspace);
		ShowText(str,425,360);

	}
	else
	{
		ShowText(cityname,155,60);
		ShowText(GetStrText("ATRR_STR0"),155,120);
		GetCityStatue();
		ShowText(citystat,305,120);
	}
	//DeleteObject(hpen);
	ShowCG(0,"Res\\cross.sbp",630,10);//20170206
}

/***********************************************************************
* 说明:     CityList类按键处理函数
* 输入参数: WPARAM KeyCode——按键信息
* 返回值  : 无
* 功能	   : 处理按键
* 修改历史:
*               姓名            日期             说明
*             ------          ----------      -------------
*             wstjb          2012-10-13      完成基本功能
***********************************************************************/
int CityList::KeyDown(WPARAM KeyCode)
{
	wlogfile(1,__FUNCTION__,"开始",KeyCode);
	if(KeyCode==KeyDown0)
	{

		state++;
		if(state==3)state=2;
		Show();
		return 0;
	}
	else if(KeyCode==KeyUp0)
	{
		state--;
		if(state==-1)state=0;
		Show();
		return 0;
	}
	else if(KeyCode==KeyReturn)
	{
		return -1;
	}
	else if(KeyCode==KeyEsc)
	{
		return -1;
	}
	else
	{
		return 0;
	}

}

/***********************************************************************
* 说明:     CityList类获取城市名称函数
* 输入参数: 无
* 返回值  : 无
* 功能	   : 获取城市名称
* 修改历史:
*               姓名            日期             说明
*             ------          ----------      -------------
*             wstjb          2012-10-13      完成基本功能
***********************************************************************/
void CityList::GetCityName()
{
	wlogfile(1,__FUNCTION__,"开始",0);
	GetFileText("Res//cityname.sss");
	int k=uny*12+unx;
	OverflowCheck(__FILE__,__LINE__,TEXTAMAX,k);
	if (texta[k][0]!='0')
		//TextOut(hdcTmp,155,60,texta[k],strlen(texta[k]));
	{
		for(int p=0;p<10;p++)
		{
			
			cityname[p]=texta[k][p];
		}
	}
}

/***********************************************************************
* 说明:     CityList类获取城市君主函数
* 输入参数: 无
* 返回值  : 无
* 功能	   : 获取城市君主
* 修改历史:
*               姓名            日期             说明
*             ------          ----------      -------------
*             wstjb          2012-10-13      完成基本功能
***********************************************************************/
void CityList::GetCityOwner()
{
	wlogfile(1,__FUNCTION__,"开始",0);
	
	if(city[number].owner>0 && city[number].owner < HEROMAX )
	{
		OverflowCheck(__FILE__,__LINE__,CITYMAX,number);
		OverflowCheck(__FILE__,__LINE__,HEROMAX,city[number].owner-1);
		sprintf_s(cityowner,"%s",t_heroName[city[number].owner-1]);
	}
	else
	{
		sprintf_s(cityowner,GetStrText("ATRR_STR70"));
	}


}

/***********************************************************************
* 说明:     CityList类获取城市太守函数
* 输入参数: 无
* 返回值  : 无
* 功能	   : 获取城市太守
* 修改历史:
*               姓名            日期             说明
*             ------          ----------      -------------
*             wstjb          2012-10-13      完成基本功能
***********************************************************************/
void CityList::GetCityOwnto()
{
	wlogfile(1,__FUNCTION__,"开始",0);
	if(city[number].ownto>0)
	{
		OverflowCheck(__FILE__,__LINE__,CITYMAX,number);
		OverflowCheck(__FILE__,__LINE__,HEROMAX,city[number].ownto-1);
		sprintf_s(cityownto,"%s",t_heroName[city[number].ownto-1]);
	}
	else
	{
		sprintf_s(cityownto,"无");
	}
}

void CityList::GetCityStatue()
{
	wlogfile(1,__FUNCTION__,"开始",0);
	OverflowCheck(__FILE__,__LINE__,CITYMAX,number);
	switch(city[number].statue)
	{
	case NORMAL:
		sprintf_s(citystat,"%s",GetStrText("CITY_STATE_STR1"));
		break;
	case FAMINE:
		sprintf_s(citystat,"%s",GetStrText("CITY_STATE_STR2"));
		break;
	case DROUGHT:
		sprintf_s(citystat,"%s",GetStrText("CITY_STATE_STR3"));
		break;
	case FLOOD:
		sprintf_s(citystat,"%s",GetStrText("CITY_STATE_STR4"));
		break;
	case RIOT:
		sprintf_s(citystat,"%s",GetStrText("CITY_STATE_STR5"));
		break;
	}

}

/***********************************************************************
* 说明:     CityList类获取城市编号函数
* 输入参数: 无
* 返回值  : 无
* 功能	   : 获取城市编号
* 修改历史:
*               姓名            日期             说明
*             ------          ----------      -------------
*             wstjb          2012-10-13      完成基本功能
***********************************************************************/
void CityList::GetCityNum()
{
	wlogfile(1,__FUNCTION__,"开始",0);
	//由unxuny算出number
	//ChangeRes(name);
	ifstream infile("Res\\City\\postion.sdt",ios::in);
	int tmpx;
	int tmpy;
	int o=0;
	while(infile>>tmpx)
	{
		infile>>tmpy;
		o++;
		if(tmpx==unx&&tmpy==uny)
		{
			number=o-1;
			break;
		}

	}
	infile.close();	
	//ChangeRes(name);
}


