Пример #1
0
bool Rock::tick(){
	
	if(Moving){
		switch (IMoveDir){
			case left:
				aX-=1;
				break;
			case right:
				aX+=1;
				break;
			case up:
				aY-=1;
				break;
			case down:
				aY+=1;
				break;
		}
	}
	int frame = (aX)/8 + (aY)/8;
	if (frame<0){frame -= 2*frame;};
	ISprite.AnimFrame = frame;
	calcGrid();
	calcSprite();
	return true;
}
Пример #2
0
bool Mob::tick(){
	cooldown>0 ? cooldown-- : cooldown=0;
	if (checkPlayer() && gp->lvl->IPlayer->HitPoints>0){
		if (cooldown==0){
			iprintf("Attacking!");
			gp->som.playSFX(1, 1024);
			int att = Attack - ((Player*)gp->lvl->IPlayer)->MainHand.getDef();
			att < 0 ? att=0 : att=att;
			gp->lvl->IPlayer->HitPoints -= att;
			cooldown = Cooltime;
		}
	}
	else{
		moveIdle();
	}
	if(Moving){
		switch (IMoveDir){
			case left:
				aX-=1;
				ISprite.HFlip = true;
				break;
			case right:
				aX+=1;
				ISprite.HFlip = false;
				break;
			case up:
				aY-=1;
				ISprite.HFlip = false;
				break;
			case down:
				aY+=1;
				ISprite.HFlip = false;
				break;
		}
	}
	int frame = (aX)/8 + (aY)/8;
	if (frame<0){frame -= 2*frame;};
	if (IMoveDir!=down && Multidir){
		frame+=2;
		if(IMoveDir==up){
			frame+=2;
		}
	}
	ISprite.AnimFrame = frame;
	calcGrid();
	calcSprite();
	return true;
}
Пример #3
0
/* draw the gflux once */
ENTRYPOINT void draw_gflux(ModeInfo * mi)
{
    gfluxstruct *gp = &gfluxes[MI_SCREEN(mi)];
    Display    *display = MI_DISPLAY(mi);
    Window      window = MI_WINDOW(mi);

    if (!gp->glx_context) return;

    /* Just keep running before the texture has come in. */
    /* if (gp->waiting_for_image_p) return; */

    glXMakeCurrent(display, window, *(gp->glx_context));

    calcGrid(gp);
    mi->polygon_count = gp->drawFunc(gp);
    if (mi->fps_p) do_fps (mi);
    glXSwapBuffers(display, window);
}
Пример #4
0
bool Player::tick(){
	if (!Moving){
		if((keysHeld() & KEY_LEFT) && GridX>0){
			Block* b = gp->lvl->getBlock(GridX-1, GridY);
			if (!b->Solid && !(b->IEntity->Solid && b->HasEntity)){
				Moving = true;
				translate(-1, 0);
				aX = gp->lvl->TileSize*8 - 1;
				IMoveDir = left;
				IFaceDir = left;
				gp->lvl->AnimDirty = true;
			}
		}
		else if((keysHeld() & KEY_RIGHT) && GridX<gp->lvl->SizeX - 1){
			Block* b = gp->lvl->getBlock(GridX+1, GridY);
			if (!b->Solid && !(b->IEntity->Solid && b->HasEntity)){
				Moving = true;
				translate(1, 0);
				aX = -gp->lvl->TileSize*8 + 1;
				IMoveDir = right;
				IFaceDir = right;
				gp->lvl->AnimDirty = true;
			}
		}
		else if((keysHeld() & KEY_UP) && GridY>0){
			Block* b = gp->lvl->getBlock(GridX, GridY-1);
			if (!b->Solid && !(b->IEntity->Solid && b->HasEntity)){
				Moving = true;
				translate(0, -1);
				aY = gp->lvl->TileSize*8 - 1;
				IMoveDir = up;
				IFaceDir = up;
				gp->lvl->AnimDirty = true;
			};
		}
		else if((keysHeld() & KEY_DOWN) && GridY<gp->lvl->SizeY - 1){
			Block* b = gp->lvl->getBlock(GridX, GridY+1);
			if (!b->Solid && !(b->IEntity->Solid && b->HasEntity)){
				Moving = true;
				translate(0, 1);
				aY = -gp->lvl->TileSize*8 + 1;
				IMoveDir = down;
				IFaceDir = down;
				gp->lvl->AnimDirty = true;
			}
		}
		else if (keysDown() & KEY_A){
			for (int i=0; i<4; i++){
				s8 GX = (i-2)*(i%2);
				s8 GY = (i-1)*((i+1)%2);
				if ((GridY+GY)<gp->lvl->SizeY && (GridX+GX)<gp->lvl->SizeX){
					Block* b = gp->lvl->getBlock(GridX+GX, GridY+GY);
					b->useOn((Item*)&MainHand, (Entity*)this);
					if (b->HasEntity){
						gp->som.playSFX(5, 1024);
					}
				}
			}
		}
	}
	else{
		switch (IMoveDir){
			case left:
				aX-=1;
				ISprite.HFlip = true;
				break;
			case right:
				aX+=1;
				ISprite.HFlip = false;
				break;
			case up:
				aY-=1;
				ISprite.HFlip = false;
				break;
			case down:
				aY+=1;
				ISprite.HFlip = false;
				break;
		}
	}
	
	int frame = (aX)/8 + (aY)/8;
	if (frame<0){frame -= 2*frame;};
	if (IMoveDir!=down){
		frame+=2;
		if(IMoveDir==up){
			frame+=2;
		}
	}
	if (HitPoints<=0){
		iprintf("Dead");
		frame = 6;
		gp->lvl->PlayerAlive = false;
		gp->som.playSFX(0, 1024);
	}
	
	ISprite.AnimFrame = frame;
	
	calcGrid();
	calcSprite();
	
	return true;
}