@@ -10,8 +10,8 @@ use serde_json::from_reader;
10
10
use serde:: Deserialize ;
11
11
use std:: collections:: HashMap ;
12
12
use crate :: entities:: ship:: { Ship , ShipParent , Thrusters } ;
13
- use crate :: resources:: main_resource:: { MainResource , ShipSprites } ;
14
- use crate :: utils:: sprite_to_colliders :: { sprite_to_colliders, is_landing_platform_start} ;
13
+ use crate :: resources:: main_resource:: { MainResource , MainSprites } ;
14
+ use crate :: utils:: sprite_to_entities :: { sprite_to_colliders, is_landing_platform_start, sprite_to_canon } ;
15
15
use crate :: entities:: collision:: { Transparent , LandingPlatform } ;
16
16
use amethyst:: utils:: application_root_dir;
17
17
use amethyst:: core:: math:: { Point3 , Vector3 } ;
@@ -31,6 +31,9 @@ const CONFIG_MISC: &str = "sprites/main.ron";
31
31
const IMAGE_SHIP : & str = "sprites/space_ship.png" ;
32
32
const CONFIG_SHIP : & str = "sprites/space_ship.ron" ;
33
33
34
+ const IMAGE_BULLETS : & str = "sprites/bullets.png" ;
35
+ const CONFIG_BULLETS : & str = "sprites/bullets.ron" ;
36
+
34
37
const IMAGE_EXPLOSION : & str = "sprites/explosion.png" ;
35
38
const CONFIG_EXPLOSION : & str = "sprites/explosion.ron" ;
36
39
@@ -43,14 +46,15 @@ impl SimpleState for LevelState {
43
46
//let misc_spritesheet_handle = load_misc_spritesheet(world);
44
47
let level_spritesheet_handle = load_level_spritesheet ( world, 1 ) ;
45
48
let ship_spritesheet_handle = load_ship_spritesheet ( world) ;
49
+ let bullet_spritesheet_handle = load_bullets_spritesheet ( world) ;
46
50
let ship_explosion_handle = load_explosion_spritesheet ( world) ;
47
51
48
52
initialize_level_tileset ( world, level_spritesheet_handle, & level) ;
49
- initialize_colliders ( world, & level) ;
53
+ initialize_colliders_with_entitites ( world, & level) ;
50
54
let ship = initialize_ship ( world, & level, ship_spritesheet_handle) ;
51
55
initialize_camera ( world, & level, ship) ;
52
56
let mut ship_resource = MainResource :: new_from_level ( Some ( level) ) ;
53
- ship_resource. sprites = Some ( ShipSprites { explosion_sprite_render : ship_explosion_handle } ) ;
57
+ ship_resource. sprites = Some ( MainSprites { explosion_sprite_render : ship_explosion_handle, bullet_sprite_render : bullet_spritesheet_handle } ) ;
54
58
world. insert ( ship_resource) ;
55
59
}
56
60
}
@@ -63,6 +67,10 @@ pub fn load_ship_spritesheet(world: &mut World) -> Handle<SpriteSheet> {
63
67
load_texture ( world, IMAGE_SHIP , CONFIG_SHIP )
64
68
}
65
69
70
+ pub fn load_bullets_spritesheet ( world : & mut World ) -> Handle < SpriteSheet > {
71
+ load_texture ( world, IMAGE_BULLETS , CONFIG_BULLETS )
72
+ }
73
+
66
74
pub fn load_explosion_spritesheet ( world : & mut World ) -> Handle < SpriteSheet > {
67
75
load_texture ( world, IMAGE_EXPLOSION , CONFIG_EXPLOSION )
68
76
}
@@ -98,7 +106,7 @@ fn load_texture(world: &mut World, image: &str, config: &str) -> Handle<SpriteSh
98
106
)
99
107
}
100
108
101
- fn initialize_colliders ( world : & mut World , level : & LevelConfig ) {
109
+ fn initialize_colliders_with_entitites ( world : & mut World , level : & LevelConfig ) {
102
110
for ( point, sprite) in level. tiles . borrow ( ) {
103
111
let collider = sprite_to_colliders ( * sprite, point. x as f32 * TILE_SIZE , point. y as f32 * TILE_SIZE ) ;
104
112
if collider. is_some ( ) {
@@ -107,6 +115,7 @@ fn initialize_colliders(world: &mut World, level: &LevelConfig) {
107
115
. with ( collider. unwrap ( ) ) ;
108
116
109
117
if is_landing_platform_start ( * sprite) { builder = builder. with ( LandingPlatform ) ; }
118
+ if let Some ( canon) = sprite_to_canon ( * sprite, point. x as usize , point. y as usize ) { builder = builder. with ( canon) ; }
110
119
builder. build ( ) ;
111
120
}
112
121
}
@@ -122,7 +131,7 @@ fn initialize_level_tileset(
122
131
sprite_number : 0 ,
123
132
} ;
124
133
let mut t = Transform :: default ( ) ;
125
- t. set_translation_xyz ( 32. * level. width as f32 / 2. - 16.0 , 32. * level. height as f32 / 2. - 16 ., 0. ) ;
134
+ t. set_translation_xyz ( ( TILE_SIZE * level. width as f32 ) / 2. - TILE_SIZE / 2. , ( TILE_SIZE * level. height as f32 ) / 2. - TILE_SIZE / 2 ., 0. ) ;
126
135
world
127
136
. create_entity ( )
128
137
. with ( sprite_render)
@@ -148,7 +157,7 @@ fn initialize_ship(
148
157
let mut transform = Transform :: default ( ) ;
149
158
transform. set_translation_xyz (
150
159
level. start_x as f32 * TILE_SIZE - 16. ,
151
- ( ( level. height - level. start_y ) as f32 * TILE_SIZE ) - 32. ,
160
+ ( ( level. height - level. start_y ) as f32 * TILE_SIZE ) ,
152
161
0.04 ,
153
162
) ;
154
163
0 commit comments