Browse Source

bugfix, a bit more of hero window

mateuszb 18 năm trước cách đây
mục cha
commit
7968aebe1a
3 tập tin đã thay đổi với 49 bổ sung3 xóa
  1. 37 1
      CHeroWindow.cpp
  2. 8 2
      CHeroWindow.h
  3. 4 0
      mapHandler.cpp

+ 37 - 1
CHeroWindow.cpp

@@ -17,20 +17,33 @@ CHeroWindow::CHeroWindow(int playerColor)
 	pos.w = background->w;
 
 	quitButton = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::quit, 674, 524, "hsbtns.def", this);
+	dismissButton = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::dismissCurrent, 519, 437, "hsbtns2.def", this);
+	questlogButton = new AdventureMapButton<CHeroWindow>(std::string(), std::string(), &CHeroWindow::questlog, 379, 437, "hsbtns4.def", this);
+
+	skillpics = CGI->spriteh->giveDef("pskil42.def");
 }
 
 CHeroWindow::~CHeroWindow()
 {
 	SDL_FreeSurface(background);
 	delete quitButton;
+	delete dismissButton;
+	delete questlogButton;
+
+	if(curBack)
+		SDL_FreeSurface(curBack);
+
+	delete skillpics;
 }
 
 void CHeroWindow::show(SDL_Surface *to)
 {
 	if(!to)
 		to=ekran;
-	blitAt(background,pos.x,pos.y,to);
+	blitAt(curBack,pos.x,pos.y,to);
 	quitButton->show();
+	dismissButton->show();
+	questlogButton->show();
 }
 
 void CHeroWindow::setHero(const CGHeroInstance *hero)
@@ -48,10 +61,33 @@ void CHeroWindow::quit()
 		}
 	}
 	quitButton->deactivate();
+	dismissButton->deactivate();
+	questlogButton->deactivate();
 	LOCPLINT->adventureInt->show();
+
+	SDL_FreeSurface(curBack);
+	curBack = NULL;
 }
 
 void CHeroWindow::activate()
 {
 	quitButton->activate();
+	dismissButton->activate();
+	questlogButton->activate();
+
+	curBack = CSDL_Ext::copySurface(background);
+	blitAt(skillpics->ourImages[0].bitmap, 32, 111, curBack);
+	blitAt(skillpics->ourImages[1].bitmap, 102, 111, curBack);
+	blitAt(skillpics->ourImages[2].bitmap, 172, 111, curBack);
+	blitAt(skillpics->ourImages[5].bitmap, 242, 111, curBack);
+	blitAt(skillpics->ourImages[4].bitmap, 20, 230, curBack);
+	blitAt(skillpics->ourImages[3].bitmap, 162, 230, curBack);
+}
+
+void CHeroWindow::dismissCurrent()
+{
+}
+
+void CHeroWindow::questlog()
+{
 }

+ 8 - 2
CHeroWindow.h

@@ -4,14 +4,18 @@
 template <typename T> class AdventureMapButton;
 class SDL_Surface;
 class CGHeroInstance;
+class CDefHandler;
 
 class CHeroWindow: public IShowable, public virtual CIntObject
 {
-	SDL_Surface * background;
+	SDL_Surface * background, * curBack;
 	const CGHeroInstance * curHero;
 
+	//general graphics
+	CDefHandler * skillpics;
+
 	//buttons
-	AdventureMapButton<CHeroWindow> * quitButton;
+	AdventureMapButton<CHeroWindow> * quitButton, * dismissButton, * questlogButton;
 public:
 	CHeroWindow(int playerColor); //c-tor
 	~CHeroWindow(); //d-tor
@@ -19,4 +23,6 @@ public:
 	void activate(); //activates hero window;
 	virtual void show(SDL_Surface * to = NULL); //shows hero window
 	void quit(); //stops displaying hero window
+	void dismissCurrent(); //dissmissed currently displayed hero (curHero) //TODO: make it working
+	void questlog(); //show quest log in 
 };

+ 4 - 0
mapHandler.cpp

@@ -1880,6 +1880,10 @@ std::string CMapHandler::getRandomizedDefName(CGDefInfo *di, CGObjectInstance *
 					}
 				}
 			}
+			if(fraction == -1)
+			{
+				fraction = rand()%F_NUMBER; //TODO: check it more
+			}
 			int lvl = atoi(di->name.substr(7, 8).c_str()) - 1;
 			return creGenNames[fraction][lvl];
 		}