#include "vg/vg.h"
#include "fishladder_resources.h"
+/*
+ Todo for release:
+ Tutorial levels:
+ 1. Transport
+ 2. Split
+ 3. Merge (and explode)
+ 4. Principle 1 (divide colours)
+ 5. Principle 2 (combine colours)
+
+ Trainee levels:
+ Simple maths (x3)
+ Colour ordering (x2)
+ Routing problems (x2)
+
+ Medium levels:
+ Reverse order
+
+ New things to program:
+ UI text element renderer (SDF) DONE(sorta)
+ Particle system thing for ball collision
+ Level descriptions / titles HALF
+ Row Gridlines for I/O
+ Play button / Speed controller
+
+
+ After release:
+
+*/
+
const char *level_pack_1[] = {
"level0",
"level1",
int num_fishes;
- char map_name[128];
+ char map_name[64];
struct career_level *ptr_career_level;
u32 score;
// Scan for width
for(;; world.w ++)
{
- if( str[world.w] == ';' )
+ if( c[world.w] == ';' )
break;
- else if( !str[world.w] )
+ else if( !c[world.w] )
{
vg_error( "Unexpected EOF when parsing level\n" );
return 0;
world.tile_y = floorf( world.tile_pos[1] );
// Tilemap editing
- if( !world.simulating )
+ if( !world.simulating && !gui_want_mouse() )
{
v2_copy( vg_mouse_ws, drag_to_co );
}
+ // Level title
+ ui_begin( &ui_global_ctx, 512, 256 );
+
+ ui_global_ctx.override_colour = 0xff9a8a89;
+ //ui_text( &ui_global_ctx, world.map_title, 6, 0 );
+ ui_global_ctx.override_colour = 0xffffffff;
+
+ ui_resolve( &ui_global_ctx );
+
+ m3x3f world_text;
+ m3x3_copy( vg_pv, world_text );
+ m3x3_translate( world_text, (v3f){ 1.55f, 1.9f, 0.0f } );
+ m3x3_rotate( world_text, VG_PIf*0.5f );
+ m3x3_scale( world_text, (v3f){0.01f,-0.01f,0.01f} );
+
+ ui_draw( &ui_global_ctx, world_text );
+
+ // Main
+ // =========================================================================================
+
+ use_mesh( &world.tile );
SHADER_USE( shader_tile_main );
m2x2f subtransform;
level_ui_space[1] -= 0.01f;
draw_numbers( level_ui_space, i );
}
-
- //use_mesh( &world.numbers );
- //draw_numbers( (v3f){ 0.0f, -0.5f, 0.1f }, 128765 );
}
void vg_ui(void)
{
- ui_test();
+ ui_global_ctx.cursor[0] = 0;
+ ui_global_ctx.cursor[1] = 0;
+ ui_global_ctx.cursor[2] = 256;
+
+ gui_fill_y();
+
+ ui_global_ctx.id_base = 4 << 16;
+
+ gui_new_node();
+ {
+ gui_fill_rect( ui_global_ctx.cursor, 0xff5577ff );
+
+ gui_text( "MARBLE COMPUTING", 4, 0 );
+
+ ui_global_ctx.cursor[1] += 45;
+ ui_global_ctx.cursor[3] = 709;
+
+ // Level scroll view
+ gui_new_node();
+ {
+ gui_fill_rect( ui_global_ctx.cursor, 0xffff7729 );
+ gui_set_clip( ui_global_ctx.cursor );
+
+ ui_global_ctx.cursor[2] = 16;
+ gui_align_right();
+
+ static struct ui_scrollbar sb = {
+ .bar_height = 400
+ };
+ ui_scrollbar( &ui_global_ctx, &sb, 0 );
+
+ ui_global_ctx.cursor[2] = 240;
+ ui_global_ctx.cursor[3] = 50;
+ gui_align_left();
+
+ ui_px content_height = vg_list_size(cmp_levels_basic)*ui_global_ctx.cursor[3];
+ ui_global_ctx.cursor[1] -= ui_calculate_content_scroll( &sb, content_height );
+
+ for( int i = 0; i < vg_list_size(cmp_levels_basic); i ++ )
+ {
+ struct cmp_level *lvl_info = &cmp_levels_basic[i];
+
+ gui_new_node();
+ {
+ gui_fill_rect( ui_global_ctx.cursor, i&0x1?0xff23fce45:0xff8722f8 );
+ gui_text( lvl_info->title, 3, 0 );
+ }
+ gui_end_down();
+ }
+
+ gui_release_clip();
+ }
+ gui_end_down();
+ }
+ gui_end();
}