background stuff
This commit is contained in:
parent
e29bb3e75a
commit
7aec7a36a7
@ -195,6 +195,14 @@ impl<'context, 'game> Context<'context, 'game> {
|
|||||||
self.entities.push(Entity(id, components));
|
self.entities.push(Entity(id, components));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn despawn(&mut self, entity_id: u64) {
|
||||||
|
*self.entities = self
|
||||||
|
.entities
|
||||||
|
.drain(..)
|
||||||
|
.filter(|v| v.0 != entity_id)
|
||||||
|
.collect();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn add_system(&mut self, system: Rc<dyn System>) {
|
pub fn add_system(&mut self, system: Rc<dyn System>) {
|
||||||
system.on_add(self);
|
system.on_add(self);
|
||||||
self.systems.push(system)
|
self.systems.push(system)
|
||||||
|
45
src/main.rs
45
src/main.rs
@ -46,6 +46,39 @@ impl System for GravitySystem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Component)]
|
||||||
|
struct Cloud;
|
||||||
|
|
||||||
|
struct CloudSystem;
|
||||||
|
|
||||||
|
impl System for CloudSystem {
|
||||||
|
fn on_update(&self, ctx: &mut engine::Context, delta: f64) -> Result<(), engine::Error> {
|
||||||
|
let cloud_amount = ctx.entities_with_component::<Cloud>().len();
|
||||||
|
if cloud_amount < 1 {
|
||||||
|
let cloud = ctx.load_sprite("textures/clouds.png").unwrap();
|
||||||
|
ctx.spawn(vec![
|
||||||
|
Box::new(Cloud),
|
||||||
|
Box::new(Sprite { sprite: cloud }),
|
||||||
|
Box::new(Position(-100.0, 150.0)),
|
||||||
|
Box::new(Velocity(0.0, 0.0)),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for id in engine::Quwi::<(Cloud, Velocity)>::new().run(&ctx) {
|
||||||
|
let Velocity(x, _) = ctx.entity_component::<Velocity>(id);
|
||||||
|
*x = if *x < 200.0 { *x + 200.0 * delta } else { *x };
|
||||||
|
}
|
||||||
|
|
||||||
|
for id in engine::Quwi::<(Cloud, Position)>::new().run(&ctx) {
|
||||||
|
let Position(x, _) = ctx.entity_component::<Position>(id);
|
||||||
|
if *x > 1400.0 {
|
||||||
|
ctx.despawn(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct SpriteRenderer;
|
struct SpriteRenderer;
|
||||||
impl System for SpriteRenderer {
|
impl System for SpriteRenderer {
|
||||||
fn on_update(&self, ctx: &mut engine::Context, _delta: f64) -> Result<(), engine::Error> {
|
fn on_update(&self, ctx: &mut engine::Context, _delta: f64) -> Result<(), engine::Error> {
|
||||||
@ -89,9 +122,17 @@ fn main() {
|
|||||||
context.add_system(Rc::new(SpriteRenderer));
|
context.add_system(Rc::new(SpriteRenderer));
|
||||||
context.add_system(Rc::new(GravitySystem));
|
context.add_system(Rc::new(GravitySystem));
|
||||||
context.add_system(Rc::new(PlayerMovementSystem));
|
context.add_system(Rc::new(PlayerMovementSystem));
|
||||||
let sprite = context.load_sprite("textures/player.png").unwrap();
|
context.add_system(Rc::new(CloudSystem));
|
||||||
|
let player = context.load_sprite("textures/player.png").unwrap();
|
||||||
|
let background = context.load_sprite("textures/mountains.png").unwrap();
|
||||||
|
|
||||||
context.spawn(vec![
|
context.spawn(vec![
|
||||||
Box::new(Sprite { sprite }),
|
Box::new(Sprite { sprite: background }),
|
||||||
|
Box::new(Position(0.0, 0.0)),
|
||||||
|
]);
|
||||||
|
|
||||||
|
context.spawn(vec![
|
||||||
|
Box::new(Sprite { sprite: player }),
|
||||||
Box::new(Position(16.0, 500.0)),
|
Box::new(Position(16.0, 500.0)),
|
||||||
Box::new(Velocity(0.0, -600.0)),
|
Box::new(Velocity(0.0, -600.0)),
|
||||||
Box::new(Gravity),
|
Box::new(Gravity),
|
||||||
|
BIN
textures/clouds.png
Normal file
BIN
textures/clouds.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 987 B |
BIN
textures/mountains.png
Normal file
BIN
textures/mountains.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
Loading…
Reference in New Issue
Block a user