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; }
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; }
/* 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); }
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; }