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