rustic_mountain_core/objects/
key.rs

1use std::cell::RefCell;
2use std::rc::Rc;
3
4use crate::{structures::*, utils::*, Celeste};
5use serde::{Deserialize, Serialize};
6
7#[derive(Serialize, Deserialize)]
8pub struct Key {}
9impl Key {
10    pub fn init(_celeste: &mut Celeste, x: f32, y: f32) -> Object {
11        Object {
12            pos: Vector { x, y },
13            spd: Vector { x: 0.0, y: 0.0 },
14            rem: Vector { x: 0.0, y: 0.0 },
15            spr: 22,
16            hitbox: Rectangle {
17                x: 0.0,
18                y: 0.0,
19                w: 8.0,
20                h: 8.0,
21            },
22            flip: FlipState { x: false, y: false },
23            collidable: true,
24            solids: false,
25            obj_type: ObjectType::Key(Rc::new(RefCell::new(Self {}))),
26            draw: ObjFunc(Self::draw),
27            update: ObjFunc(Self::update),
28            name: "Key",
29        }
30    }
31    pub fn update(obj: &mut Object, celeste: &mut Celeste) {
32        obj.spr = (9.5 + sin(celeste.frames as f32 / 30.0)).floor() as u8;
33        if celeste.frames == 18 {
34            obj.flip.x = !obj.flip.x;
35        }
36        if obj.check(celeste, "Player", 0.0, 0.0).is_some() {
37            // sfx shit
38            celeste.has_key = true;
39            obj.destroy_self(celeste);
40        }
41    }
42    pub fn draw(obj: &mut Object, celeste: &mut Celeste) {
43        obj.draw_sprite(celeste);
44    }
45}