📄 entity.h
字号:
#define MSG_TOUCH 1
#define MSG_TALK 2
#define FACE_DOWN 0
#define FACE_UP 1
#define FACE_RIGHT 2
#define FACE_LEFT 3
#define OPERATE 1
#define WAIT 2
#define VMRAM 65536
#define STACKSIZE 4096
//32BIT PROCESSING DEFINES
//Stack
#define PUSH 0
#define POP 1
#define CLONE 2
#define CONVERT 3
//Base Math
#define ADD 4
#define SUB 5
#define MUL 6
#define DIV 7
//Bitwise Logic
#define AND 8
#define OR 9
#define XOR 10
#define NOT 11
//Extended Math and Bitshift
#define EXP 16
#define MOD 17
#define SHR 18
#define SHL 19
//Conditional Processing
//and branching
#define CMP 32
#define JMP 33
#define JME 34
#define JML 35
#define JMG 36
#define JLE 37
#define JGE 38
#define JNE 39
#define FUNCTION 42
#define FRETURN 43
#define DPUSH 44
//Memory routines
#define PRESERVE 46
#define RESTORE 47
#define LOAD 48
#define STORE 49
#define LOADB 50
#define STOREB 51
//Goodies
#define INCL 52
#define DECL 53
#define RSTORE 54
//API, SYS, and EXIT
#define API 61
#define SYS 62
#define EXIT 63
#define ENDPARAMS 0
#define DWORD 1
#define FLOATER 2
#define BYTE 3
#define RETURNADDRESS 4
//FLOATING POINT PROCESSING DEFINES
//Stack
#define PUSHF 64
#define POPF 65
#define CLONEF 66
#define CONVERTF 67
//Base Math
#define ADDF 68
#define SUBF 69
#define DIVF 70
#define MULF 71
//Extended Math
#define EXPF 72
#define MODF 73
#define SQRTF 74
#define COSF 75
#define SINF 76
#define TANF 77
//CMP
#define CMPF 96
//Memory Routines
#define LOADF 97
#define STOREF 98
//Stack swappers
//SYS defines
#define sys_write 1
#define sys_read 2
#define sys_putchar 3
#define sys_endl 4
#define sys_atoi 16
#define sys_itoa 17
#define sys_atof 18
#define sys_ftoa 19
#define sys_strlen 32
#define sys_sort 33
#define sys_szdouble 64
#define sys_szint 65
#define sys_thread 1337
#define sys_yield 1338
class THREAD
{
public:
union CONVERTDOUBLE
{
char bytes[sizeof(double)];
double data;
};
struct ALLDATA
{
char type;
int address;
char byte;
int dword;
double floater;
};
void *owner;
THREAD *next;
THREAD *parent;
CONVERTDOUBLE writedouble;
int writeiterate;
//Preserve,Restore
int writes;
int address;
int functioniterate;
int swapper;
int preserve;
char *ram;
int *base; //Used for addressing in 32bit
int sizeram;
int operational;
int yield;
int stack[STACKSIZE];
int stackpointer;
double fstack[STACKSIZE];
int fstackpointer;
ALLDATA pstack[STACKSIZE];
int pstackpointer;
int newadd;
int codepointer;
int workingloc;
int done;
union evaluation
{
struct BITEVAL
{
char equal : 1;
char notequal : 1;
char lessthan : 1;
char greaterthan : 1;
char greaterthanequal : 1;
char lessthanequal : 1;
} cmpbit;
int cmpint;
};
evaluation bitflags;
int GetThreads();
THREAD(char *ram, int sizeram, int startaddress, void *mymaster);
int ExecObj(int cycles);
THREAD *AddThread(int startpoint);
~THREAD();
};
class VMOBJ
{
public:
struct BINHEADER
{
char endian;
char version[8];
char szint;
char szdouble;
int numops;
int startaddress;
};
void *owner;
int sizeram;
char *ram;
int operational;
THREAD *processes;
VMOBJ();
~VMOBJ();
void setram(void *mymaster);
void loadbinary(char *file);
void RemoveProcess(THREAD *pskill);
void KillEntries(THREAD *root);
int Execute(int cycles);
};
typedef void (*APIFUNCTION)(void *);
class APIBLOCK
{
public:
APIBLOCK *next;
char name[128];
APIFUNCTION entrypoint;
APIBLOCK()
{
entrypoint=NULL;
strcpy(name,"THIS IS NOT A FUNCTION AND SHOULD NOT BE USED AS SUCH ABALBALBLAHBLAHBA");
next = NULL;
}
void AddSon(char *functionname, APIFUNCTION function)
{
next = new APIBLOCK(functionname,function);
}
APIBLOCK(char *functionname, APIFUNCTION function)
{
entrypoint = function;
strcpy(name,functionname);
next = NULL;
}
~APIBLOCK()
{
if(next!=NULL) delete next;
next = NULL;
}
};
class APIHANDLER
{
public:
APIBLOCK root;
APIHANDLER();
void exec(char *functionname, void *owner);
void install(char *functionname,APIFUNCTION function);
};
class ENTITY
{
//Don't mess with unions, for they are teh powerful.
public:
#ifdef _MSC_VER
#pragma pack(1)
#endif
ENTITY *next;
ENTITY *baseobject;
int objectmax;
ENVIRONMENT *map;
AUDIOHANDLER audio;
int x;
int y;
int enginehandle;
int spr;
int face;
int sizex;
int sizey;
int steps;
VMOBJ vm;
APIHANDLER api;
char name[1337];
int messageproc;
int seconds;
int execrate;
int lastmessage[1337];
int operational;
char *mutter;
int mutterdelay;
void Execute();
void SetExecutionRate(int cyclespersecond, int tickrate);
ENTITY(char *myname, char *binary);
ENTITY();
void GetFace(int mx, int my);
void MoveTo(int px, int py);
void SetVM(char *myname, char *binary, ENTITY *pbase, int omax);
void Remove(int ux,int uy);
void Update(int ux,int uy);
void SetEnvironment(ENVIRONMENT *env);
void SetData(int dx,int dy,int ospr,int ehandle, int szx, int szy);
void Move(int mx,int my);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -