1
1
use bevy:: {
2
2
color:: palettes:: css:: { GREEN , WHITE } ,
3
+ gltf:: GltfMaterialName ,
3
4
prelude:: * ,
4
5
} ;
5
6
use bevy_mod_billboard:: BillboardText ;
@@ -9,7 +10,10 @@ use shared::{
9
10
collision_handling:: components:: WantedTransform ,
10
11
player_handling:: { Health , TankBodyMarker , TankTurretMarker } ,
11
12
} ,
12
- networking:: { lobby_management:: InTeam , messages:: message_container:: GameStartsTrigger } ,
13
+ networking:: {
14
+ lobby_management:: InTeam ,
15
+ messages:: { message_container:: GameStartsTrigger , message_data:: game_starts:: GameStarts } ,
16
+ } ,
13
17
} ;
14
18
15
19
use crate :: game_handling:: entity_mapping:: MyEntityMapping ;
@@ -123,3 +127,41 @@ pub fn create_player_visualisation(
123
127
) ;
124
128
}
125
129
}
130
+
131
+ pub fn update_tank_color (
132
+ trigger : Trigger < OnAdd , GltfMaterialName > ,
133
+ mut materials : ResMut < Assets < StandardMaterial > > ,
134
+ tank : Query < & InTeam , With < TankBodyMarker > > ,
135
+ parent_query : Query < & Parent > ,
136
+ mat_query : Query < ( & Name , & MeshMaterial3d < StandardMaterial > , & GltfMaterialName ) > ,
137
+ game_start : Res < GameStarts > ,
138
+ ) {
139
+ let added_material_name_entity = trigger. entity ( ) ;
140
+ let ( name, mat_handle, material_name) = mat_query
141
+ . get ( added_material_name_entity)
142
+ . expect ( "Failed to get material name" ) ;
143
+
144
+ if material_name. 0 != "TeamColor" {
145
+ return ;
146
+ }
147
+
148
+ // I do not understand.
149
+ println ! ( "Name: {:?}, material name: {:?}" , name, material_name. 0 ) ;
150
+ let root = parent_query. root_ancestor ( added_material_name_entity) ;
151
+ println ! ( "Root: {:?}" , root) ;
152
+
153
+ if let Ok ( in_team) = tank. get ( root) {
154
+ println ! ( "Found tank with team: {:?}" , in_team. 0 ) ;
155
+ let team_color = game_start
156
+ . team_configs
157
+ . get ( & in_team. 0 )
158
+ . map ( |config| Color :: from ( config. color . clone ( ) ) )
159
+ . unwrap_or ( WHITE . into ( ) ) ;
160
+
161
+ if let Some ( material) = materials. get_mut ( mat_handle. id ( ) ) {
162
+ material. base_color = team_color;
163
+ }
164
+ } else {
165
+ println ! ( "Failed to get tank" ) ;
166
+ }
167
+ }
0 commit comments