k_editer_property = 34,
k_editer_item = 35,
- k_ent_flame = 200,
+ k_ent_flame = 200, // FIXME: Move thiese into own file per-game.
k_ent_waterfall = 201,
k_ent_rb2 = 202,
k_ent_heatpipe = 203,
k_ent_waterlevel = 204,
k_ent_viewstone = 205,
+ k_ent_gauge = 206,
k_ent_max
};
[k_ent_script] = "ent_script",
[k_ent_atom] = "ent_atom",
[k_ent_cutscene] = "ent_cutscene",
- [k_ent_light] = "ent_light"
+ [k_ent_light] = "ent_light",
+ [k_ent_max] = NULL
};
static inline u32 mdl_entity_id_type( u32 entity_id )
out_co[1] = _ui.mouse_co[1];
}
+// FIXME BAD
void _ui_set_encoding( enum ui_text_encoding encoding )
{
_ui.text_encoding = encoding;
}
+enum ui_text_encoding _ui_get_encoding(void)
+{
+ return _ui.text_encoding;
+}
b8 ui_inside_rect( i16 rect[4], i16 co[2] )
{
return (co[0] >= rect[0]) && (co[1] >= rect[1]) && (co[0] < rect[0]+rect[2]) && (co[1] < rect[1]+rect[3]);
}
-struct ui_string_decoder
-{
- /* source */
- const c8 *string;
- enum ui_text_encoding encoding;
-
- /* internal */
- u32 buffer_offset, character_index;
- u32 utf8_counter;
-
- /* read from these */
- i16 grid_co[2];
- u32 c;
-};
-
void ui_string_decode_init( struct ui_string_decoder *decoder, const c8 *string, enum ui_text_encoding encoding )
{
zero_buffer( decoder, sizeof(struct ui_string_decoder) );
{
struct ui_string_decoder copy = *decoder;
while( ui_string_decode( © ) ){}
- return copy.grid_co[1];
+ return copy.grid_co[1]+1;
}
void _ui_text( i16 rect[4], const c8 *text, enum ui_align align, union colour colour )
if( align & k_ui_align_y_center )
{
- text_root[1] += rect[3]/2 - text_decoder_line_count( &decoder )/2;
- text_root[1] += kerning[2];
+ text_root[1] += (rect[3] - text_decoder_line_count( &decoder )*kerning[1])/2;
+ //text_root[1] += kerning[2]; ????
}
b8 align_x = (align & (k_ui_align_x_center|k_ui_align_x_right))? 1:0;
- while( ui_string_decode( &decoder ) )
+
+decode_loop:
{
if( align_x && (align & (k_ui_align_x_center|k_ui_align_x_right)) )
{
i16 line_width = text_decoder_line_width( &decoder ) * kerning[0];
- if( align & k_ui_align_x_center ) text_root[0] = rect[0] + (rect[2]/2 - line_width/2);
+ if( align & k_ui_align_x_center ) text_root[0] = rect[0] + (rect[2] - line_width)/2;
else text_root[0] = rect[0] + (rect[2] - line_width);
align_x = 0;
}
+ if( !ui_string_decode( &decoder ) )
+ return;
+
if( decoder.c == '\n' )
align_x = 1;
else
_graphics_glyph( char_root, decoder.c, 1, colour );
}
}
+ goto decode_loop;
//rect_copy( temp_area, clipping_area );
}
+#pragma once
/* Basic graphics
* ------------------------------------------------------------------------------------------------------------------ */
void _graphics_set_target( struct graphics_target *target );
void _graphics_viewport( i16 x, i16 y, i16 w, i16 h );
+void _graphics_get_viewport_rect( i16 rect[4] );
void _graphics_pixel_unclipped( i16 co[2], union colour colour );
void _graphics_pixel( i16 co[2], union colour colour );
void _graphics_push_blendmode( enum blending_mode mode );
k_ui_text_utf8
};
void _ui_set_encoding( enum ui_text_encoding encoding );
+enum ui_text_encoding _ui_get_encoding(void); // FIXME BAD
+struct ui_string_decoder
+{
+ /* source */
+ const c8 *string;
+ enum ui_text_encoding encoding;
+
+ /* internal */
+ u32 buffer_offset, character_index;
+ u32 utf8_counter;
+
+ /* read from these */
+ i16 grid_co[2];
+ u32 c;
+};
+u32 text_decoder_line_count( struct ui_string_decoder *decoder );
+void ui_string_decode_init( struct ui_string_decoder *decoder, const c8 *string, enum ui_text_encoding encoding );
+b8 ui_string_decode( struct ui_string_decoder *decoder );
enum ui_align
{