void WorldMapControl::AdjustScrolling(short x, short y) { WorldMap* worldmap = core->GetWorldMap(); if (x || y) { ScrollX += x; ScrollY += y; } else { //center worldmap on current area unsigned entry; WMPAreaEntry *m = worldmap->GetArea(currentArea,entry); if (m) { ScrollX = m->X - Width/2; ScrollY = m->Y - Height/2; } } Sprite2D *MapMOS = worldmap->GetMapMOS(); if (ScrollX > MapMOS->Width - Width) ScrollX = MapMOS->Width - Width; if (ScrollY > MapMOS->Height - Height) ScrollY = MapMOS->Height - Height; if (ScrollX < 0) ScrollX = 0; if (ScrollY < 0) ScrollY = 0; Changed = true; Area = NULL; }
WorldMapControl::WorldMapControl(const char *font, int direction) { ScrollX = 0; ScrollY = 0; MouseIsDown = false; Changed = true; Area = NULL; Value = direction; Game* game = core->GetGame(); WorldMap* worldmap = core->GetWorldMap(); CopyResRef(currentArea, game->CurrentArea); int entry = core->GetAreaAlias(currentArea); if (entry >= 0) { WMPAreaEntry *m = worldmap->GetEntry(entry); CopyResRef(currentArea, m->AreaResRef); } //if there is no trivial area, look harder if (!worldmap->GetArea(currentArea, (unsigned int &) entry) && core->HasFeature(GF_FLEXIBLE_WMAP) ) { WMPAreaEntry *m = worldmap->FindNearestEntry(currentArea, (unsigned int &) entry); if (m) { CopyResRef(currentArea, m->AreaResRef); } } //this also updates visible locations worldmap->CalculateDistances(currentArea, Value); // alpha bit is unfortunately ignored if (font[0]) { ftext = core->GetFont(font); } else { ftext = NULL; } // initialize label colors // NOTE: it would be better to initialize these colors from // some 2da file Color normal = { 0xf0, 0xf0, 0xf0, 0xff }; Color selected = { 0xf0, 0x80, 0x80, 0xff }; Color notvisited = { 0x80, 0x80, 0xf0, 0xff }; Color black = { 0x00, 0x00, 0x00, 0x00 }; pal_normal = core->CreatePalette ( normal, black ); pal_selected = core->CreatePalette ( selected, black ); pal_notvisited = core->CreatePalette ( notvisited, black ); ResetEventHandler( WorldMapControlOnPress ); ResetEventHandler( WorldMapControlOnEnter ); }