@ -55,7 +55,7 @@ struct Shake {
float tick = ease ( ) ;
sf : : Vector2f scale {
std : : lerp ( initial_scale . x , initial_scale . x + scale_factor , tick ) ,
std : : lerp ( initial_scale . y , initial_scale . y + scale_factor , tick ) } ;
std : : lerp ( initial_scale . y , initial_scale . y + scale_factor , tick ) } ;
sprite . sprite - > setScale ( scale ) ;
} else {
@ -83,34 +83,35 @@ struct ClickerUI {
void init ( ) {
$ gui . set < guecs : : Background > ( $ gui . MAIN , { $ gui . $ parser , { 0 , 0 , 0 , 255 } } ) ;
for ( auto & [ name , cell ] : $ gui . cells ( ) ) {
auto id = $ gui . entity ( name ) ;
if ( name ! = " clicker " ) {
$ gui . set < guecs : : Rectangle > ( id , { } ) ;
$ gui . set < guecs : : Effect > ( id , { } ) ;
$ gui . set < guecs : : Sprite > ( id , { " clicker_treat_bone " } ) ;
fmt : : println ( " button dim: {},{} " , cell . w , cell . h ) ;
$ gui . set < guecs : : Clickable > ( id , {
[ & ] ( auto , auto ) { handle_button ( Event : : A_BUTTON ) ; }
} ) ;
}
}
$ clicker = $ gui . entity ( " clicker " ) ;
$ gui . set < guecs : : Sprite > ( $ clicker , { " clicker_the_dog " } ) ;
$ gui . set < guecs : : Sound > ( $ clicker , { " clicker_bark " } ) ;
$ gui . set < guecs : : Clickable > ( $ clicker , {
[ & ] ( auto , auto ) { handle_button ( Event : : CLICKER ) ; }
} ) ;
// custom components need to be initialized manually
$ gui . set_init < Shake > ( $ clicker , { } ) ;
for ( auto & [ name , cell ] : $ gui . cells ( ) ) {
auto id = $ gui . entity ( name ) ;
if ( name ! = " clicker " ) {
$ gui . set < guecs : : Rectangle > ( id , { } ) ;
$ gui . set < guecs : : Effect > ( id , { } ) ;
$ gui . set < guecs : : Sprite > ( id , { " clicker_treat_bone " } ) ;
fmt : : println ( " button dim: {},{} " , cell . w , cell . h ) ;
$ gui . set < guecs : : Clickable > ( id , {
[ & ] ( auto , auto ) { handle_button ( Event : : A_BUTTON ) ; }
} ) ;
}
}
$ clicker = $ gui . entity ( " clicker " ) ;
$ gui . set < guecs : : Sprite > ( $ clicker , { " clicker_the_dog " } ) ;
$ gui . set < guecs : : Sound > ( $ clicker , { " clicker_bark " } ) ;
$ gui . set < guecs : : Clickable > ( $ clicker , {
[ & ] ( auto , auto ) { handle_button ( Event : : CLICKER ) ; }
} ) ;
// custom components need to be initialized manually
$ gui . set_init < Shake > ( $ clicker , { } ) ;
$ gui . init ( ) ;
}
void render ( sf : : RenderWindow & window ) {
auto & shaker = $ gui . get < Shake > ( $ clicker ) ;
if ( shaker . playing ) {
auto & sprite = $ gui . get < guecs : : Sprite > ( $ clicker ) ;
shaker . render ( sprite ) ;
@ -130,17 +131,17 @@ struct ClickerUI {
using enum Event ;
switch ( ev ) {
case CLICKER : {
auto & shaker = $ gui . get < Shake > ( $ clicker ) ;
auto & sprite = $ gui . get < guecs : : Sprite > ( $ clicker ) ;
shaker . play ( sprite ) ;
fmt : : println ( " CLICKER LOVES YOU! " ) ;
} break ;
auto & shaker = $ gui . get < Shake > ( $ clicker ) ;
auto & sprite = $ gui . get < guecs : : Sprite > ( $ clicker ) ;
shaker . play ( sprite ) ;
fmt : : println ( " CLICKER LOVES YOU! " ) ;
} break ;
case A_BUTTON :
fmt : : println ( " a button clicked " ) ;
break ;
fmt : : println ( " a button clicked " ) ;
break ;
default :
assert ( false & & " invalid event " ) ;
assert ( false & & " invalid event " ) ;
}
}
} ;
@ -149,7 +150,7 @@ int main() {
sfml : : Backend backend ;
guecs : : init ( & backend ) ;
sf : : RenderWindow window ( sf : : VideoMode ( { WINDOW_WIDTH , WINDOW_HEIGHT } ) , " LEL-GUECS Calculator " ) ;
sf : : RenderWindow window ( sf : : VideoMode ( { WINDOW_WIDTH , WINDOW_HEIGHT } ) , " Clicker the Dog " ) ;
window . setFramerateLimit ( FRAME_LIMIT ) ;
window . setVerticalSyncEnabled ( VSYNC ) ;