#include "../stdafx.h" #include "CCursorHandler.h" #include "SDL.h" #include "SDL_Extensions.h" #include "CGameInfo.h" #include "../hch/CDefHandler.h" /* * CCursorHandler.cpp, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ extern SDL_Surface * screen; void CCursorHandler::initCursor() { mode = number = xpos = ypos = 0; help = CSDL_Ext::newSurface(32,32); cursors.push_back(CDefHandler::giveDef("CRADVNTR.DEF")); cursors.push_back(CDefHandler::giveDef("CRCOMBAT.DEF")); cursors.push_back(CDefHandler::giveDef("CRDEFLT.DEF")); cursors.push_back(CDefHandler::giveDef("CRSPELL.DEF")); SDL_ShowCursor(SDL_DISABLE); } void CCursorHandler::changeGraphic(const int & type, const int & no) { mode = type; number = no; } void CCursorHandler::cursorMove(const int & x, const int & y) { xpos = x; ypos = y; } void CCursorHandler::draw1() { if(!Show) return; int x = xpos, y = ypos; if((mode==1 && number!=6) || mode ==3) { x-=16; y-=16; // Properly align the melee attack cursors. if (mode == 1) { switch (number) { case 7: // Bottom left x -= 6; y += 16; break; case 8: // Left x -= 16; y += 10; break; case 9: // Top left x -= 6; y -= 6; break; case 10: // Top right x += 16; y -= 6; break; case 11: // Right x += 16; y += 11; break; case 12: // Bottom right x += 16; y += 16; break; case 13: // Below x += 9; y += 16; break; case 14: // Above x += 9; y -= 15; break; } } } else if(mode==0 && number>0) { x-=12; y-=10; } SDL_BlitSurface(screen, &genRect(32,32,x,y), help, &genRect(32,32,0,0)); blitAt(cursors[mode]->ourImages[number].bitmap,x,y); } void CCursorHandler::draw2() { if(!Show) return; int x = xpos, y = ypos; if((mode==1 && number!=6) || mode == 3) { x-=16; y-=16; } else if(mode==0 && number>0) { x-=12; y-=10; } blitAt(help,x,y); }