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

📄 role.h

📁 成熟的RPG引擎,Flysky发布. 斜视角引擎.
💻 H
字号:
#pragma once

#include <vector> //标准容器类
using namespace std; //Std命名空间

//---脚步--------
#define UpFace 1
#define DownFace 5
#define LeftFace 7
#define RightFace 3
#define LUFace 0
#define RUFace 2
#define LDFace 6
#define RDFace 4
#define MouseNpc 100
//////////////////////
#define _AStarD //允许走斜线
//Flysky 第二版,最近很烦
struct stRoleC
{
	//判断
	bool IsNPC;  //是不是NPC
	//----------Role基本--------------
	char *Name;     //NPC名字
	bool VS;  //是否有这个人物(是否可见)
	int x,y; //人物的XY坐标值
	RECT roler; //人物矩形
	int face;        //NPC面向的方向 0. 下 1. 上  2.左  3.右
	char *facePic;
	//----------属性值-------------
	int HP,MP; //目前的HP,MP
	int MaxHP,MaxMP; //满HP和MP
	int Level; //目前的等级
	int Exp; //目前的经验
	int MaxExp; //满血的经验
	//----------寻路相关--------------
	bool move;
	int movex,movey; //移动目标点
	//----------NPC相关---------------
	char *EScrFName;    //当触发人民的脚本文件名
};
struct stRole
{
	//判断
	bool IsNPC;  //是不是NPC
	//----------Role基本--------------
	char Name[32];     //NPC名字
	bool VS;  //是否有这个人物(是否可见)
	int x,y; //人物的XY坐标值
	int oldx,oldy; //人物上一步的XY值
	RECT roler; //人物矩形
	POINT PicS; //距像素坐标的偏移
	int face;        //NPC面向的方向 0. 下 1. 上  2.左  3.右
	bool facejd; //上一步的站向
	char facePic[64];
	int facej;       //NPC方向的脚步 0 1 2 3
	vector<POINT> zd; //遮挡列表
	//----------属性值-------------
	int HP,MP; //目前的HP,MP
	int MaxHP,MaxMP; //满HP和MP
	int Level; //目前的等级
	int Exp; //目前的经验
	int MaxExp; //满血的经验
	//----------寻路相关--------------
	bool move;
	vector<POINT> Path; //各个步数
	int PathSteps; //步数
	int PathCSteps; //已经走过步数
	int movex,movey; //移动目标点
	//----------NPC相关---------------
	char *EScrFName;    //当触发人民的脚本文件名
	bool WalkLoop;  //是向前走还是倒退
	//----------Surface--------------
	LPDIRECTDRAWSURFACE7 lpDDS_ROLEP; //Role的图片
	LPDIRECTDRAWSURFACE7 lpDDS_ROLEL; //Role的logo
};
struct stFindTable //索引表结构
{
	int ID; //ID号
	int value; //内容,就是X+Y是多少
};
class CRole
{
private:
	CFont rfont;
	vector<stRole> rl; //结构容器
	vector<int> actor; //主角ID容器
	vector<int> npc;//NPC ID容器
	vector<stFindTable> RlFind; //显示表
	CMap *Map; //地图指针
	int PX,PY;
	int PRole; //主要的主角ID,用来跟踪镜头
	char IniFileName[MAX_PATH]; 
private:
	//索引表
	bool DRole(int ID);
	int TableAdd(stFindTable sf); //向索引表中插入
	int TableAdd(int ID,int value); //向索引表中插入
	bool TablePX(); //排序表
	int FindDataT(int Value);//返回最后一个
	vector<int> FindDataTV(int Value);//返回一个容器
private:
	void NPCZDS(int rlID); //遮挡计算
	void OrderC(int x,int y); //队形整理
	stRole StCToSt(stRoleC tmpc); //转换
private:
	POINT getPY(); //获取偏移量
	void Show(int ID,LPDIRECTDRAWSURFACE7 DDSurface); //总表显示一个人
	void Show(int IsNPC,int ID,LPDIRECTDRAWSURFACE7 DDSurface); //IsNPC是,NPC显示,否则Actor显示
	void Show(LPDIRECTDRAWSURFACE7 DDSurface); //全部显示
public:
	CRole(CMap &cm); //构造函数
	CRole(CMap &cm,char *FileName); //构造函数
	~CRole(); //析构函数
	void LoadRoleIni(char *FileName); //读取所有的Role

	//添加删除
	bool AddNPC(stRoleC tnpcc); //添加一个NPC
	bool AddNPC(char *FileName); //从列表添加NPC
	void DeleteNPC(int ID); //删除一个NPC
	bool AddActor(stRoleC tactc); //添加一个NPC
	bool AddActor(char *RoleIDent); //添加一个NPC
	void DeleteActor(int ID); //删除一个NPC	
	//显示
	void CheckLoop(LPDIRECTDRAWSURFACE7 DDSurface); //显示循环
	//接口函数
	int GetActorNum(); //获取角色数量
	int GetNpcNum(); //获取角色数量
	POINT ActorXy(int ID); //获取主角坐标
	BOOL ActorXy(int ID,int &x,int &y); //获取主角坐标 引用
	POINT NpcXy(int ID); //获取NPC坐标
	BOOL NpcXy(int ID,int &x,int &y); //获取NPC坐标 引用
	POINT RoleXy(int ID); //获取角色坐标
	BOOL RoleXy(int ID,int &x,int &y); //获取角色坐标 引用

	//角色脚本
	char * GetRoleScriptName(int x,int y); //这里有没有脚本
	char * GetRoleScriptName(); //主角1号的旁边是否有脚本
	void RoleScript(bool IsMouse,int x=0,int y=0); //主角脚本判断
	//以下都是取第一个
	int NPCNameToID(char *Name); //NPC名字转ID
	int ActorNameToID(char *Name); //主角名字转ID
	int NameToID(char *Name); //角色名字转ID
	//以上都是取第一个
    //移动函数
	void AMoveTo(bool IsScreen,int x,int y,bool FindPath); //主角移动
	void NMoveTo(bool IsScreen,int ID,int x,int y,bool FindPath,bool ChFace=false); //NPC移动
	void NAMove(bool IsScreen,bool FT,int ID,int x,int y); //NPC自动走动
	void MoveTo(bool IsScreen,int ID,int x,int y,bool FindPath); //角色移动
};

⌨️ 快捷键说明

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