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

#include "NPC.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;
int tmp_picMax;//20170102 

int NPC::PubInit(int idx)
{
	int resnum = GetResNum(RES_ARS,2,idx);
	if(resnum == -1)return -1;
	this->no = idx;//编号
	//角色类型 编号 面向 脚步 动作 x坐标 y坐标 学会 姓名（3900ffffffffffff）延时 图片 
	faceTo = resByte[resnum][2]-1;//面向
	step = resByte[resnum][3];//脚步 
	action = resByte[resnum][4];//动作 

	//ax = resByte[resnum][5];//绝对坐标
	//ay = resByte[resnum][6];//绝对坐标

	magicLearn = resByte[resnum][7];//学会 
	for(int i = 0 ;i<12;i++)
	{
		if(resByte[resnum][i+9] == 255)//20210629
		{
			break;
		}
		name[i]= resByte[resnum][i+9];
	}
	delay = resByte[resnum][21];
	picno = resByte[resnum][22];//图片 
	delayGot = 0;
	LoadPic(RES_ACP,2,picno,hbmp,0);	//封装完成
	picMax = tmp_picMax;
	return 0;
}

/***********************************************************************
 * 说明:     NPC类初始化函数
 * 输入参数: int num——用于设定君主等信息，由君主选择传值过来
 * 返回值  : 无
 * 功能	   : 初始化
 * 修改历史:
 *               姓名            日期             说明
 *             ------          ----------      -------------
 *             wstjb          2012-10-5       完成基本功能
***********************************************************************/
void NPC::Init(int num,int x,int y)
{
	this->x = x;
	this->y = y;
	//this->picnum = 0;
	steptmp = 0;
	if(num!=-1)this->roleId = num;
	
}

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

/***********************************************************************
 * 说明:     NPC类按键函数
 * 输入参数: WPARAM KeyCode——按键信息，用于确定当前的城市
 * 返回值  : 无
 * 功能	   : 处理当前类的按键信息
 * 修改历史:
 *               姓名            日期             说明
 *             ------          ----------      -------------
 *             wstjb          2012-10-5       完成基本功能
 *			   wstjb			2012-10-20		增加功能
***********************************************************************/
int NPC::KeyDown(WPARAM KeyCode)
{
	return 0;
}

void NPC::SetStep(int inFaceto,int inStep)
{
	faceTo = inFaceto;
	step = inStep;
	picnum = faceTo * 3 + step;
	if(picnum > picMax) picnum = 0;
	Show(0);
}

void NPC::Move(int faceTo1)
{
	if(action == 1||action == 2)//随机移动
	{
		MoveIt(faceTo1);
	}
	else if(action == 3)//暂停状态
	{
		if(delayGot == delay)
		{
			MoveIt(faceTo1);
		}
		else
		{
			delayGot++;
		}
	}
	else if(action == 4)//只换图片
	{
		picnum ++;
		if(picnum == 12)picnum = 0;//循环
	}
	
}

void NPC::MoveIt(int faceTo1)
{
	oldfaceTo = faceTo ;
	faceTo = faceTo1;

	//需要增加判断可移动层
	
	if(oldfaceTo == faceTo1)
	{
		step++;
		if(step == 3)step = 0;
		if(faceTo == 0)
		{
			//if(enableByte[width * (y + 3 - 1) + x + 4])==1)
			{
				ay--;
			}
		}
		else if(faceTo == 1)
		{
			ax++;
		}
		else if(faceTo == 2)
		{
			ay++;
		}
		else if(faceTo == 3)
		{
			ax--;
		}
	}
	else
	{
		step = 0;
	}
	picnum = faceTo * 3 + step;
	if(picnum > picMax) picnum = 0;


}