@ -3,6 +3,7 @@
# include "DEFINES.h"
# include "Menu.h"
# include "MenuLabel.h"
# include "MenuAnimatedIconButton.h"
INCLUDE_game
typedef Attribute A ;
@ -14,58 +15,62 @@ void Menu::InitializeClassSelectionWindow(){
vf2d outlineSize = classSelectionWindow - > size - vf2d { 13 , 13 } ;
MenuLabel * classSelectionLabel = new MenuLabel ( CLASS_SELECTION , { { 4 , 20 } , { outlineSize . x , 32 } } , " Choose a Character Class " , 2 , true , true , true , true ) ;
classSelectionWindow - > AddComponent ( " Class Selection Title Label " , classSelectionLabel ) ;
MenuLabel * outline = new MenuLabel ( CLASS_SELECTION , { { 4 , 4 } , outlineSize } , " " , 1 , true , false , true , false ) ;
classSelectionWindow - > AddComponent ( " Outline Border " , outline ) ;
vf2d buttonPadding = { 2 , 2 } ;
vf2d buttonSize = { outlineSize . y / 3 - buttonPadding . y * 3 , outlineSize . y / 3 - buttonPadding . y * 3 } ;
vf2d buttonSize = { floor ( outlineSize . y / 3 - buttonPadding . y * 3 ) , outlineSize . y / 9 - buttonPadding . y * 3 } ; //The floor is for fixing a small pixel rounding bug.
float buttonTotalWidth = ( buttonSize . x + buttonPadding . x ) * 3 ;
vf2d buttonStartPos = outline - > GetPos ( ) + vf2d { outlineSize . x / 2 , outlineSize . y / 3 } - vf2d { buttonTotalWidth / 2 , 0 } ;
MenuComponent * warriorButton = new MenuComponent ( CLASS_SELECTION , { buttonStartPos + ( buttonSize + buttonPadding ) * vf2d { 0 , 0 } , buttonSize } , Warrior : : name , CLASS_INFO ,
[ ] ( MenuFuncData data ) {
data . menu . S ( A : : CLASS_SELECTION ) = Warrior : : name ;
delete Menu : : menus [ CLASS_INFO ] ;
Menu : : InitializeClassInfoWindow ( ) ;
} ) ;
MenuComponent * rangerButton = new MenuComponent ( CLASS_SELECTION , { buttonStartPos + ( buttonSize + buttonPadding ) * vf2d { 1 , 0 } , buttonSize } , Ranger : : name , CLASS_INFO ,
[ ] ( MenuFuncData data ) {
data . menu . S ( A : : CLASS_SELECTION ) = Ranger : : name ;
delete Menu : : menus [ CLASS_INFO ] ;
Menu : : InitializeClassInfoWindow ( ) ;
} ) ;
MenuComponent * wizardButton = new MenuComponent ( CLASS_SELECTION , { buttonStartPos + ( buttonSize + buttonPadding ) * vf2d { 2 , 0 } , buttonSize } , Wizard : : name , CLASS_INFO ,
[ ] ( MenuFuncData data ) {
data . menu . S ( A : : CLASS_SELECTION ) = Wizard : : name ;
delete Menu : : menus [ CLASS_INFO ] ;
Menu : : InitializeClassInfoWindow ( ) ;
} ) ;
MenuComponent * thiefButton = new MenuComponent ( CLASS_SELECTION , { buttonStartPos + ( buttonSize + buttonPadding ) * vf2d { 0 , 1 } , buttonSize } , Thief : : name , CLASS_INFO ,
[ ] ( MenuFuncData data ) {
data . menu . S ( A : : CLASS_SELECTION ) = Thief : : name ;
delete Menu : : menus [ CLASS_INFO ] ;
Menu : : InitializeClassInfoWindow ( ) ;
} ) ;
MenuComponent * trapperButton = new MenuComponent ( CLASS_SELECTION , { buttonStartPos + ( buttonSize + buttonPadding ) * vf2d { 1 , 1 } , buttonSize } , Trapper : : name , CLASS_INFO ,
[ ] ( MenuFuncData data ) {
data . menu . S ( A : : CLASS_SELECTION ) = Trapper : : name ;
delete Menu : : menus [ CLASS_INFO ] ;
Menu : : InitializeClassInfoWindow ( ) ;
} ) ;
MenuComponent * witchButton = new MenuComponent ( CLASS_SELECTION , { buttonStartPos + ( buttonSize + buttonPadding ) * vf2d { 2 , 1 } , buttonSize } , Witch : : name , CLASS_INFO ,
[ ] ( MenuFuncData data ) {
data . menu . S ( A : : CLASS_SELECTION ) = Witch : : name ;
delete Menu : : menus [ CLASS_INFO ] ;
Menu : : InitializeClassInfoWindow ( ) ;
} ) ;
classSelectionWindow - > AddComponent ( " Warrior Button " , warriorButton ) ;
classSelectionWindow - > AddComponent ( " Ranger Button " , rangerButton ) ;
classSelectionWindow - > AddComponent ( " Wizard Button " , wizardButton ) ;
classSelectionWindow - > AddComponent ( " Thief Button " , thiefButton ) ;
classSelectionWindow - > AddComponent ( " Trapper Button " , trapperButton ) ;
classSelectionWindow - > AddComponent ( " Witch Button " , witchButton ) ;
std : : array < std : : string , 6 > classNames = {
Warrior : : name ,
Ranger : : name ,
Wizard : : name ,
Thief : : name ,
Trapper : : name ,
Witch : : name ,
} ;
std : : array < std : : string , 6 > classAnimationNames = {
Warrior : : walk_s ,
Ranger : : walk_s ,
Wizard : : walk_s ,
Thief : : walk_s ,
Trapper : : walk_s ,
Witch : : walk_s ,
} ;
for ( int i = 0 ; i < 6 ; i + + ) {
std : : string className = classNames [ i ] ;
std : : string classAnimationName = classAnimationNames [ i ] ;
vf2d offsetPos = {
buttonStartPos . x + ( buttonSize . x + buttonPadding . x ) * float ( i % 3 ) ,
buttonStartPos . y + ( buttonSize . y + buttonPadding . y + 2 * outlineSize . y / 9 ) * float ( i / 3 ) + 2 * outlineSize . y / 9 ,
} ;
vf2d backgroundOffsetPos = {
buttonStartPos . x + ( buttonSize . x + buttonPadding . x ) * float ( i % 3 ) ,
buttonStartPos . y + ( buttonSize . y + buttonPadding . y + 2 * outlineSize . y / 9 ) * float ( i / 3 ) ,
} ;
vf2d backgroundSize = { floor ( outlineSize . y / 3 - buttonPadding . y * 3 ) , outlineSize . y / 3 - buttonPadding . y * 3 } ; //The floor is for fixing a small pixel rounding bug.
MenuLabel * backgroundOutline = new MenuLabel ( CLASS_SELECTION , { backgroundOffsetPos , backgroundSize } , " " , 1 , true , false , true , true ) ;
MenuLabel * classLabel = new MenuLabel ( CLASS_SELECTION , { backgroundOffsetPos , buttonSize } , className , 1 , true , true ) ;
MenuAnimatedIconButton * classSprite = new MenuAnimatedIconButton ( CLASS_SELECTION , { backgroundOffsetPos + vf2d { 0 , 12 } , backgroundSize + vf2d { 0 , - buttonSize . y - 12 } } , classAnimationName , [ ] ( MenuFuncData data ) { } , false ) ;
MenuComponent * classButton = new MenuComponent ( CLASS_SELECTION , { offsetPos , buttonSize } , " Info " , CLASS_INFO ,
[ ] ( MenuFuncData data ) {
data . menu . S ( A : : CLASS_SELECTION ) = data . component - > S ( A : : CLASS_SELECTION ) ;
delete Menu : : menus [ CLASS_INFO ] ;
Menu : : InitializeClassInfoWindow ( ) ;
} ) ;
classButton - > S ( A : : CLASS_SELECTION ) = className ;
classSelectionWindow - > AddComponent ( className + " Button " , classButton ) ;
classSelectionWindow - > AddComponent ( className + " Background " , backgroundOutline ) ;
classSelectionWindow - > AddComponent ( className + " Label " , classLabel ) ;
classSelectionWindow - > AddComponent ( className + " Icon " , classSprite ) ;
}
}