Jelajahi Sumber

very significant optimization of battles

mateuszb 17 tahun lalu
induk
melakukan
6633fb86ef
3 mengubah file dengan 36 tambahan dan 38 penghapusan
  1. 23 25
      CBattleInterface.cpp
  2. 1 1
      CBattleInterface.h
  3. 12 12
      SDL_Extensions.cpp

+ 23 - 25
CBattleInterface.cpp

@@ -176,7 +176,7 @@ CBattleInterface::CBattleInterface(CCreatureSet * army1, CCreatureSet * army2, C
 		}
 	}
 
-	shadedHexesGraphic = CSDL_Ext::newSurface(background->w, background->h, cellBorder);
+	backgroundWithHexes = CSDL_Ext::newSurface(background->w, background->h, screen);
 }
 
 CBattleInterface::~CBattleInterface()
@@ -186,7 +186,7 @@ CBattleInterface::~CBattleInterface()
 	SDL_FreeSurface(amountBasic);
 	SDL_FreeSurface(amountNormal);
 	SDL_FreeSurface(cellBorders);
-	SDL_FreeSurface(shadedHexesGraphic);
+	SDL_FreeSurface(backgroundWithHexes);
 	delete bOptions;
 	delete bSurrender;
 	delete bFlee;
@@ -253,12 +253,20 @@ void CBattleInterface::show(SDL_Surface * to)
 	++animCount;
 	if(!to) //"evaluating" to
 		to = screen;
-
-	//showing background
-	blitAt(background, 0, 0, to);
-	if(printCellBorders)
+	
+	//printing background and hexes
+	if(activeStack != -1 && creAnims[activeStack]->getType() != 0) //show everything with range
 	{
-		CSDL_Ext::blit8bppAlphaTo24bpp(cellBorders, NULL, to, NULL);
+		blitAt(backgroundWithHexes, 0, 0, to);
+	}
+	else
+	{
+		//showing background
+		blitAt(background, 0, 0, to);
+		if(printCellBorders)
+		{
+			CSDL_Ext::blit8bppAlphaTo24bpp(cellBorders, NULL, to, NULL);
+		}
 	}
 	//printing hovered cell
 	for(int b=0; b<187; ++b)
@@ -270,11 +278,7 @@ void CBattleInterface::show(SDL_Surface * to)
 			CSDL_Ext::blit8bppAlphaTo24bpp(cellShade, NULL, to, &genRect(cellShade->h, cellShade->w, x, y));
 		}
 	}
-	//showing selected unit's range
-	if(activeStack != -1 && creAnims[activeStack]->getType() != 0) //don't show if unit is moving
-	{
-		showRange(to, activeStack);
-	}
+
 
 	//showing menu background and console
 	blitAt(menu, 0, 556, to);
@@ -494,24 +498,18 @@ void CBattleInterface::stackActivated(int number)
 	shadedHexes = LOCPLINT->cb->battleGetAvailableHexes(number);
 	myTurn = true;
 
-	//preparating graphic with shaded hexes
-	//prepairing graphic with cell borders
-	shadedHexesGraphic = CSDL_Ext::newSurface(background->w, background->h, cellShade);
-	*shadedHexesGraphic->format->palette = *cellShade->format->palette;
+	//preparating background graphic with hexes and shaded hexes
+	blitAt(background, 0, 0, backgroundWithHexes);
+	if(printCellBorders)
+		CSDL_Ext::blit8bppAlphaTo24bpp(cellBorders, NULL, backgroundWithHexes, NULL);
+
 	for(int m=0; m<shadedHexes.size(); ++m) //rows
 	{
 		int i = shadedHexes[m]/17; //row
 		int j = shadedHexes[m]%17-1; //column
 		int x = 58 + (i%2==0 ? 22 : 0) + 44*j;
 		int y = 86 + 42 * i;
-		for(int cellX = 0; cellX < cellShade->w; ++cellX)
-		{
-			for(int cellY = 0; cellY < cellShade->h; ++cellY)
-			{
-				if(y+cellY < shadedHexesGraphic->h && x+cellX < shadedHexesGraphic->w)
-					* ((Uint8*)shadedHexesGraphic->pixels + (y+cellY) * shadedHexesGraphic->pitch + (x+cellX)) |= * ((Uint8*)cellShade->pixels + cellY * cellShade->pitch + cellX);
-			}
-		}
+		CSDL_Ext::blit8bppAlphaTo24bpp(cellShade, NULL, backgroundWithHexes, &genRect(cellShade->h, cellShade->w, x, y));
 	}
 }
 
@@ -872,7 +870,7 @@ void CBattleInterface::showRange(SDL_Surface * to, int ID)
 	{
 		CSDL_Ext::blit8bppAlphaTo24bpp(CBattleInterface::cellShade, NULL, to, &bfield[shadedHexes[i]].pos);
 	}*/
-	CSDL_Ext::blit8bppAlphaTo24bpp(shadedHexesGraphic, NULL, to, NULL);
+	//CSDL_Ext::blit8bppAlphaTo24bpp(shadedHexesGraphic, NULL, to, NULL);
 }
 
 

+ 1 - 1
CBattleInterface.h

@@ -72,7 +72,7 @@ public:
 class CBattleInterface : public CMainInterface
 {
 private:
-	SDL_Surface * background, * menu, * amountBasic, * amountNormal, * cellBorders, *shadedHexesGraphic;
+	SDL_Surface * background, * menu, * amountBasic, * amountNormal, * cellBorders, * backgroundWithHexes;
 	AdventureMapButton * bOptions, * bSurrender, * bFlee, * bAutofight, * bSpell,
 		* bWait, * bDefence, * bConsoleUp, * bConsoleDown;
 	CBattleConsole * console;

+ 12 - 12
SDL_Extensions.cpp

@@ -627,14 +627,14 @@ int CSDL_Ext::blit8bppAlphaTo24bpp(SDL_Surface * src, SDL_Rect * srcRect, SDL_Su
 							case 255:
 								break;
 							case 0:
-								p[0] = (Uint32)tbc.r;
-								p[1] = (Uint32)tbc.g;
-								p[2] = (Uint32)tbc.b;
+								p[0] = tbc.r;
+								p[1] = tbc.g;
+								p[2] = tbc.b;
 								break;
 							case 128:  // optimized
-								p[0] = ((Uint32)tbc.r + (Uint32)p[0]) >> 1;
-								p[1] = ((Uint32)tbc.g + (Uint32)p[1]) >> 1;
-								p[2] = ((Uint32)tbc.b + (Uint32)p[2]) >> 1;
+								p[0] = ((Uint16)tbc.r + (Uint16)p[0]) >> 1;
+								p[1] = ((Uint16)tbc.g + (Uint16)p[1]) >> 1;
+								p[2] = ((Uint16)tbc.b + (Uint16)p[2]) >> 1;
 								break;
 							default:
 								p[0] = ((((Uint32)p[0]-(Uint32)tbc.r)*(Uint32)tbc.unused) >> 8 + (Uint32)tbc.r) & 0xFF;
@@ -662,14 +662,14 @@ int CSDL_Ext::blit8bppAlphaTo24bpp(SDL_Surface * src, SDL_Rect * srcRect, SDL_Su
 							case 255:
 								break;
 							case 0:
-								p[2] = (Uint32)tbc.r;
-								p[1] = (Uint32)tbc.g;
-								p[0] = (Uint32)tbc.b;
+								p[2] = tbc.r;
+								p[1] = tbc.g;
+								p[0] = tbc.b;
 								break;
 							case 128:  // optimized
-								p[2] = ((Uint32)tbc.r + (Uint32)p[2]) >> 1;
-								p[1] = ((Uint32)tbc.g + (Uint32)p[1]) >> 1;
-								p[0] = ((Uint32)tbc.b + (Uint32)p[0]) >> 1;
+								p[2] = ((Uint16)tbc.r + (Uint16)p[2]) >> 1;
+								p[1] = ((Uint16)tbc.g + (Uint16)p[1]) >> 1;
+								p[0] = ((Uint16)tbc.b + (Uint16)p[0]) >> 1;
 								break;
 							default:
 								p[2] = ((((Uint32)p[2]-(Uint32)tbc.r)*(Uint32)tbc.unused) >> 8 + (Uint32)tbc.r) & 0xFF;