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

#pragma once

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include "PublicFun.h"
#include "FightHero.h"
#include "FightEnemy.h"
#include "Menu.h"
#include "DegreeList.h"
#include "MagicList.h"
#include "GoodList.h"

class Fight
{

public:
	void Init(int scrb,int scrl,int scrr,int f0=0,int f1=0,int f2 =0,int f3 =0,int f4 =0,int f5 =0,int f6 =0,int f7 = 0);//INITFIGHT f0 f1 f2 f3 f4 f5 f6 f7 scrb scrl scrr
	int KeyDown(WPARAM KeyCode);
	void Show(WPARAM KeyCode);
	void EnterInit(int roundmax,int f0,int f1,int f2,int scrb ,int scrl,int scrr,int evtrnd0 ,int evtrnd1,int evtrnd2 ,int evt0 ,int evt1 ,int evt2 ,int lossto ,int winto);//ENTERFIGHT roundmax f0 f1 f2 scrb scrl scrr evtrnd0 evtrnd1 evtrnd2 evt0 evt1 evt2 lossto winto
	int UsedInit();
	int hasAllAttact();//有合体技
	void randomEnemy();//随机取3敌人初始化
	void ShowFightActorPic(int idx,int no=0);
	void ShowFightEnemyPic(int idx);
	int ShowFightActorPicDirect(int idx,int att,int fightType);
	int ShowFightEnemyPicDirect(int idx,int att,int fightType);
	int HasGoods(int type);//检测有无道具
	void DelEquipUse();
	int FightRun();//增加返回值 -1=跳出 1-赢 2-输 0-无结果
	int CountHurt(int j,int attObjId,int selectedFightStyle);
	int ShowAct(int id,int attObjId,int fightType = 0);//0-普通打 1-法术 2-防御 3-被攻击 4-缺血 5-死亡 6-逃跑
	void ShowHurt(int j,int hurt);
	void ShowBuff(int j,int type,int buffFlag1);//显示特殊状态 type类型 
	int AICountHurt(int j,int attObjId,int selectedFightStyle);
	int CountDLFMStatusHurt(int j);
	int AISelectTarget(int j,int type);//20160718新增type用于恢复选择
	int AISelectedFight(int j);
	

	int FightRunAuto();
	void GetAutoEnemy();
	int CheckWinLose(int type=0);//20170219增加type
	int DealResult(int result);//检测结果
	void GetTmpEnemy(int type = 0);
	int GetRunSpeed();
	int DelHeroLevelUp(int i,int degree);//等级提升
	int DelMagicLearn(int i,int no);
	int AddHurt(int type,int attObjId);//后续全体法术 增加伤害
	void GiveBuff(int i,int type,int flag1,int round);//20160625 给予指定对象特殊效果 对象编号 类型 效果标志 回合
	void AIGiveBuff(int i,int type,int flag1,int round);//20160626 给予指定对象特殊效果 对象编号 类型 效果标志 回合
	int CanUseMagic();
	void DealMian();
	void AIShowBuff(int i,int type,int flag1);//20160626
	int CheckTo(int j);//20160630 检测对象为我方还是敌方
	void CountSpecialRecover(int j);//20160702判断每回合恢复
	int GetAllMagicHP(int magicno);//20170102合体法术序号得伤害
	int CountSkillHurt(int hp,int myanima,int enanima);//20170125增加计算技能伤害值公式
	int CountNormalHurt(int type,int tatt,int tdef);////20170125 type 0-我方打敌人 1-敌人打我
	int GetMissResult(int type,int from,int to);//20170130计算MISS的两个对象，type 0-我方打敌人 1-敌人打我 1-miss 0-不miss
	int CheckAntiCauseBy(int type,int goodType,int goodIdx,int usedecorateflag);//20181007

	int enemyType[8];
	int scrb;
	int scrl;
	int scrr;
	int usedenemyType[3];

	//enterfight
	int e_roundmax;
	int e_enemyType[3];
	int e_scrb;
	int e_scrl;
	int e_scrr;
	int e_evtrnd[3];
	int e_evt[3];
	int e_lossto;
	int e_winto;
	int currentRound;//当前回合数
	int fightType;

	FightHero fighthero[3];
	FightEnemy fightEnemy[3];
	DegreeList degreeList[3];//enemy不需
	GoodList goodList;
	GoodList equipList;
	GoodList throwList;
	MagicList  magicList[6];//仅传入6个战斗对象的
	int magicLen[6];//长度
	Menu menuChoice;
	Menu menuGood;

	int attFlag;
	int attFlag2;
	int attFlag3;//left right
	int flagMenu;
	int flagSkill;
	int flagMenuGood;//道具菜单
	int flagShowState;
	int flagGood;
	int flagShowEquipCompare;

	
	int actorSum;
	int enemySum;//数目

	int goodAll;
	int equipAll;
	int throwAll;
	/*int goodType[2731];
	int goodIdx[2731];
	int goodSum[2731];
	int equipType[2731];
	int equipIdx[2731];
	int equipSum[2731];
	int throwType[512];
	int throwIdx[512];
	int throwSum[512];*/

	
	int showPos;//显示位置
	int flagd;//下方向标示
	int flagu;//上方向标示

	int flagLeave[3];//逃跑
	//int flagContinue;//围攻
	int flagDef[3];//防御
	int flagDied[3];//死亡
	int flagEnemyDied[3];//死亡
	//int flagSleeped[3];//睡着20160626
	//int flagEnemySleeped[3];//睡着20160626

	int selectedFightHero;//当前场景选择的hero
	int selectedFightEnemy[3];//3个hero选定的敌人 3个 已确认的
	int selectedFightStyle;// 1-普通 2-技能 3-合击 4-围攻 5-投掷  6-补给自己 7-防御 8-逃跑 9-休眠 10-乱
	int AISelectedFightStyle;//1-普通 2-技能 3-合击 4-围攻 5-投掷  6-补给自己 7-防御 8-逃跑 9-休眠 10-乱
	int selectedFightTypeConfirmed[3];//已确认的选定战斗方式
	int tmpselectedEnemy;//3个 当前位置
	int tmpselectedHero;//3个 当前位置
	//int tmpSelectedFightStyle;
	int selectedHeroFinished;//0-5 
	int showArrow;

	int selectedGood;//投掷 使用 道具的选择项
	int selectedGood1[3][2];//投掷 使用 道具的选择项
	int selectedMagic[3];//魔法选定项
	int AISelectedMagic[3];

	int livedEnemySum;
	int livedEnemy[3];
	int enemy[3];

	int allMoney;//获胜可得金钱
	int allExp;//获胜可得经验
	int goodHave[6][3];//024偷取物品 135结束获取物品 0类型1序号2数量

	int keytmp;
	int t_hurt;
	int s_hurt[3];
	//int c_hurt[3];

	int flagDecorate;//1-1号位 2-2号位
	int all_obj;//合击伙伴
	//int canUseMagic[3];//20160626封 标志

	int showNoHp;//在fightrun过程中显示缺血的修正值

	int missflag;//20160718是否可以miss
	int throwflag;//20160718是否投掷武器 默认是可以投掷的，如果设置为1说明无法投掷
	int isMissed;//20160718是否触发miss 由于是及时显示 只需一个值

	int t_selectedFightHero;//20161119
	//int hurtOffset;//20160817 伤害值及异常状态位置修正量
	int dghurt;//20161120
	int isFightRuned;//20170116用于表示回合完成正在执行fightrun过程，不得打扰
	int isResisted;//20170130是否抵挡标志
};