mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-23 16:21:33 +11:00
pull out constants
This commit is contained in:
parent
c55ff3f714
commit
900cd007df
|
@ -99,7 +99,7 @@ impl TagMap {
|
|||
pub const fn new(tags: &'static [(&'static str, Tag)]) -> TagMap {
|
||||
Self { tags }
|
||||
}
|
||||
pub const fn get(&'static self, tag: &str) -> Option<&'static Tag> {
|
||||
pub const fn try_get(&'static self, tag: &str) -> Option<&'static Tag> {
|
||||
let mut i = 0;
|
||||
while i < self.tags.len() {
|
||||
let s = self.tags[i].0;
|
||||
|
@ -112,6 +112,13 @@ impl TagMap {
|
|||
|
||||
None
|
||||
}
|
||||
pub const fn get(&'static self, tag: &str) -> &'static Tag {
|
||||
let t = self.try_get(tag);
|
||||
match t {
|
||||
Some(t) => t,
|
||||
None => panic!("The requested tag does not exist"),
|
||||
}
|
||||
}
|
||||
pub fn values(&self) -> impl Iterator<Item = &'static Tag> {
|
||||
self.tags.iter().map(|x| &x.1)
|
||||
}
|
||||
|
|
|
@ -2,10 +2,19 @@ use crate::TAG_MAP;
|
|||
|
||||
use super::{sfx::SfxPlayer, Entity, FixedNumberType, HatState, Level};
|
||||
use agb::{
|
||||
display::object::{ObjectController, Size},
|
||||
display::object::{ObjectController, Size, Tag},
|
||||
fixnum::Vector2D,
|
||||
};
|
||||
|
||||
const SLIME_IDLE: &Tag = TAG_MAP.get("Slime Idle");
|
||||
const SLIME_JUMP: &Tag = TAG_MAP.get("Slime Jump");
|
||||
const SLIME_SPLAT: &Tag = TAG_MAP.get("Slime splat");
|
||||
|
||||
const SNAIL_EMERGE: &Tag = TAG_MAP.get("Snail Emerge");
|
||||
const SNAIL_MOVE: &Tag = TAG_MAP.get("Snail Move");
|
||||
const SNAIL_DEATH: &Tag = TAG_MAP.get("Snail Death");
|
||||
const SNAIL_IDLE: &Tag = TAG_MAP.get("Snail Idle");
|
||||
|
||||
enum UpdateState {
|
||||
Nothing,
|
||||
KillPlayer,
|
||||
|
@ -155,8 +164,7 @@ impl<'a> Slime<'a> {
|
|||
SlimeState::Idle => {
|
||||
let offset = (timer / 16) as usize;
|
||||
|
||||
let tag = TAG_MAP.get("Slime Idle").unwrap();
|
||||
let frame = tag.get_animation_sprite(offset);
|
||||
let frame = SLIME_IDLE.get_animation_sprite(offset);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.enemy_info.entity.sprite.set_sprite(sprite);
|
||||
|
@ -196,8 +204,7 @@ impl<'a> Slime<'a> {
|
|||
self.enemy_info.entity.velocity = (0, 0).into();
|
||||
self.state = SlimeState::Idle;
|
||||
} else {
|
||||
let tag = TAG_MAP.get("Slime Jump").unwrap();
|
||||
let frame = tag.get_animation_sprite(offset);
|
||||
let frame = SLIME_JUMP.get_animation_sprite(offset);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.enemy_info.entity.sprite.set_sprite(sprite);
|
||||
|
@ -223,8 +230,7 @@ impl<'a> Slime<'a> {
|
|||
return UpdateState::Remove;
|
||||
}
|
||||
|
||||
let tag = TAG_MAP.get("Slime splat").unwrap();
|
||||
let frame = tag.get_animation_sprite(offset);
|
||||
let frame = SLIME_SPLAT.get_animation_sprite(offset);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.enemy_info.entity.sprite.set_sprite(sprite);
|
||||
|
@ -295,8 +301,7 @@ impl<'a> Snail<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
let tag = TAG_MAP.get("Snail Idle").unwrap();
|
||||
let frame = tag.get_animation_sprite(0);
|
||||
let frame = SNAIL_IDLE.get_animation_sprite(0);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.enemy_info.entity.sprite.set_sprite(sprite);
|
||||
|
@ -316,8 +321,7 @@ impl<'a> Snail<'a> {
|
|||
}
|
||||
self.enemy_info.entity.velocity = (0, 0).into();
|
||||
|
||||
let tag = TAG_MAP.get("Snail Emerge").unwrap();
|
||||
let frame = tag.get_animation_sprite(offset);
|
||||
let frame = SNAIL_EMERGE.get_animation_sprite(offset);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.enemy_info.entity.sprite.set_sprite(sprite);
|
||||
|
@ -339,8 +343,7 @@ impl<'a> Snail<'a> {
|
|||
|
||||
let offset = (timer - time) as usize / 8;
|
||||
|
||||
let tag = TAG_MAP.get("Snail Move").unwrap();
|
||||
let frame = tag.get_animation_sprite(offset);
|
||||
let frame = SNAIL_MOVE.get_animation_sprite(offset);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.enemy_info.entity.sprite.set_sprite(sprite);
|
||||
|
@ -374,8 +377,7 @@ impl<'a> Snail<'a> {
|
|||
self.state = SnailState::Idle(timer);
|
||||
}
|
||||
|
||||
let tag = TAG_MAP.get("Snail Emerge").unwrap();
|
||||
let frame = tag.get_animation_sprite(offset);
|
||||
let frame = SNAIL_EMERGE.get_animation_sprite(offset);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.enemy_info.entity.sprite.set_sprite(sprite);
|
||||
|
@ -396,17 +398,11 @@ impl<'a> Snail<'a> {
|
|||
|
||||
let offset = (timer - time) as usize / 4;
|
||||
let frame = if offset < 5 {
|
||||
TAG_MAP
|
||||
.get("Snail Emerge")
|
||||
.unwrap()
|
||||
.get_animation_sprite(5 - offset)
|
||||
SNAIL_EMERGE.get_animation_sprite(5 - offset)
|
||||
} else if offset == 5 {
|
||||
TAG_MAP.get("Snail Idle").unwrap().get_animation_sprite(0)
|
||||
SNAIL_IDLE.get_animation_sprite(0)
|
||||
} else if offset < 5 + 7 {
|
||||
TAG_MAP
|
||||
.get("Snail Death")
|
||||
.unwrap()
|
||||
.get_animation_sprite(offset - 5)
|
||||
SNAIL_DEATH.get_animation_sprite(offset - 5)
|
||||
} else {
|
||||
return UpdateState::Remove;
|
||||
};
|
||||
|
|
|
@ -85,7 +85,7 @@ agb::include_gfx!("gfx/tile_sheet.toml");
|
|||
use agb::{
|
||||
display::{
|
||||
background::BackgroundRegular,
|
||||
object::{Object, ObjectController, Sprite, TagMap},
|
||||
object::{Object, ObjectController, Sprite, Tag, TagMap},
|
||||
Priority, HEIGHT, WIDTH,
|
||||
},
|
||||
fixnum::{FixedNum, Vector2D},
|
||||
|
@ -93,9 +93,16 @@ use agb::{
|
|||
};
|
||||
|
||||
const SPRITE_TAGS: (&[Sprite], &TagMap) = agb::include_aseprite!("gfx/sprites.aseprite");
|
||||
const SPRITES: &[Sprite] = SPRITE_TAGS.0;
|
||||
const TAG_MAP: &TagMap = SPRITE_TAGS.1;
|
||||
|
||||
const WALKING: &Tag = TAG_MAP.get("Walking");
|
||||
const JUMPING: &Tag = TAG_MAP.get("Jumping");
|
||||
const FALLING: &Tag = TAG_MAP.get("Falling");
|
||||
const PLAYER_DEATH: &Tag = TAG_MAP.get("Player Death");
|
||||
const HAT_SPIN_1: &Tag = TAG_MAP.get("HatSpin");
|
||||
const HAT_SPIN_2: &Tag = TAG_MAP.get("HatSpin2");
|
||||
const HAT_SPIN_3: &Tag = TAG_MAP.get("HatSpin3");
|
||||
|
||||
type FixedNumberType = FixedNum<10>;
|
||||
|
||||
pub struct Entity<'a> {
|
||||
|
@ -107,9 +114,7 @@ pub struct Entity<'a> {
|
|||
|
||||
impl<'a> Entity<'a> {
|
||||
pub fn new(object: &'a ObjectController, collision_mask: Vector2D<u16>) -> Self {
|
||||
let dummy_sprite = object
|
||||
.get_sprite(TAG_MAP.get("Walking").unwrap().get_sprite(0))
|
||||
.unwrap();
|
||||
let dummy_sprite = object.get_sprite(WALKING.get_sprite(0)).unwrap();
|
||||
let mut sprite = object.get_object(dummy_sprite).unwrap();
|
||||
sprite.set_priority(Priority::P1);
|
||||
Entity {
|
||||
|
@ -350,16 +355,11 @@ impl<'a> Player<'a> {
|
|||
let mut wizard = Entity::new(controller, (6_u16, 14_u16).into());
|
||||
let mut hat = Entity::new(controller, (6_u16, 6_u16).into());
|
||||
|
||||
wizard.sprite.set_sprite(
|
||||
controller
|
||||
.get_sprite(TAG_MAP.get("Walking").unwrap().get_sprite(0))
|
||||
.unwrap(),
|
||||
);
|
||||
hat.sprite.set_sprite(
|
||||
controller
|
||||
.get_sprite(TAG_MAP.get("HatSpin").unwrap().get_sprite(0))
|
||||
.unwrap(),
|
||||
);
|
||||
wizard
|
||||
.sprite
|
||||
.set_sprite(controller.get_sprite(HAT_SPIN_1.get_sprite(0)).unwrap());
|
||||
hat.sprite
|
||||
.set_sprite(controller.get_sprite(HAT_SPIN_1.get_sprite(0)).unwrap());
|
||||
|
||||
wizard.sprite.show();
|
||||
hat.sprite.show();
|
||||
|
@ -464,8 +464,7 @@ impl<'a> Player<'a> {
|
|||
let offset = (ping_pong(timer / 16, 4)) as usize;
|
||||
self.wizard_frame = offset as u8;
|
||||
|
||||
let walk = TAG_MAP.get("Walking").unwrap();
|
||||
let frame = walk.get_animation_sprite(offset);
|
||||
let frame = WALKING.get_animation_sprite(offset);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.wizard.sprite.set_sprite(sprite);
|
||||
|
@ -475,8 +474,7 @@ impl<'a> Player<'a> {
|
|||
// going up
|
||||
self.wizard_frame = 5;
|
||||
|
||||
let walk = TAG_MAP.get("Jumping").unwrap();
|
||||
let frame = walk.get_animation_sprite(0);
|
||||
let frame = JUMPING.get_animation_sprite(0);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.wizard.sprite.set_sprite(sprite);
|
||||
|
@ -491,8 +489,7 @@ impl<'a> Player<'a> {
|
|||
|
||||
self.wizard_frame = 0;
|
||||
|
||||
let walk = TAG_MAP.get("Falling").unwrap();
|
||||
let frame = walk.get_animation_sprite(offset);
|
||||
let frame = FALLING.get_animation_sprite(offset);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.wizard.sprite.set_sprite(sprite);
|
||||
|
@ -504,9 +501,9 @@ impl<'a> Player<'a> {
|
|||
}
|
||||
|
||||
let hat_base_tile = match self.num_recalls {
|
||||
0 => TAG_MAP.get("HatSpin").unwrap(),
|
||||
1 => TAG_MAP.get("HatSpin2").unwrap(),
|
||||
_ => TAG_MAP.get("HatSpin3").unwrap(),
|
||||
0 => HAT_SPIN_1,
|
||||
1 => HAT_SPIN_2,
|
||||
_ => HAT_SPIN_3,
|
||||
};
|
||||
|
||||
match self.facing {
|
||||
|
@ -689,8 +686,7 @@ impl<'a, 'b, 'c> PlayingLevel<'a, 'b> {
|
|||
fn dead_update(&mut self, controller: &'a ObjectController) -> bool {
|
||||
self.timer += 1;
|
||||
|
||||
let tag = TAG_MAP.get("Player Death").unwrap();
|
||||
let frame = tag.get_animation_sprite(self.timer as usize / 8);
|
||||
let frame = PLAYER_DEATH.get_animation_sprite(self.timer as usize / 8);
|
||||
let sprite = controller.get_sprite(frame).unwrap();
|
||||
|
||||
self.player.wizard.velocity += (0.into(), FixedNumberType::new(1) / 32).into();
|
||||
|
|
Loading…
Reference in a new issue