Parcourir la source

Finished treasure chests.

Michał W. Urbańczyk il y a 18 ans
Parent
commit
644a494589
4 fichiers modifiés avec 37 ajouts et 9 suppressions
  1. 1 0
      CCallback.cpp
  2. 7 0
      CLua.cpp
  3. 26 6
      CPlayerInterface.cpp
  4. 3 3
      CPlayerInterface.h

+ 1 - 0
CCallback.cpp

@@ -399,6 +399,7 @@ void CScriptCallback::changePrimSkill(int ID, int which, int val)
 	else if (which==4)
 	{
 		hero->exp+=val;
+		std::cout << "Bohater o ID " << ID <<" (" <<CGI->heroh->heroes[ID]->name <<") dostaje "<<val<<" expa, ale nic z tym nie umiem zrobic :("<<std::endl;
 		//TODO - powiadomic interfejsy, sprawdzic czy nie ma awansu itp
 	}
 }

+ 7 - 0
CLua.cpp

@@ -531,6 +531,7 @@ void CPickable::onHeroVisit(CGObjectInstance *os, int heroID)
 					break;
 				}
 			}//random treasure artifact, or (if backapack is full) 1k/0.5k
+			tempStore[1]->ID = heroID;
 			player = cb->getHeroOwner(heroID);
 			cb->showSelDialog(player,CGI->objh->advobtxt[146],&tempStore,this);
 			break;
@@ -545,10 +546,16 @@ void CPickable::chosen(int which)
 	case SComponent::resource:
 		cb->giveResource(player,tempStore[which]->subtype,tempStore[which]->val);
 		break;
+	case SComponent::experience:
+		cb->changePrimSkill(tempStore[which]->ID,4,tempStore[which]->val);
+		break;
 	default:
 		throw new std::exception("Unhandled choice");
 		
 	}
+	for (int i=0;i<tempStore.size();i++)
+		delete tempStore[i];
+	tempStore.clear();
 }
 
 std::string CPickable::hoverText(CGObjectInstance *os)

+ 26 - 6
CPlayerInterface.cpp

@@ -50,8 +50,8 @@ void CInfoWindow::close()
 	SDL_FreeSurface(bitmap);
 	bitmap = NULL;
 	LOCPLINT->removeObjToBlit(this);
-	//delete this;
 	LOCPLINT->adventureInt->show();
+	delete this;
 }
 CInfoWindow::~CInfoWindow()
 {
@@ -208,14 +208,17 @@ CSimpleWindow::~CSimpleWindow()
 	}
 }
 
-void CSelWindow::selectionChange(SComponent * to)
+void CSelWindow::selectionChange(CSelectableComponent * to)
 {
 	blitAt(to->getImg(),to->pos.x-pos.x,to->pos.y-pos.y,bitmap);
 	for (int i=0;i<components.size();i++)
 	{
 		if(components[i]==to)
 		{
-			continue;
+			if (to->selected)
+				continue;
+			else
+				to->select(true);
 		}
 		CSelectableComponent * pom = dynamic_cast<CSelectableComponent*>(components[i]);
 		if (!pom)
@@ -231,8 +234,24 @@ void CSelWindow::okClicked(tribool down)
 }
 void CSelWindow::close()
 {
+	int ret = -1;
+	for (int i=0;i<components.size();i++)
+	{
+		if(dynamic_cast<CSelectableComponent*>(components[i])->selected)
+		{
+			ret = i;
+		}
+		components[i]->deactivate();
+	}	
+	components.clear();
+	okb.deactivate();
+	SDL_FreeSurface(bitmap);
+	bitmap = NULL;
+	LOCPLINT->removeObjToBlit(this);
+	LOCPLINT->adventureInt->show();
+	LOCPLINT->cb->selectionMade(ret,ID);
+	delete this;
 	//call owner with selection result
-	CInfoWindow::close();
 }
 template <typename T>CSCButton<T>::CSCButton(CDefHandler * img, CIntObject * obj, void(T::*poin)(tribool), T* Delg)
 {
@@ -258,10 +277,10 @@ template <typename T> void CSCButton<T>::clickLeft (tribool down)
 	{
 		state=0;
 	}
+	pressedL=state;
 	show();
 	if (delg)
 		(delg->*func)(down);
-	pressedL=state;
 }
 template <typename T> void CSCButton<typename T>::activate()
 {
@@ -1487,7 +1506,8 @@ void CPlayerInterface::showSelDialog(std::string text, std::vector<CSelectableCo
 		temp->components[i]->pos.x += temp->pos.x;
 		temp->components[i]->pos.y += temp->pos.y;
 	}
-
+	temp->ID = askID;
+	components[0]->clickLeft(true);
 }
 
 void CPlayerInterface::showComp(SComponent comp)

+ 3 - 3
CPlayerInterface.h

@@ -120,7 +120,7 @@ public:
 };
 
 class CInfoWindow : public CSimpleWindow //text + comp. + ok button
-{
+{ //okno usuwa swoje komponenty w chwili zamkniecia 
 public:
 	CSCButton<CInfoWindow> okb;
 	std::vector<SComponent*> components;
@@ -130,9 +130,9 @@ public:
 	virtual ~CInfoWindow();
 };
 class CSelWindow : public CInfoWindow //component selection window
-{
+{ //uwaga - to okno nie usuwa swoich komponentow przy usuwaniu, moga sie one jeszcze przydac skryptowi - tak wiec skrypt korzystajacyz tego okna musi je usunac
 public:
-	void selectionChange(SComponent * to);
+	void selectionChange(CSelectableComponent * to);
 	void okClicked(tribool down);
 	void close();
 	CSelWindow(){};