From 1b845c34a81984b316c9a8f4abb49166a27c9886 Mon Sep 17 00:00:00 2001
From: johns <>
Date: Thu, 8 Jun 2000 23:42:17 +0000
Subject: [PATCH] Patch for horizontal life and magic bars from Iuri applied.

---
 src/include/unit.h       |  2 ++
 src/stratagus/script.cpp | 65 ++++++++++++++++++++++++++++++++++++----
 src/unit/unit_draw.cpp   | 60 +++++++++++++++++++++++++++++--------
 3 files changed, 109 insertions(+), 18 deletions(-)

diff --git a/src/include/unit.h b/src/include/unit.h
index d4e84c8b1..b44d655b9 100644
--- a/src/include/unit.h
+++ b/src/include/unit.h
@@ -348,6 +348,8 @@ extern int ShowHealthBar;		/// Flag: show health bar
 extern int ShowHealthDot;		/// Flag: show health dot
 extern int ShowManaBar;			/// Flag: show mana bar
 extern int ShowManaDot;			/// Flag: show mana dot
+extern int ShowHealthHorizontal;       /// Flag: show health bar horizontal
+extern int ShowManaHorizontal;         /// Flag: show mana bar horizontal
 extern int ShowNoFull;			/// Flag: show no full health or mana
 extern int DecorationOnTop;		/// Flag: show health and mana on top
 extern int ShowSightRange;		/// Flag: show right range
diff --git a/src/stratagus/script.cpp b/src/stratagus/script.cpp
index 5f65a53da..a32197772 100644
--- a/src/stratagus/script.cpp
+++ b/src/stratagus/script.cpp
@@ -25,7 +25,7 @@
 #include <stdlib.h>
 
 #include "freecraft.h"
-#include "iolib.h" 
+#include "iolib.h"
 
 #ifdef USE_CCL
 
@@ -48,7 +48,7 @@
 #include "ccl_sound.h"
 #include "ccl.h"
 #include "font.h"
-#include "pathfinder.h" 
+#include "pathfinder.h"
 
 #include <guile/gh.h>			// I use guile for a quick hack
 
@@ -81,7 +81,7 @@ extern void sgtk_init_gtk_gdk_glue();
 #include "ccl_sound.h"
 #include "ui.h"
 #include "font.h"
-#include "pathfinder.h" 
+#include "pathfinder.h"
 #include "ai.h"
 
 #endif // USE_CCL2
@@ -184,6 +184,30 @@ local SCM CclShowHealthDot(void)
     return SCM_UNSPECIFIED;
 }
 
+/**
+**	Enable display health as horizontal bar.
+*/
+local SCM CclShowHealthHorizontal(void)
+{
+    ShowHealthBar=1;
+    ShowHealthDot=0;
+    ShowHealthHorizontal=1;
+
+    return SCM_UNSPECIFIED;
+}
+
+/**
+**	Enable display health as vertical bar.
+*/
+local SCM CclShowHealthVertical(void)
+{
+    ShowHealthBar=1;
+    ShowHealthDot=0;
+    ShowHealthHorizontal=0;
+
+    return SCM_UNSPECIFIED;
+}
+
 /**
 **	Enable display mana as mana-bar.
 */
@@ -216,6 +240,30 @@ local SCM CclShowFull(void)
     return SCM_UNSPECIFIED;
 }
 
+/**
+**	Enable display mana as horizontal bar.
+*/
+local SCM CclShowManaHorizontal(void)
+{
+    ShowManaBar=1;
+    ShowManaDot=0;
+    ShowManaHorizontal=1;
+
+    return SCM_UNSPECIFIED;
+}
+
+/**
+**	Enable display mana as vertical bar.
+*/
+local SCM CclShowManaVertical(void)
+{
+    ShowManaBar=1;
+    ShowManaDot=0;
+    ShowManaHorizontal=0;
+
+    return SCM_UNSPECIFIED;
+}
+
 /**
 **	Disable display of full bars/dots.
 */
@@ -769,7 +817,7 @@ local void gh_main_prog(int argc,char* argv[])
     gh_new_procedureN("missile-type",CclMissileType);
 
     MapCclRegister();
-    PathfinderCclRegister(); 
+    PathfinderCclRegister();
     UnitButtonCclRegister();
     UnitTypeCclRegister();
     SoundCclRegister();
@@ -854,6 +902,13 @@ global void CclInit(void)
 
     init_subr_0("show-health-bar",CclShowHealthBar);
     init_subr_0("show-health-dot",CclShowHealthDot);
+// adicionado por protoman
+    init_subr_0("show-health-vertical",CclShowHealthVertical);
+    init_subr_0("show-health-horizontal",CclShowHealthHorizontal);
+    init_subr_0("show-mana-vertical",CclShowManaVertical);
+    init_subr_0("show-mana-horizontal",CclShowManaHorizontal);
+// fim
+
     init_subr_0("show-mana-bar",CclShowManaBar);
     init_subr_0("show-mana-dot",CclShowManaDot);
     init_subr_0("show-full",CclShowFull);
@@ -879,7 +934,7 @@ global void CclInit(void)
     init_lsubr("missile-type",CclMissileType);
 
     MapCclRegister();
-    PathfinderCclRegister(); 
+    PathfinderCclRegister();
     UnitButtonCclRegister();
     UnitTypeCclRegister();
     UpgradesCclRegister();
diff --git a/src/unit/unit_draw.cpp b/src/unit/unit_draw.cpp
index 889f28cd6..cb3c7596c 100644
--- a/src/unit/unit_draw.cpp
+++ b/src/unit/unit_draw.cpp
@@ -54,6 +54,10 @@ global int ShowSightRange;		/// Flag: show right range
 global int ShowReactRange;		/// Flag: show react range
 global int ShowAttackRange;		/// Flag: show attack range
 global int ShowOrders;			/// Flag: show orders of unit on map
+    /// Flag: health horizontal instead of vertical
+global int ShowHealthHorizontal=1;
+    /// Flag: health horizontal instead of vertical
+global int ShowManaHorizontal=1;
 
 // FIXME: not all variables of this file are here
 // FIXME: perhaps split this file into two?
@@ -355,12 +359,27 @@ local void DrawDecoration(Unit* unit,const UnitType* type,int x,int y)
 	    } else {
 		color=ColorRed;
 	    }
-	    VideoFillRectangleClip(color
-		,x+(type->TileWidth*TileSizeX
-			-type->BoxWidth)/2
-		,y+(type->TileHeight*TileSizeY
-			-type->BoxHeight)/2
-		,2,(f*type->BoxHeight)/100);
+	    if ( ShowHealthHorizontal == 0)  {
+		    VideoFillRectangleClip(color
+			,x+(type->TileWidth*TileSizeX
+				-type->BoxWidth)/2
+			,y+(type->TileHeight*TileSizeY
+				-type->BoxHeight)/2
+			,2,(f*type->BoxHeight)/100);
+	    }  else  {
+		    VideoFillRectangleClip(ColorBlack
+			,x+((type->TileWidth*TileSizeX-type->BoxWidth)/2)-1
+			,(y+(type->TileHeight*TileSizeY-type->BoxHeight)/2)
+				+type->BoxHeight+1
+			,((f*type->BoxHeight)/100)+2
+			,5);
+		    VideoFillRectangleClip(color
+			,x+((type->TileWidth*TileSizeX-type->BoxWidth)/2)
+			,(y+(type->TileHeight*TileSizeY-type->BoxHeight)/2)
+				+type->BoxHeight+2
+			,(f*type->BoxHeight)/100
+			,3);
+	    }
 	}
     }
 
@@ -413,13 +432,28 @@ local void DrawDecoration(Unit* unit,const UnitType* type,int x,int y)
     if( ShowManaBar ) {
 	if( type->CanCastSpell
 		&& !(ShowNoFull && unit->Mana==255) ) {
-	    f=(100*unit->Mana)/255;
-	    VideoFillRectangleClip(ColorBlue
-		,x+(type->TileWidth*TileSizeX
-			+type->BoxWidth)/2
-		,y+(type->TileHeight*TileSizeY
-			-type->BoxHeight)/2
-		,2,(f*type->BoxHeight)/100);
+	    if ( ShowManaHorizontal == 0)  {
+	    	f=(100*unit->Mana)/255;
+		    VideoFillRectangleClip(ColorBlue
+			,x+(type->TileWidth*TileSizeX
+				+type->BoxWidth)/2
+			,y+(type->TileHeight*TileSizeY
+				-type->BoxHeight)/2
+			,2,(f*type->BoxHeight)/100);
+	    }  else  {
+		    f=(100*unit->Mana)/255;
+		    VideoFillRectangleClip(ColorBlack
+			,x+((type->TileWidth*TileSizeX-type->BoxWidth)/2)-1
+			,(y+(type->TileHeight*TileSizeY-type->BoxHeight)/2)+type->BoxHeight+6
+			,(type->BoxHeight)+2
+			,5);
+		    VideoFillRectangleClip(ColorBlue
+			,x+(type->TileWidth*TileSizeX-type->BoxWidth)/2
+			,(y+(type->TileHeight*TileSizeY-type->BoxHeight)/2)+type->BoxHeight+7
+			,(f*type->BoxHeight)/100
+			,3);
+	    }
+
 	}
     }