1
0
Fork 0
mirror of https://github.com/doukutsu-rs/doukutsu-rs synced 2024-09-20 17:18:50 +00:00

hide player2 by default, add/drop button in debugger

This commit is contained in:
Alula 2020-12-04 18:37:47 +01:00
parent abc238dae4
commit 0cb6b91198
No known key found for this signature in database
GPG key ID: 3E00485503A1D8BA
6 changed files with 59 additions and 27 deletions

View file

@ -108,6 +108,10 @@ impl GameEntity<(&Player, &Inventory)> for HUD {
} }
fn draw(&self, state: &mut SharedGameState, ctx: &mut Context, frame: &Frame) -> GameResult { fn draw(&self, state: &mut SharedGameState, ctx: &mut Context, frame: &Frame) -> GameResult {
if !self.visible {
return Ok(());
}
// none // none
let weap_x = self.weapon_x_pos as f32; let weap_x = self.weapon_x_pos as f32;
let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, "TextBox")?; let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, "TextBox")?;

View file

@ -60,7 +60,7 @@ impl LiveDebugger {
.resizable(false) .resizable(false)
.collapsed(true, Condition::FirstUseEver) .collapsed(true, Condition::FirstUseEver)
.position([5.0, 5.0], Condition::FirstUseEver) .position([5.0, 5.0], Condition::FirstUseEver)
.size([380.0, 170.0], Condition::FirstUseEver) .size([400.0, 170.0], Condition::FirstUseEver)
.build(ui, || { .build(ui, || {
ui.text(format!( ui.text(format!(
"Player position: ({:.1},{:.1}), velocity: ({:.1},{:.1})", "Player position: ({:.1},{:.1}), velocity: ({:.1},{:.1})",
@ -114,6 +114,15 @@ impl LiveDebugger {
if ui.button(im_str!("Flags"), [0.0, 0.0]) { if ui.button(im_str!("Flags"), [0.0, 0.0]) {
self.flags_visible = !self.flags_visible; self.flags_visible = !self.flags_visible;
} }
ui.same_line(0.0);
if game_scene.player2.cond.alive() {
if ui.button(im_str!("Drop Player 2"), [0.0, 0.0]) {
game_scene.drop_player2();
}
} else if ui.button(im_str!("Add Player 2"), [0.0, 0.0]) {
game_scene.add_player2();
}
}); });
if self.map_selector_visible { if self.map_selector_visible {

View file

@ -107,7 +107,7 @@ impl Player {
prev_y: 0, prev_y: 0,
life: constants.my_char.life, life: constants.my_char.life,
max_life: constants.my_char.max_life, max_life: constants.my_char.max_life,
cond: Condition(0x80), cond: Condition(0),
flags: Flag(0), flags: Flag(0),
equip: Equipment(0), equip: Equipment(0),
direction: Direction::Right, direction: Direction::Right,

View file

@ -95,7 +95,6 @@ impl GameProfile {
} }
game_scene.player1.equip.0 = self.equipment as u16; game_scene.player1.equip.0 = self.equipment as u16;
game_scene.player1.cond.0 = 0x80;
game_scene.player1.x = self.pos_x as isize; game_scene.player1.x = self.pos_x as isize;
game_scene.player1.y = self.pos_y as isize; game_scene.player1.y = self.pos_y as isize;
@ -108,6 +107,8 @@ impl GameProfile {
game_scene.player2 = game_scene.player1.clone(); game_scene.player2 = game_scene.player1.clone();
game_scene.inventory_player2 = game_scene.inventory_player1.clone(); game_scene.inventory_player2 = game_scene.inventory_player1.clone();
game_scene.player1.cond.0 = 0x80;
} }
pub fn dump(state: &mut SharedGameState, game_scene: &mut GameScene) -> GameProfile { pub fn dump(state: &mut SharedGameState, game_scene: &mut GameScene) -> GameProfile {

View file

@ -110,6 +110,20 @@ impl GameScene {
self.map_name_counter = ticks; self.map_name_counter = ticks;
} }
pub fn add_player2(&mut self) {
self.player2.cond.set_alive(true);
self.player2.cond.set_hidden(self.player1.cond.hidden());
self.player2.appearance = PlayerAppearance::YellowQuote;
self.player2.x = self.player1.x;
self.player2.y = self.player1.y;
self.player2.vel_x = self.player1.vel_x;
self.player2.vel_y = self.player1.vel_y;
}
pub fn drop_player2(&mut self) {
self.player2.cond.set_alive(false);
}
fn draw_background(&self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult { fn draw_background(&self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult {
let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, &self.tex_background_name)?; let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, &self.tex_background_name)?;
let scale = state.scale; let scale = state.scale;
@ -965,6 +979,8 @@ impl GameScene {
} }
fn tick_world(&mut self, state: &mut SharedGameState) -> GameResult { fn tick_world(&mut self, state: &mut SharedGameState) -> GameResult {
self.hud_player1.visible = self.player1.cond.alive();
self.hud_player2.visible = self.player2.cond.alive();
self.hud_player1.has_player2 = !self.player2.cond.hidden(); self.hud_player1.has_player2 = !self.player2.cond.hidden();
self.hud_player2.has_player2 = self.hud_player1.has_player2; self.hud_player2.has_player2 = self.hud_player1.has_player2;
@ -1051,7 +1067,7 @@ impl GameScene {
match self.frame.update_target { match self.frame.update_target {
UpdateTarget::Player => { UpdateTarget::Player => {
if !self.player2.cond.hidden() if self.player2.cond.alive() && !self.player2.cond.hidden()
&& abs(self.player1.x - self.player2.x) < 240 * 0x200 && abs(self.player1.x - self.player2.x) < 240 * 0x200
&& abs(self.player1.y - self.player2.y) < 200 * 0x200 { && abs(self.player1.y - self.player2.y) < 200 * 0x200 {
self.frame.target_x = (self.player1.target_x * 2 + self.player2.target_x) / 3; self.frame.target_x = (self.player1.target_x * 2 + self.player2.target_x) / 3;
@ -1094,28 +1110,32 @@ impl GameScene {
weapon.shoot_bullet(&self.player2, &mut self.bullet_manager, state); weapon.shoot_bullet(&self.player2, &mut self.bullet_manager, state);
} }
if self.player1.controller.trigger_next_weapon() { if self.player1.cond.alive() {
state.sound_manager.play_sfx(4); if self.player1.controller.trigger_next_weapon() {
self.inventory_player1.next_weapon(); state.sound_manager.play_sfx(4);
self.hud_player1.weapon_x_pos = 32; self.inventory_player1.next_weapon();
self.hud_player1.weapon_x_pos = 32;
}
if self.player1.controller.trigger_prev_weapon() {
state.sound_manager.play_sfx(4);
self.inventory_player1.prev_weapon();
self.hud_player1.weapon_x_pos = 0;
}
} }
if self.player1.controller.trigger_prev_weapon() { if self.player2.cond.alive() {
state.sound_manager.play_sfx(4); if self.player2.controller.trigger_next_weapon() {
self.inventory_player1.prev_weapon(); state.sound_manager.play_sfx(4);
self.hud_player1.weapon_x_pos = 0; self.inventory_player2.next_weapon();
} self.hud_player2.weapon_x_pos = 32;
}
if self.player2.controller.trigger_next_weapon() { if self.player2.controller.trigger_prev_weapon() {
state.sound_manager.play_sfx(4); state.sound_manager.play_sfx(4);
self.inventory_player2.next_weapon(); self.inventory_player2.prev_weapon();
self.hud_player2.weapon_x_pos = 32; self.hud_player2.weapon_x_pos = 0;
} }
if self.player2.controller.trigger_prev_weapon() {
state.sound_manager.play_sfx(4);
self.inventory_player2.prev_weapon();
self.hud_player2.weapon_x_pos = 0;
} }
self.hud_player1.tick(state, (&self.player1, &self.inventory_player1))?; self.hud_player1.tick(state, (&self.player1, &self.inventory_player1))?;
@ -1229,15 +1249,12 @@ impl Scene for GameScene {
} }
} }
self.hud_player1.visible = true;
self.hud_player2.visible = true;
self.npc_map.boss_map.boss_type = self.stage.data.boss_no as u16; self.npc_map.boss_map.boss_type = self.stage.data.boss_no as u16;
self.player1.target_x = self.player1.x; self.player1.target_x = self.player1.x;
self.player1.target_y = self.player1.y; self.player1.target_y = self.player1.y;
self.frame.target_x = self.player1.target_x; self.frame.target_x = self.player1.target_x;
self.frame.target_y = self.player1.target_y; self.frame.target_y = self.player1.target_y;
self.frame.immediate_update(state, &self.stage); self.frame.immediate_update(state, &self.stage);
self.player2.appearance = PlayerAppearance::YellowQuote;
Ok(()) Ok(())
} }
@ -1375,7 +1392,7 @@ impl Scene for GameScene {
self.hud_player2.draw(state, ctx, &self.frame)?; self.hud_player2.draw(state, ctx, &self.frame)?;
self.boss_life_bar.draw(state, ctx, &self.frame)?; self.boss_life_bar.draw(state, ctx, &self.frame)?;
if !self.player2.cond.hidden() { if self.player2.cond.alive() && !self.player2.cond.hidden() {
let y = interpolate_fix9_scale(self.player2.prev_y - self.frame.prev_y, self.player2.y - self.frame.y, state.frame_time); let y = interpolate_fix9_scale(self.player2.prev_y - self.frame.prev_y, self.player2.y - self.frame.y, state.frame_time);
let y = clamp(y, 8.0, state.canvas_size.1 - 8.0 - state.font.line_height(&state.constants)); let y = clamp(y, 8.0, state.canvas_size.1 - 8.0 - state.font.line_height(&state.constants));

View file

@ -204,6 +204,7 @@ impl SharedGameState {
pub fn start_new_game(&mut self, ctx: &mut Context) -> GameResult { pub fn start_new_game(&mut self, ctx: &mut Context) -> GameResult {
let mut next_scene = GameScene::new(self, ctx, 13)?; let mut next_scene = GameScene::new(self, ctx, 13)?;
next_scene.player1.cond.set_alive(true);
next_scene.player1.x = 10 * 16 * 0x200; next_scene.player1.x = 10 * 16 * 0x200;
next_scene.player1.y = 8 * 16 * 0x200; next_scene.player1.y = 8 * 16 * 0x200;
self.fade_state = FadeState::Hidden; self.fade_state = FadeState::Hidden;