123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527 |
- #include "stdafx.h"
- #include "CAdvmapInterface.h"
- extern TTF_Font * TNRB16, *TNR, *GEOR13, *GEORXX; //fonts
- using namespace boost::logic;
- using namespace CSDL_Ext;
- CAdvMapInt::~CAdvMapInt()
- {
- SDL_FreeSurface(bg);
- }
- AdventureMapButton::AdventureMapButton ()
- {
- type=2;
- abs=true;
- active=false;
- ourObj=NULL;
- state=0;
- }
- AdventureMapButton::AdventureMapButton
- ( std::string Name, std::string HelpBox, void(CAdvMapInt::*Function)(), int x, int y, std::string defName, bool activ, std::vector<std::string> * add )
- {
- type=2;
- abs=true;
- active=false;
- ourObj=NULL;
- state=0;
- name=Name;
- helpBox=HelpBox;
- int est = LOCPLINT->playerID;
- CDefHandler * temp = CGI->spriteh->giveDef(defName); //todo: moze cieknac
- for (int i=0;i<temp->ourImages.size();i++)
- {
- imgs.resize(1);
- imgs[0].push_back(temp->ourImages[i].bitmap);
- blueToPlayersAdv(imgs[curimg][i],LOCPLINT->playerID);
- }
- if (add)
- {
- imgs.resize(imgs.size()+add->size());
- for (int i=0; i<add->size();i++)
- {
- temp = CGI->spriteh->giveDef((*add)[i]);
- for (int j=0;j<temp->ourImages.size();j++)
- {
- imgs[i+1].push_back(temp->ourImages[j].bitmap);
- blueToPlayersAdv(imgs[1+i][j],LOCPLINT->playerID);
- }
- }
- delete add;
- }
- function = Function;
- pos.x=x;
- pos.y=y;
- pos.w = imgs[curimg][0]->w;
- pos.h = imgs[curimg][0]->h -1;
- if (activ)
- activate();
- }
- void AdventureMapButton::clickLeft (tribool down)
- {
- if (down)
- {
- state=1;
- }
- else
- {
- state=0;
- }
- show();
- if (pressedL && (down==false))
- (LOCPLINT->adventureInt->*function)();
- pressedL=state;
- }
- void AdventureMapButton::clickRight (tribool down)
- {
- //TODO: show/hide infobox
- }
- void AdventureMapButton::hover (bool on)
- {
- Hoverable::hover(on);
- if (on)
- LOCPLINT->adventureInt->statusbar.print(name);
- else if (LOCPLINT->adventureInt->statusbar.current==name)
- LOCPLINT->adventureInt->statusbar.clear();
- }
- void AdventureMapButton::activate()
- {
- if (active) return;
- active=true;
- ClickableL::activate();
- Hoverable::activate();
- KeyInterested::activate();
- }
- void AdventureMapButton::keyPressed (SDL_KeyboardEvent & key)
- {
- //TODO: check if it's shortcut
- }
- void AdventureMapButton::deactivate()
- {
- if (!active) return;
- active=false;
- ClickableL::deactivate();
- Hoverable::deactivate();
- KeyInterested::deactivate();
- }
- void CList::activate()
- {
- ClickableL::activate();
- ClickableR::activate();
- Hoverable::activate();
- KeyInterested::activate();
- };
- void CList::deactivate()
- {
- ClickableL::deactivate();
- ClickableR::deactivate();
- Hoverable::deactivate();
- KeyInterested::deactivate();
- };
- void CList::clickLeft(tribool down)
- {
- };
- CStatusBar::CStatusBar(int x, int y)
- {
- bg=CGI->bitmaph->loadBitmap("ADROLLVR.bmp");
- SDL_SetColorKey(bg,SDL_SRCCOLORKEY,SDL_MapRGB(bg->format,0,255,255));
- pos.x=x;
- pos.y=y;
- pos.w=bg->w;
- pos.h=bg->h;
- middlex=(bg->w/2)+x;
- middley=(bg->h/2)+y;
- }
- CStatusBar::~CStatusBar()
- {
- SDL_FreeSurface(bg);
- }
- void CStatusBar::clear()
- {
- current="";
- blitAtWR(bg,pos.x,pos.y);
- }
- void CStatusBar::print(std::string text)
- {
- current=text;
- blitAtWR(bg,pos.x,pos.y);
- printAtMiddle(current,middlex,middley,GEOR13,zwykly);
- }
- void CStatusBar::show()
- {
- blitAtWR(bg,pos.x,pos.y);
- printAtMiddle(current,middlex,middley,GEOR13,zwykly);
- }
- CTerrainRect::CTerrainRect():currentPath(NULL)
- {
- pos.x=7;
- pos.y=6;
- pos.w=594;
- pos.h=547;
- arrows = CGI->spriteh->giveDef("ADAG.DEF");
- for(int y=0; y<arrows->ourImages.size(); ++y)
- {
- CSDL_Ext::fullAlphaTransform(arrows->ourImages[y].bitmap);
- }
- }
- void CTerrainRect::activate()
- {
- ClickableL::activate();
- ClickableR::activate();
- Hoverable::activate();
- KeyInterested::activate();
- };
- void CTerrainRect::deactivate()
- {
- ClickableL::deactivate();
- ClickableR::deactivate();
- Hoverable::deactivate();
- KeyInterested::deactivate();
- };
- void CTerrainRect::clickLeft(tribool down){}
- void CTerrainRect::clickRight(tribool down){}
- void CTerrainRect::hover(bool on){}
- void CTerrainRect::keyPressed (SDL_KeyboardEvent & key){}
- void CTerrainRect::show()
- {
- SDL_Surface * teren = CGI->mh->terrainRect
- (LOCPLINT->adventureInt->position.x,LOCPLINT->adventureInt->position.y,
- 19,18,LOCPLINT->adventureInt->position.z,LOCPLINT->adventureInt->anim);
- SDL_BlitSurface(teren,&genRect(547,594,0,0),ekran,&genRect(547,594,7,6));
- SDL_FreeSurface(teren);
- if (currentPath)
- {
- for (int i=0;i<currentPath->nodes.size()-1;i++)
- {
- int pn=-1;//number of picture
- if (i==0) //last tile
- {
- int x = 32*(currentPath->nodes[i].x-LOCPLINT->adventureInt->position.x)+7,
- y = 32*(currentPath->nodes[i].y-LOCPLINT->adventureInt->position.y)+6;
- if (x<0 || y<0 || x>pos.w || y>pos.h)
- continue;
- pn=0;
- }
- else
- {
- std::vector<CPathNode> & cv = currentPath->nodes;
- if (cv[i+1].x == cv[i].x-1 && cv[i+1].y == cv[i].y-1)
- {
- if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y)
- {
- pn = 3;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 12;
- }
- else if(cv[i-1].x == cv[i].x && cv[i-1].y == cv[i].y+1)
- {
- pn = 21;
- }
- else if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 22;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 2;
- }
- }
- else if (cv[i+1].x == cv[i].x && cv[i+1].y == cv[i].y-1)
- {
- if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 4;
- }
- else if(cv[i-1].x == cv[i].x && cv[i-1].y == cv[i].y+1)
- {
- pn = 13;
- }
- else if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 22;
- }
- }
- else if (cv[i+1].x == cv[i].x+1 && cv[i+1].y == cv[i].y-1)
- {
- if(cv[i-1].x == cv[i].x && cv[i-1].y == cv[i].y+1)
- {
- pn = 5;
- }
- else if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 14;
- }
- else if(cv[i-1].x-1 == cv[i].x && cv[i-1].y == cv[i].y)
- {
- pn = 23;
- }
- else if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 24;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 4;
- }
- }
- else if (cv[i+1].x == cv[i].x+1 && cv[i+1].y == cv[i].y)
- {
- if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 6;
- }
- else if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y)
- {
- pn = 15;
- }
- else if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 24;
- }
- }
- else if (cv[i+1].x == cv[i].x+1 && cv[i+1].y == cv[i].y+1)
- {
- if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y)
- {
- pn = 7;
- }
- else if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 16;
- }
- else if(cv[i-1].x == cv[i].x && cv[i-1].y == cv[i].y-1)
- {
- pn = 17;
- }
- else if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 6;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 18;
- }
- }
- else if (cv[i+1].x == cv[i].x && cv[i+1].y == cv[i].y+1)
- {
- if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 8;
- }
- else if(cv[i-1].x == cv[i].x && cv[i-1].y == cv[i].y-1)
- {
- pn = 9;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 18;
- }
- }
- else if (cv[i+1].x == cv[i].x-1 && cv[i+1].y == cv[i].y+1)
- {
- if(cv[i-1].x == cv[i].x && cv[i-1].y == cv[i].y-1)
- {
- pn = 1;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 10;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y)
- {
- pn = 19;
- }
- else if(cv[i-1].x == cv[i].x-1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 8;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 20;
- }
- }
- else if (cv[i+1].x == cv[i].x-1 && cv[i+1].y == cv[i].y)
- {
- if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y-1)
- {
- pn = 2;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y)
- {
- pn = 11;
- }
- else if(cv[i-1].x == cv[i].x+1 && cv[i-1].y == cv[i].y+1)
- {
- pn = 20;
- }
- }
- }
- if (pn>=0)
- {
- int x = 32*(currentPath->nodes[i].x-LOCPLINT->adventureInt->position.x)+7,
- y = 32*(currentPath->nodes[i].y-LOCPLINT->adventureInt->position.y)+6;
- if (x<0 || y<0 || x>pos.w || y>pos.h)
- continue;
- int hvx = (x+arrows->ourImages[pn].bitmap->w)-(pos.x+pos.w),
- hvy = (y+arrows->ourImages[pn].bitmap->h)-(pos.y+pos.h);
- if (hvx<0 && hvy<0)
- blitAtWR(arrows->ourImages[pn].bitmap,x,y);
- else if(hvx<0)
- SDL_BlitSurface
- (arrows->ourImages[pn].bitmap,&genRect(arrows->ourImages[pn].bitmap->h-hvy,arrows->ourImages[pn].bitmap->w,0,0),
- ekran,&genRect(arrows->ourImages[pn].bitmap->h-hvy,arrows->ourImages[pn].bitmap->w,x,y));
- else if (hvy<0)
- {
- SDL_BlitSurface
- (arrows->ourImages[pn].bitmap,&genRect(arrows->ourImages[pn].bitmap->h,arrows->ourImages[pn].bitmap->w-hvx,0,0),
- ekran,&genRect(arrows->ourImages[pn].bitmap->h,arrows->ourImages[pn].bitmap->w-hvx,x,y));
- }
- else
- SDL_BlitSurface
- (arrows->ourImages[pn].bitmap,&genRect(arrows->ourImages[pn].bitmap->h-hvy,arrows->ourImages[pn].bitmap->w-hvx,0,0),
- ekran,&genRect(arrows->ourImages[pn].bitmap->h-hvy,arrows->ourImages[pn].bitmap->w-hvx,x,y));
- }
- }
- }
- }
- CAdvMapInt::CAdvMapInt(int Player)
- :player(Player),
- statusbar(7,556),
- kingOverview(CGI->preth->advKingdomOverview.first,CGI->preth->advKingdomOverview.second,
- &CAdvMapInt::fshowOverview, 679, 196, "IAM002.DEF"),
- underground(CGI->preth->advSurfaceSwitch.first,CGI->preth->advSurfaceSwitch.second,
- &CAdvMapInt::fswitchLevel, 711, 196, "IAM010.DEF", false, new std::vector<std::string>(1,std::string("IAM003.DEF"))),
- questlog(CGI->preth->advQuestlog.first,CGI->preth->advQuestlog.second,
- &CAdvMapInt::fshowQuestlog, 679, 228, "IAM004.DEF"),
- sleepWake(CGI->preth->advSleepWake.first,CGI->preth->advSleepWake.second,
- &CAdvMapInt::fsleepWake, 711, 228, "IAM005.DEF"),
- moveHero(CGI->preth->advMoveHero.first,CGI->preth->advMoveHero.second,
- &CAdvMapInt::fmoveHero, 679, 260, "IAM006.DEF"),
- spellbook(CGI->preth->advCastSpell.first,CGI->preth->advCastSpell.second,
- &CAdvMapInt::fshowSpellbok, 711, 260, "IAM007.DEF"),
- advOptions(CGI->preth->advAdvOptions.first,CGI->preth->advAdvOptions.second,
- &CAdvMapInt::fadventureOPtions, 679, 292, "IAM008.DEF"),
- sysOptions(CGI->preth->advSystemOptions.first,CGI->preth->advSystemOptions.second,
- &CAdvMapInt::fsystemOptions, 711, 292, "IAM009.DEF"),
- nextHero(CGI->preth->advNextHero.first,CGI->preth->advNextHero.second,
- &CAdvMapInt::fnextHero, 679, 324, "IAM000.DEF"),
- endTurn(CGI->preth->advEndTurn.first,CGI->preth->advEndTurn.second,
- &CAdvMapInt::fendTurn, 679, 356, "IAM001.DEF")
- {
- bg = CGI->bitmaph->loadBitmap("ADVMAP.bmp");
- blueToPlayersAdv(bg,player);
- scrollingLeft = false;
- scrollingRight = false;
- scrollingUp = false ;
- scrollingDown = false ;
- updateScreen = false;
- anim=0;
- animValHitCount=0; //animation frame
-
- gems.push_back(CGI->spriteh->giveDef("agemLL.def"));
- gems.push_back(CGI->spriteh->giveDef("agemLR.def"));
- gems.push_back(CGI->spriteh->giveDef("agemUL.def"));
- gems.push_back(CGI->spriteh->giveDef("agemUR.def"));
- }
- void CAdvMapInt::fshowOverview()
- {
- }
- void CAdvMapInt::fswitchLevel()
- {
- if(!CGI->ac->map.twoLevel)
- return;
- if (position.z)
- {
- position.z--;
- underground.curimg=0;
- underground.show();
- }
- else
- {
- underground.curimg=1;
- position.z++;
- underground.show();
- }
- updateScreen = true;
- }
- void CAdvMapInt::fshowQuestlog()
- {
- }
- void CAdvMapInt::fsleepWake()
- {
- }
- void CAdvMapInt::fmoveHero()
- {
- }
- void CAdvMapInt::fshowSpellbok()
- {
- }
- void CAdvMapInt::fadventureOPtions()
- {
- }
- void CAdvMapInt::fsystemOptions()
- {
- }
- void CAdvMapInt::fnextHero()
- {
- }
- void CAdvMapInt::fendTurn()
- {
- }
- void CAdvMapInt::show()
- {
- blitAt(bg,0,0);
- kingOverview.show();
- kingOverview.activate();
- underground.show();
- underground.activate();
- questlog.show();
- questlog.activate();
- sleepWake.show();
- sleepWake.activate();
- moveHero.show();
- moveHero.activate();
- spellbook.show();
- spellbook.activate();
- advOptions.show();
- advOptions.activate();
- sysOptions.show();
- sysOptions.activate();
- nextHero.show();
- nextHero.activate();
- endTurn.show();
- endTurn.activate();
- statusbar.show();
- SDL_Flip(ekran);
- }
- void CAdvMapInt::update()
- {
- terrain.show();
- blitAt(gems[2]->ourImages[LOCPLINT->playerID].bitmap,6,6);
- blitAt(gems[0]->ourImages[LOCPLINT->playerID].bitmap,6,508);
- blitAt(gems[1]->ourImages[LOCPLINT->playerID].bitmap,556,508);
- blitAt(gems[3]->ourImages[LOCPLINT->playerID].bitmap,556,6);
- updateRect(&genRect(550,600,6,6));
- }
|