亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? entity.cpp

?? 一個RPG術語查詢器
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
#define ALLEGRO_STATICLINK
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <allegro.h>
#ifdef _WIN32
#include <winalleg.h>
#endif
#include <iostream>

#include "functions.h"
#include "types.h"
#include "entity.h"


APIHANDLER::APIHANDLER()
{
}


void APIHANDLER::exec(char *functionname, void *owner)
{
	THREAD *jiglet = (THREAD*)owner;
	ENTITY *MASTER = (ENTITY*)jiglet->owner;
	
	APIBLOCK *working = &MASTER->api.root;
	
	while(1)
	{
		//std::cout << "Comparing " << functionname << " with " << working->name << std::endl;
		//std::cout << "Comparing result: " << strcmp(functionname,working->name) << std::endl;
		
		if(strcmp(working->name,"ENDOFSEARCH")==0) return;
		if(strcmp(functionname,working->name)==0)
		{
			working->entrypoint(owner);
			return;
		}
		if(working->next==NULL) return;
		working=working->next;
		
		
	}
	
	//std::cout << "FUNCTION NOT FOUND! " << std::endl;

}

void APIHANDLER::install(char *functionname,APIFUNCTION function)
{
	APIBLOCK *working = &root;
	while(1)
	{
		if(working->next==NULL) break;
		working = working->next;
	} 
		
	working->AddSon(functionname, function);
		
}




void ENTITY::MoveTo(int px, int py)
{
    x = px;
    y = py;

}




void ENTITY::SetExecutionRate(int cyclespersecond, int tickrate)
{
	if(tickrate==0 || cyclespersecond==-1) execrate=-1;
	else execrate=cyclespersecond/tickrate;
	
}

void ENTITY::GetFace(int mx, int my)
{
    if(face==FACE_LEFT && mx < 0) return;
    if(face==FACE_UP && my < 0) return;
    if(face==FACE_RIGHT && mx > 0) return;
    if(face==FACE_DOWN && my > 0) return;

    if(face==FACE_LEFT && mx > 0)
    {
        face = FACE_RIGHT;
        return;
    }

    if(face==FACE_UP && my > 0)
    {
        face = FACE_DOWN;
        return;
    
    }
    
    if(face==FACE_RIGHT && mx < 0)
    {
        face = FACE_LEFT;
        return;
    }

    if(face==FACE_DOWN && my < 0)
    {
        face = FACE_UP;
        return;
    
    }
    
    if(my == 0 && (face==FACE_DOWN || face== FACE_UP))
    {
        face = (mx>0)?FACE_RIGHT:FACE_LEFT;
        return;
    }
    if(mx == 0 && (face==FACE_RIGHT || face==FACE_LEFT))
    {
        face = (my>0)?FACE_DOWN:FACE_UP;
        return;
    
    }
    

}


void ENTITY::Execute()
{
    audio.exec();
	if(execrate==-1)
	{
		while(vm.operational==OPERATE) vm.Execute(100000);
		
	}
	else vm.Execute(execrate);
	operational=vm.operational;
	if(mutterdelay>-1) --mutterdelay;
}

ENTITY::ENTITY(char *myname, char *binary)
{
	for(int i=0;i<1337;++i) lastmessage[i]=0;
	next = NULL;
	vm.setram(this);
	SetVM(myname,binary,NULL,0);
}

void ENTITY::SetVM(char *myname, char *binary, ENTITY *pbase, int omax)
{
    objectmax=omax;
	baseobject = pbase;
    audio.start();
	execrate=-1;	
	operational=OPERATE;
	vm.loadbinary(binary);	
	strcpy(name,myname);
	messageproc=-1;
	mutter=NULL;
	mutterdelay=-1;

}

ENTITY::ENTITY()
{
	for(int i=0;i<1337;++i) lastmessage[i]=0;
	next = NULL;
	seconds = 0;
	vm.setram(this);
	operational = 0;

}


void ENTITY::SetEnvironment(ENVIRONMENT *env)
{
		map=env;
}
	
void ENTITY::SetData(int dx,int dy,int ospr,int ehandle, int szx, int szy)
{
	sizex=szx;
	sizey=szy;
	enginehandle=ehandle;
	spr=ospr;
	x=dx;
	y=dy;
	steps=0;
    face=FACE_DOWN;	
}
 
       
void ENTITY::Move(int mx,int my)
{

    int rect1x1,rect1x2,rect1y1,rect1y2;
    int rect2x1,rect2x2,rect2y1,rect2y2;
    int tx,ty;
    int movable;
    int startx,starty,endx,endy;
    int checkx,checky;
    if(mx==0 && my==0) return;
    
    
    tx = x + mx;
    ty = y + my;
           
            
            
    startx = (tx - sizex)/32;
    starty = (y - sizey)/32;
    endx = (tx + sizex)/32;
    endy = (y + sizey)/32;
            
    if(endx>89)
    {
        endx=89;
        tx = x;
    }

    if(startx>89)
    {
        startx = 89;
        tx = x;
    }
            
    if(endx<0)
    {
        endx=0;
        tx = x;
    }
            
    if(startx<0)
    {
        startx=0;
        tx = x;
    }
            
    if(endy>89)
    {
        endy=89;
        ty = y;
    }
    
    if(starty>89)
    {
        starty = 89;
        ty = y;
    }
            
    if(endy<0)
    {
        endy=0;
        ty = y;
    }
            
    if(starty<0)
    {
        starty=0;
        ty = y;
    }

                        
    for(checkx=startx;checkx<=endx;++checkx)
    {
        for(checky=starty;checky<=endy;++checky)
        {
            if (map->map[checky][checkx]<=255 || (map->map[checky][checkx]>511 && map->map[checky][checkx]<768))
            {
            }
            else
            {
                tx = x;
            }
        }
    }
            
            

            //Move on Y axis

    startx = (x - sizex)/32;
    starty = (ty - sizey)/32;
    endx = (x + sizex)/32;
    endy = (ty + sizey)/32;
                
    if(endx>89)
    {
        endx=89;
        tx = x;
    }
    
    if(startx>89)
    {
        startx = 89;
        tx = x;
    }
            
    if(endx<0)
    {
        endx=0;
        tx = x;
    }
            
    if(startx<0)
    {
        startx=0;
        tx = x;
    }
            
    if(endy>89)
    {
        endy=89;
        ty = y;
    }
    
    if(starty>89)
    {
        starty = 89;
        ty = y;
    }
            
    if(endy<0)
    {
        endy=0;
        ty = y;
    }
            
    if(starty<0)
    {
        starty=0;
        ty = y;
    }

            
            
    for(checkx=startx;checkx<=endx;++checkx)
    {
        for(checky=starty;checky<=endy;++checky)
        {
            if (map->map[checky][checkx]<=255 || (map->map[checky][checkx]>511 && map->map[checky][checkx]<768))
            {
                        
            }
            else
            {
                        
                ty = y;
            }

        }
            
            
    }
    GetFace(mx,my);
    int failsx = 0;
    int failsy = 0;


    for(int testmove=0;testmove<objectmax;++testmove)
    {

        if(baseobject[testmove].operational!=0 && baseobject[testmove].enginehandle!=enginehandle)
        {
            bool test3 = false;

            rect2x1 = baseobject[testmove].x-baseobject[testmove].sizex;
            rect2x2 = baseobject[testmove].x+baseobject[testmove].sizex;
            rect2y1 = baseobject[testmove].y-baseobject[testmove].sizey;
            rect2y2 = baseobject[testmove].y+baseobject[testmove].sizey;


            rect1x1 = x+mx-sizex;
            rect1x2 = x+mx+sizex;
            rect1y1 = y+my-sizey;
            rect1y2 = y+my+sizey;
            test3 = intersects(rect1x1,rect1x2,rect1y1,rect1y2,rect2x1,rect2x2,rect2y1,rect2y2);

            if(test3==true)
            {
                rect1x1 = x+mx-sizex;
                rect1x2 = x+mx+sizex;
                rect1y1 = y-sizey;
                rect1y2 = y+sizey;
                if(intersects(rect1x1,rect1x2,rect1y1,rect1y2,rect2x1,rect2x2,rect2y1,rect2y2)) ++failsx;

                rect1x1 = x-sizex;
                rect1x2 = x+sizex;
                rect1y1 = y+my-sizey;
                rect1y2 = y+my+sizey;
                if(intersects(rect1x1,rect1x2,rect1y1,rect1y2,rect2x1,rect2x2,rect2y1,rect2y2)) ++failsy;
            }
        }        
    }
    
    
    if(failsx==0)
    {
        x = tx;
        ++steps;
    }
    if(failsy==0)
    {
        y = ty;
        ++steps;
    }
}







static int threads=0;

THREAD::THREAD(char *ram, int sizeram, int startaddress, void *mymaster)
{
	owner=mymaster;
	++threads;
	yield=0;
	next=NULL;
	parent=NULL;
	THREAD::ram=ram;
	THREAD::sizeram=sizeram;
	operational=OPERATE;
	fstackpointer=0;
	stackpointer=0;
	pstackpointer=0;
	codepointer=startaddress;
}




int THREAD::ExecObj(int cycles)
{
	static ENTITY *MASTER=(ENTITY *)owner;
	
	//Execute cycles and return how many cycles are left
	//if something like a device poll takes place or whatnot
	if(operational!=OPERATE) return cycles;
			//Loop until loop is broken by a rule condition
		while(cycles>0)
		{
			
			--cycles;
			#if defined DEBUG
				if(codepointer>=sizeram && codepointer<0)
				{
//					std::cout << "ERR: INVALID CODE POINTER, DISABLING" << std::endl;
					operational=0;
					return cycles;
				}
			#endif			



			if(yield>0)
			{
				--yield;
				return cycles;
			}
			//Debug teh pointers
			
			//end of Debug




			switch (*(int *)(ram+codepointer))
			{
				
				case PUSH:
					codepointer+=sizeof(int);
					stack[stackpointer]=*(int *)(ram+codepointer);
					codepointer+=sizeof(int);
					++stackpointer;
					
					#if defined DEBUG
						if(stackpointer>=STACKSIZE)
						{
//							std::cout << "ERR: STACK OVERFLOW" << std::endl;
							operational=0;
							return cycles;
						}
					#endif
					
					break;
				
				case DPUSH:
					codepointer+=sizeof(int);
					stack[stackpointer]=*(int *)(ram+codepointer);
					++stackpointer;
					codepointer+=sizeof(int);
					stack[stackpointer]=*(int *)(ram+codepointer);
					++stackpointer;
					codepointer+=sizeof(int);
					
					#if defined DEBUG
						if(stackpointer>=STACKSIZE)
						{
//							std::cout << "ERR: STACK OVERFLOW" << std::endl;
							operational=0;
							return cycles;
						}
					#endif
					
					break;



				case POP:
					
					#if defined DEBUG
						
						if(stackpointer<0)
						{
//							std::cout << "ERR: STACK UNDERFLOW" << std::endl;
							operational=0;
							return cycles;
						}
					#endif
					
					--stackpointer;
					codepointer+=sizeof(int);
					
					break;
				

				case FUNCTION:
		
					pstack[pstackpointer].type=RETURNADDRESS;
					pstack[pstackpointer].address=codepointer+sizeof(int);
					++pstackpointer;															
					
					--stackpointer;
					address=stack[stackpointer];
					
					#if defined DEBUG
						if(address<0 || address>(int)(sizeram-sizeof(int)))
						{
//							std::cout << "INVALID FUNCTION FRAME POINTER: " << address << std::endl;
							operational=0;
							return cycles;
						}
					#endif
					
					//swapper is set to first byte of the frame
					swapper=address;
					
					//Read in Function Pointer
					address=*(int *)(ram+address);
					//address is set to the code pointer of the function
					
					#if defined DEBUG
						if(address<0 || address>(int)(sizeram-sizeof(int)))
						{
//							std::cout << "INVALID FUNCTION POINTER IN FUNCTION FRAME: " << address << std::endl;
							operational=0;
							return cycles;
						}
					#endif
					
					//set code pointer to address
					codepointer=address;
					
					//Start preserving the frame
					preserve=swapper+sizeof(int);
					while(*(int *)(ram+preserve)!=ENDPARAMS)
					{
						preserve+=sizeof(int);	
					}

					address=preserve+sizeof(int);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品尤物av久久免费看| 国产久卡久卡久卡久卡视频精品| 欧美久久久久久久久中文字幕| 久久av老司机精品网站导航| ㊣最新国产の精品bt伙计久久| 欧美日本精品一区二区三区| 国产在线观看免费一区| 久久99精品久久久久久| 亚洲精品伦理在线| 久久一区二区三区四区| 欧美午夜精品一区二区三区| 成人爽a毛片一区二区免费| 日韩精品免费专区| 怡红院av一区二区三区| 欧美精品一区二区三区视频| 欧美日韩三级一区| 91丝袜美女网| 福利电影一区二区三区| 男女男精品网站| 亚洲二区在线观看| 亚洲欧美日韩一区二区| 精品国产乱码久久久久久牛牛 | 91一区一区三区| 日本不卡一区二区| 一区二区三区在线视频免费观看| 国产日韩影视精品| 欧美v国产在线一区二区三区| 色婷婷精品久久二区二区蜜臂av| 国产成人免费xxxxxxxx| 极品少妇xxxx偷拍精品少妇| 蜜桃av一区二区| 午夜久久久久久| 亚洲成人自拍网| 亚洲综合色噜噜狠狠| 亚洲人妖av一区二区| 日本一区二区免费在线观看视频 | 91麻豆自制传媒国产之光| 国产一区二区在线观看视频| 免费看日韩精品| 五月激情丁香一区二区三区| 亚洲一区二区视频在线| 亚洲永久精品大片| 亚洲乱码一区二区三区在线观看| 久久久精品人体av艺术| 久久亚洲欧美国产精品乐播| 精品国产精品一区二区夜夜嗨| 欧美一区二区女人| 日韩一区二区三区免费看| 欧美一区二区日韩一区二区| 日韩手机在线导航| 欧美成人免费网站| 日韩精品一区二区三区老鸭窝| 欧美一区二区女人| 欧美精品一区二区三区一线天视频| 精品国产免费视频| 久久久久成人黄色影片| 中文字幕av一区 二区| 中文字幕一区二区三区四区| 亚洲免费在线播放| 亚洲成人av一区| 奇米888四色在线精品| 久久99国产精品免费网站| 国产精品99久久久久久久女警 | 在线一区二区视频| 6080亚洲精品一区二区| 91精品国产欧美一区二区18| 欧美一卡在线观看| 久久亚洲精品国产精品紫薇| 国产精品久久久久久久浪潮网站| 国产精品久久久久影院亚瑟 | 久久久五月婷婷| 国产精品欧美一级免费| 一区二区三区91| 久久99久久99| 国产麻豆精品在线| 91啪亚洲精品| 在线91免费看| 精品久久久久久久一区二区蜜臀| 国产亚洲欧美日韩在线一区| 一区二区三区在线视频观看| 美女视频免费一区| 东方aⅴ免费观看久久av| 欧美性受xxxx| 久久亚洲综合色一区二区三区| 亚洲精品成人精品456| 奇米影视一区二区三区小说| 国产成人综合亚洲网站| 欧美亚洲高清一区| 久久久久亚洲综合| 亚洲高清视频在线| 国产高清不卡一区| 精品视频1区2区| 国产片一区二区三区| 亚洲成人一区二区| 成人综合婷婷国产精品久久免费| 欧美精品三级日韩久久| 中文字幕高清一区| 午夜精品久久久久久久久久| 丁香婷婷综合色啪| 91精品国产色综合久久ai换脸| 国产精品午夜电影| 蜜桃av一区二区三区电影| 色88888久久久久久影院野外| 久久久一区二区三区| 亚洲电影在线免费观看| 成人午夜av影视| 精品国产污网站| 日本中文字幕不卡| 99国产精品久久久久久久久久| 欧美成人bangbros| 亚洲不卡一区二区三区| 91精品国产一区二区| 国产精品成人在线观看| 韩国女主播一区二区三区| 欧美日韩国产精选| 一区二区三区四区亚洲| 成人精品小蝌蚪| 久久久久久久久久久久电影| 日韩精品成人一区二区三区| 99九九99九九九视频精品| 国产欧美视频一区二区三区| 免费av网站大全久久| 欧美性极品少妇| 亚洲品质自拍视频网站| 成年人午夜久久久| 欧美激情在线看| 国产一区二区三区四| 日韩免费高清视频| 日本女人一区二区三区| 欧美日韩1区2区| 一区二区三区中文在线观看| 成人高清视频在线观看| 国产性色一区二区| 韩国三级中文字幕hd久久精品| 日韩一区二区视频| 日本亚洲最大的色成网站www| 欧美吞精做爰啪啪高潮| 一区二区三区免费看视频| 色哟哟欧美精品| 伊人婷婷欧美激情| 在线区一区二视频| 亚洲第一会所有码转帖| 欧美三级电影网站| 亚洲一区在线观看免费观看电影高清| 欧洲国产伦久久久久久久| 一区二区欧美视频| 在线亚洲一区二区| 亚洲一区二区欧美日韩| 欧美日韩视频在线观看一区二区三区 | 欧美疯狂做受xxxx富婆| 亚洲高清免费观看| 欧美一卡二卡三卡| 精品在线播放午夜| 久久久久久久综合狠狠综合| 福利电影一区二区| 亚洲精品国产a| 欧美日韩免费电影| 奇米综合一区二区三区精品视频 | 欧美乱熟臀69xxxxxx| 亚洲国产视频网站| 欧美一区二区免费观在线| 精品中文av资源站在线观看| 国产午夜三级一区二区三| av在线综合网| 亚洲成人av在线电影| 欧美v国产在线一区二区三区| 国产不卡视频在线播放| 亚洲三级免费观看| 欧美精品一二三| 国产91富婆露脸刺激对白| 亚洲天堂av老司机| 5月丁香婷婷综合| 国产成人免费视频网站| 亚洲一区二区欧美日韩| 欧美xxxxxxxxx| 色视频一区二区| 美女被吸乳得到大胸91| 日本一区二区成人在线| 在线视频你懂得一区| 日日夜夜精品视频天天综合网| 久久久久综合网| 欧美丝袜第三区| 国产精品影音先锋| 亚洲国产日韩a在线播放| 26uuu成人网一区二区三区| 91视频精品在这里| 久久精品国产一区二区三区免费看| 国产午夜精品一区二区| 欧美亚洲一区二区在线| 国产不卡高清在线观看视频| 成人黄页毛片网站| 亚洲成人av电影在线| 日本一区二区视频在线观看| 欧美色老头old∨ideo| 国产精品影音先锋| 天堂一区二区在线免费观看| 国产精品美女久久久久久久久| 4438亚洲最大| 在线欧美日韩国产| 国产99精品视频|