|
@@ -1,237 +1,51 @@
|
|
|
#include "stdafx.h"
|
|
|
#include "CCursorHandler.h"
|
|
|
#include "SDL.h"
|
|
|
-#include "SDL_thread.h"
|
|
|
+#include "SDL_Extensions.h"
|
|
|
#include "CGameInfo.h"
|
|
|
-#include "SDL_framerate.h"
|
|
|
-#include "hch/CLodHandler.h"
|
|
|
+#include "hch/CDefHandler.h"
|
|
|
|
|
|
extern SDL_Surface * screen;
|
|
|
|
|
|
-/* Creates a new mouse cursor from an XPM */
|
|
|
-
|
|
|
-
|
|
|
-/* XPM */
|
|
|
-static const char *arrow[] = { //no cursor mode
|
|
|
- /* width height num_colors chars_per_pixel */
|
|
|
- " 32 32 3 1",
|
|
|
- /* colors */
|
|
|
- "X c #000000",
|
|
|
- ". c #ffffff",
|
|
|
- " c None",
|
|
|
- /* pixels */
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- "0,0"
|
|
|
-};
|
|
|
-
|
|
|
-/* XPM */
|
|
|
-static const char *arrow2[] = { //normal cursor
|
|
|
- /* width height num_colors chars_per_pixel */
|
|
|
- " 32 32 3 1",
|
|
|
- /* colors */
|
|
|
- "X c #000000",
|
|
|
- ". c #ffffff",
|
|
|
- " c None",
|
|
|
- /* pixels */
|
|
|
- "X ",
|
|
|
- "XX ",
|
|
|
- "X.X ",
|
|
|
- "X..X ",
|
|
|
- "X...X ",
|
|
|
- "X....X ",
|
|
|
- "X.....X ",
|
|
|
- "X......X ",
|
|
|
- "X.......X ",
|
|
|
- "X........X ",
|
|
|
- "X.....XXXXX ",
|
|
|
- "X..X..X ",
|
|
|
- "X.X X..X ",
|
|
|
- "XX X..X ",
|
|
|
- "X X..X ",
|
|
|
- " X..X ",
|
|
|
- " X..X ",
|
|
|
- " X..X ",
|
|
|
- " XX ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- " ",
|
|
|
- "0,0"
|
|
|
-};
|
|
|
-
|
|
|
-static SDL_Cursor *init_system_cursor(const char *image[])
|
|
|
-{
|
|
|
- int i, row, col;
|
|
|
- Uint8 data[4*32];
|
|
|
- Uint8 mask[4*32];
|
|
|
- int hot_x, hot_y;
|
|
|
-
|
|
|
- i = -1;
|
|
|
- for ( row=0; row<32; ++row ) {
|
|
|
- for ( col=0; col<32; ++col ) {
|
|
|
- if ( col % 8 ) {
|
|
|
- data[i] <<= 1;
|
|
|
- mask[i] <<= 1;
|
|
|
- } else {
|
|
|
- ++i;
|
|
|
- data[i] = mask[i] = 0;
|
|
|
- }
|
|
|
- switch (image[4+row][col]) {
|
|
|
- case 'X':
|
|
|
- data[i] |= 0x01;
|
|
|
- //k[i] |= 0x01;
|
|
|
- break;
|
|
|
- case '.':
|
|
|
- mask[i] |= 0x01;
|
|
|
- break;
|
|
|
- case ' ':
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- sscanf(image[4+row], "%d,%d", &hot_x, &hot_y);
|
|
|
- return SDL_CreateCursor(data, mask, 32, 32, hot_x, hot_y);
|
|
|
-}
|
|
|
-
|
|
|
-//int cursorHandlerFunc(void * cursorHandler)
|
|
|
-//{
|
|
|
-// FPSmanager * cursorFramerateKeeper = new FPSmanager;
|
|
|
-// SDL_initFramerate(cursorFramerateKeeper);
|
|
|
-// SDL_setFramerate(cursorFramerateKeeper, 200);
|
|
|
-//
|
|
|
-// CCursorHandler * ch = (CCursorHandler *) cursorHandler;
|
|
|
-// while(true)
|
|
|
-// {
|
|
|
-// if(ch->xbef!=-1 && ch->ybef!=-1) //restore surface under cursor
|
|
|
-// {
|
|
|
-// blitAtWR(ch->behindCur, ch->xbef, ch->ybef);
|
|
|
-// }
|
|
|
-// ch->xbef = ch->xpos;
|
|
|
-// ch->ybef = ch->ypos;
|
|
|
-// //prepare part of surface to restore
|
|
|
-// SDL_BlitSurface(screen, &genRect(32, 32, ch->xpos, ch->ypos), ch->behindCur, NULL);
|
|
|
-// CSDL_Ext::update(ch->behindCur);
|
|
|
-//
|
|
|
-// //blit cursor
|
|
|
-// if(ch->curVisible)
|
|
|
-// {
|
|
|
-// switch(ch->mode)
|
|
|
-// {
|
|
|
-// case 0:
|
|
|
-// {
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case 1:
|
|
|
-// {
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case 2:
|
|
|
-// {
|
|
|
-// blitAtWR(ch->deflt->ourImages[ch->number].bitmap, ch->xpos, ch->ypos);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// SDL_framerateDelay(cursorFramerateKeeper);
|
|
|
-// //SDL_Delay(5); //to avoid great usage of CPU
|
|
|
-// }
|
|
|
-// return 0;
|
|
|
-//}
|
|
|
-
|
|
|
void CCursorHandler::initCursor()
|
|
|
{
|
|
|
-//#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
|
-// int rmask = 0xff000000;
|
|
|
-// int gmask = 0x00ff0000;
|
|
|
-// int bmask = 0x0000ff00;
|
|
|
-// int amask = 0x000000ff;
|
|
|
-//#else
|
|
|
-// int rmask = 0x000000ff;
|
|
|
-// int gmask = 0x0000ff00;
|
|
|
-// int bmask = 0x00ff0000;
|
|
|
-// int amask = 0xff000000;
|
|
|
-//#endif
|
|
|
-// curVisible = true;
|
|
|
-// xpos = ypos = 0;
|
|
|
-// behindCur = SDL_CreateRGBSurface(SDL_SWSURFACE, 32, 32, 32, rmask, gmask, bmask, amask);
|
|
|
-// xbef = ybef = 0;
|
|
|
-// adventure = CDefHandler::giveDef("CRADVNTR.DEF");
|
|
|
-// combat = CDefHandler::giveDef("CRCOMBAT.DEF");
|
|
|
-// deflt = CDefHandler::giveDef("CRDEFLT.DEF");
|
|
|
-// spell = CDefHandler::giveDef("CRSPELL.DEF");
|
|
|
-// //SDL_SetCursor(init_system_cursor(arrow));
|
|
|
-// //SDL_Thread * myth = SDL_CreateThread(&cursorHandlerFunc, this);
|
|
|
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
|
+ int rmask = 0xff000000;
|
|
|
+ int gmask = 0x00ff0000;
|
|
|
+ int bmask = 0x0000ff00;
|
|
|
+ int amask = 0x000000ff;
|
|
|
+#else
|
|
|
+ int rmask = 0x000000ff;
|
|
|
+ int gmask = 0x0000ff00;
|
|
|
+ int bmask = 0x00ff0000;
|
|
|
+ int amask = 0xff000000;
|
|
|
+#endif
|
|
|
+ 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(int type, int no)
|
|
|
{
|
|
|
- //mode = type;
|
|
|
- //number = no;
|
|
|
+ mode = type;
|
|
|
+ number = no;
|
|
|
}
|
|
|
|
|
|
void CCursorHandler::cursorMove(int x, int y)
|
|
|
{
|
|
|
- //xbef = xpos;
|
|
|
- //ybef = ypos;
|
|
|
- //xpos = x;
|
|
|
- //ypos = y;
|
|
|
+ xpos = x;
|
|
|
+ ypos = y;
|
|
|
}
|
|
|
-
|
|
|
-void CCursorHandler::hardwareCursor()
|
|
|
+void CCursorHandler::draw1()
|
|
|
{
|
|
|
- //curVisible = false;
|
|
|
- //SDL_SetCursor(init_system_cursor(arrow2));
|
|
|
+ SDL_BlitSurface(screen,&genRect(32,32,xpos,ypos),help,&genRect(32,32,0,0));
|
|
|
+ blitAt(cursors[mode]->ourImages[number].bitmap,xpos,ypos);
|
|
|
}
|
|
|
-
|
|
|
-void CCursorHandler::hideCursor()
|
|
|
-{
|
|
|
- //curVisible = false;
|
|
|
- //SDL_SetCursor(init_system_cursor(arrow));
|
|
|
-}
|
|
|
-
|
|
|
-void CCursorHandler::showGraphicCursor()
|
|
|
+void CCursorHandler::draw2()
|
|
|
{
|
|
|
- //curVisible = true;
|
|
|
- //SDL_SetCursor(init_system_cursor(arrow));
|
|
|
- //changeGraphic(0, 0);
|
|
|
+ blitAt(help,xpos,ypos);
|
|
|
}
|