void Map::Render(CIwSVec2 characterBox) { IW_CALLSTACK("MAP::Render()"); if(_BGImage) Iw2DDrawImage(_BGImage,CIwSVec2(0,0)); int index_Touched=-1; m_tileRotating=false; if(current_States==S3E_POINTER_STATE_DOWN) { CIwFVec2 touch=m_Position+GetTouches(S3E_POINTER_STATE_DOWN); int index_y=int(touch.y)/_tileset_map->GetSize().y; int index_x=int(touch.x)/_tileset_map->GetSize().x; index_Touched=index_y*_width+index_x; if(CheckNPC(index_Touched)) { std::cout<<"NPC!!!"<<std::endl; showDialog++; if(showDialog>=_NPC->m_Dialogs.size()) showDialog=-1; } if(_blocked&&(_layer_maze->m_TileIndex[index_Touched]-_tileset_maze->m_firstGid)>=0) { m_tileRotating=true; _TileDir[index_Touched]+=1; if(_TileDir[index_Touched]==4) _TileDir[index_Touched]=0; } std::cout<<"x:"<<index_x<<", y:"<<index_y<<", index: "<<index_Touched<<std::endl; } int index_start=(int)m_Position.x/_tileWidth+((int)m_Position.y/_tileHeight)*_width; if(index_start>=_width) index_start=index_start-_width; int index_end=((int)m_Position.x+screenWidth)/_tileWidth+(((int)m_Position.y+screenHeight)/_tileHeight)*_width+1; for(int i=index_start;i!=index_end;i++) { int index_x=i%_width; int index_y=i/_width; CIwSVec2 topleft = CIwSVec2(int(index_x * _tileWidth-m_Position.x), int(index_y * _tileHeight-m_Position.y)); _tileset_map->Render(_layer_base->m_TileIndex[i],topleft,_layer_base->m_rotatable? _TileDir[i]:0); _tileset_map->Render(_layer_middle->m_TileIndex[i],topleft,_layer_middle->m_rotatable? _TileDir[i]:0); _tileset_maze->Render(_layer_maze->m_TileIndex[i],topleft,_layer_maze->m_rotatable? _TileDir[i]:0); } for(int i=0;i!=9;i++) { _TileObstacles[i].Render(m_Position,false,characterBox,i); } if(showDialog>=0) { _NPC->Dialog(showDialog); } }
void keyboard(unsigned char key, int x, int y) { switch(key) { case 'w': case 'W': w = true; Gerad.SetBack(); Gerad.SetWalkStatus(); break; case 's': case 'S': s = true; Gerad.SetFront(); Gerad.SetWalkStatus(); break; case 'a': case 'A': a = true; Gerad.SetLeft(); Gerad.SetWalkStatus(); break; case 'd': case 'D': d = true; Gerad.SetRight(); Gerad.SetWalkStatus(); break; case 'i': case 'I': InMenu = !InMenu; break; case 13: CheckNPC(); break; case 27: exit(0); break; default: break; } }