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

#include "Actor.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

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  int color;
extern  int flag;

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 byte resByte[2731][16384];//存储lib资源
extern int resByteLen[2731];
extern int resPos[2731][6];//存储lib地址和编号 第六位为长度
extern int resCount;

/***********************************************************************
 * 说明:     Actor类初始化函数
 * 输入参数: int num——用于设定君主等信息，由君主选择传值过来
 * 返回值  : 无
 * 功能	   : 初始化
 * 修改历史:
 *               姓名            日期             说明
 *             ------          ----------      -------------
 *             wstjb          2012-10-5       完成基本功能
***********************************************************************/
int Actor::PubInit(int idx)
{
	int resnum = GetResNum(RES_ARS,1,idx);
	if(resnum == -1)return -1;
	this->no = idx;//编号
	//角色类型 编号 面向 脚步 动作 x坐标 y坐标 延时 最大链 学会 姓名（3900ffffffffffff）
	//图片 魔法连 头戴 身穿 肩披 护腕 手持 脚蹬 佩戴1 佩戴2 等级 异常（5字节） hpmax(2) hp(2) mpmax（2） mp(2) 
	//攻击（2） 防御（2） 当前经验（2） 升级经验（2） 身法 灵力 幸运 未知
	faceTo = resByte[resnum][2];//面向
	step = resByte[resnum][3];//脚步 
	action = resByte[resnum][4];//动作 

	x = resByte[resnum][5];
	y = resByte[resnum][6];
	delay = resByte[resnum][7];
	magicMaxInList = resByte[resnum][8];
	magicLearn = resByte[resnum][9];//学会 
	for(int i = 0 ;i<12;i++)
	{
		if(resByte[resnum][i+10] == 255)//20210629
		{
			break;
		}
		name[i]= resByte[resnum][i+10];
	}
	picno = resByte[resnum][22];//图片 
	magicListNo = resByte[resnum][23];//魔法连 
	if(magicListNo==0)magicListNo=255;//20160729修正

	head = resByte[resnum][24];//15-头戴，
	body = resByte[resnum][25];//16-身穿，
	shoulder = resByte[resnum][26];//17-肩披，
	sleeve = resByte[resnum][27];//18-护腕，
	hand = resByte[resnum][28];//19-手持，
	foot = resByte[resnum][29];//20-脚蹬，
	decorate1 = resByte[resnum][30];//21-佩戴1，
	decorate2 = resByte[resnum][31];//22-佩戴2，

	degree = resByte[resnum][32];//0-级别，

	//atcause = resByte[resnum][33];//11-普通攻击可能产生异常状态，

	hpMax = BytesToInt2(&resByte[resnum][38]);//23-生命上限，
	hp = BytesToInt2(&resByte[resnum][40]);//4-生命，
	mpMax = BytesToInt2(&resByte[resnum][42]);//24-真气上限
	mp = BytesToInt2(&resByte[resnum][44]);//5-真气

	att = BytesToInt2(&resByte[resnum][46]);//1-攻击力，
	def = BytesToInt2(&resByte[resnum][48]);//2-防御力，

	exp = BytesToInt2(&resByte[resnum][50]);//6-当前经验值，
	expMax = BytesToInt2(&resByte[resnum][52]);//升级经验

	speed = resByte[resnum][54];//3-身法，
	anima = resByte[resnum][55];//7-灵力，
	lucky = resByte[resnum][56];//8-幸运，
	return 0;
}


void Actor::Init(int num,int x,int y)
{
	this->x = x;
	this->y = y;
	this->picnum = 9;
	steptmp = 0;
	this->roleId = num;
}

/***********************************************************************
 * 说明:     Actor类显示函数
 * 输入参数: WPARAM KeyCode——按键信息，用于控制地图移动与对应的显示
 * 返回值  : 无
 * 功能	   : 显示地图及相关界面
 * 修改历史:
 *               姓名            日期             说明
 *             ------          ----------      -------------
 *             wstjb          2012-10-5       完成基本功能
***********************************************************************/
void Actor::Show(WPARAM KeyCode)
{
	//ShowRolePic(0,1,roleId,x*16+8,(y-1)*16,picnum);
	ShowRolePic(0,1,picno,x*16+8,(y-1)*16,picnum);//20170219
}

/***********************************************************************
 * 说明:     Actor类按键函数
 * 输入参数: WPARAM KeyCode——按键信息，用于确定当前的城市
 * 返回值  : 无
 * 功能	   : 处理当前类的按键信息
 * 修改历史:
 *               姓名            日期             说明
 *             ------          ----------      -------------
 *             wstjb          2012-10-5       完成基本功能
 *			   wstjb			2012-10-20		增加功能
***********************************************************************/
int Actor::KeyDown(WPARAM KeyCode)
{
	if(KeyCode ==KeyUp0)
	{
		if(picnum < 3)
		{
			if(picnum == 0) 
			{
				picnum = 1;
			}
			else if(picnum == 1 && steptmp == 0) 
			{
				picnum = 2;
				steptmp = 1;
			}
			else if(picnum == 2) 
			{
				picnum = 1;
			}
			else if(picnum == 1 && steptmp == 1) 
			{
				picnum = 0;
				steptmp = 0;
			}
		}
		else
		{
			picnum = picnum %3 ;
		}
	}
	else if(KeyCode ==KeyDown0)
	{
		if(picnum > 5 && picnum < 9)
		{
			if(picnum == 6) 
			{
				picnum = 7;
			}
			else if(picnum == 7 && steptmp == 0) 
			{
				picnum = 8;
				steptmp = 1;
			}
			else if(picnum == 8) 
			{
				picnum = 7;
			}
			else if(picnum == 7 && steptmp == 1) 
			{
				picnum = 6;
				steptmp = 0;
			}
		}
		else
		{
			picnum = picnum %3 + 6;
		}
	}
	else if(KeyCode ==KeyLeft0)
	{
		if(picnum > 8)
		{
			if(picnum == 9) 
			{
				picnum = 10;
			}
			else if(picnum == 10 && steptmp == 0) 
			{
				picnum = 11;
				steptmp = 1;
			}
			else if(picnum == 11) 
			{
				picnum = 10;
			}
			else if(picnum == 10 && steptmp == 1) 
			{
				picnum = 9;
				steptmp = 0;
			}
		}
		else
		{
			picnum = picnum %3 + 9;
		}
	}
	else if(KeyCode ==KeyRight0)
	{
		if(picnum > 2 && picnum < 6)
		{
			if(picnum == 3) 
			{
				picnum = 4;
			}
			else if(picnum == 4 && steptmp == 0) 
			{
				picnum = 5;
				steptmp = 1;
			}
			else if(picnum == 5) 
			{
				picnum = 4;
			}
			else if(picnum == 4 && steptmp == 1) 
			{
				picnum = 3;
				steptmp = 0;
			}
		}
		else
		{
			picnum = picnum %3 + 3;
		}
		
	}

	if(inRankFlag == 1)Show(0);//20170129
	return 0;
}


void Actor::SetStep(int faceto,int step)
{
	picnum = faceto * 3 + step;
	if(picnum > 11) picnum = 0;
	if(picnum < 0) picnum = 0;
	if(inRankFlag == 1)Show(0);//20170129
}