gui icons
[carveJwlIkooP6JGAAIwe30JlM.git] / respawn.c
index b6e3874907f7d0a368714ff96bc5b7f95929f785..50ddea2757a68a17fa1183049746d01e419de897 100644 (file)
--- a/respawn.c
+++ b/respawn.c
@@ -73,6 +73,16 @@ VG_STATIC void respawn_chooser_gohome(void){
       gui_location_print_ccmd( 1, (const char *[]){ "Invalid home ID" } );
 }
 
+VG_STATIC void respawn_map_draw_icon( camera *cam, 
+                                      enum gui_icon icon, v3f pos ){
+   v4f v;
+   v3_copy( pos, v );
+   v[3] = 1.0f;
+   m4x4_mulv( cam->mtx.pv, v, v );
+   v2_divs( v, v[3], v );
+
+   gui_draw_icon( icon, (v2f){ v[0]*0.5f+0.5f,v[1]*0.5f+0.5f }, 1.0f );
+}
 
 VG_STATIC void respawn_chooser_pre_update(void){
    if( skaterift.activity != k_skaterift_respawning ) return;
@@ -173,6 +183,7 @@ VG_STATIC void respawn_chooser_pre_update(void){
       v3_copy( spawn->transform.co, v );
       v[3] = 1.0f;
       m4x4_mulv( cam->mtx.pv, v, v );
+      v2_divs( v, v[3], v );
 
       f32 d2 = v2_length2(v);
       if( d2 < closest2 ){
@@ -181,8 +192,33 @@ VG_STATIC void respawn_chooser_pre_update(void){
       }
    }
 
-   if( respawn_chooser.spawn ){
-      vg_line_cross( respawn_chooser.spawn->transform.co, VG__GREEN, 5.0f );
+   /* icons
+    * ---------------------*/
+   for( u32 i=0; i<mdl_arrcount(&world->ent_challenge); i++ ){
+      ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i );
+
+      enum gui_icon icon = k_gui_icon_exclaim;
+      if( challenge->status )
+         icon = k_gui_icon_tick;
+
+      respawn_map_draw_icon( cam, icon, challenge->transform.co );
+   }
+
+   for( u32 i=0; i<mdl_arrcount(&world->ent_skateshop); i++ ){
+      ent_skateshop *shop = mdl_arritm( &world->ent_skateshop, i );
+      if( shop->type == k_skateshop_type_boardshop ){
+         respawn_map_draw_icon( cam, k_gui_icon_board, shop->transform.co );
+      }
+      else if( shop->type == k_skateshop_type_worldshop ){
+         respawn_map_draw_icon( cam, k_gui_icon_world, shop->transform.co );
+      }
+   }
+
+   for( u32 i=0; i<mdl_arrcount(&world->ent_gate); i++ ){
+      ent_gate *gate = mdl_arritm( &world->ent_gate, i );
+      if( gate->flags & k_ent_gate_nonlocal ){
+         respawn_map_draw_icon( cam, k_gui_icon_rift, gate->co[0] );
+      }
    }
 }