rustic_mountain_core/objects/
key.rs1use 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 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}