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 {
if !self.visible {
return Ok(());
}
// none
let weap_x = self.weapon_x_pos as f32;
let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, "TextBox")?;

View File

@ -60,7 +60,7 @@ impl LiveDebugger {
.resizable(false)
.collapsed(true, 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, || {
ui.text(format!(
"Player position: ({:.1},{:.1}), velocity: ({:.1},{:.1})",
@ -114,6 +114,15 @@ impl LiveDebugger {
if ui.button(im_str!("Flags"), [0.0, 0.0]) {
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 {

View File

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

View File

@ -95,7 +95,6 @@ impl GameProfile {
}
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.y = self.pos_y as isize;
@ -108,6 +107,8 @@ impl GameProfile {
game_scene.player2 = game_scene.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 {

View File

@ -110,6 +110,20 @@ impl GameScene {
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 {
let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, &self.tex_background_name)?;
let scale = state.scale;
@ -965,6 +979,8 @@ impl GameScene {
}
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_player2.has_player2 = self.hud_player1.has_player2;
@ -1051,7 +1067,7 @@ impl GameScene {
match self.frame.update_target {
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.y - self.player2.y) < 200 * 0x200 {
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);
}
if self.player1.controller.trigger_next_weapon() {
state.sound_manager.play_sfx(4);
self.inventory_player1.next_weapon();
self.hud_player1.weapon_x_pos = 32;
if self.player1.cond.alive() {
if self.player1.controller.trigger_next_weapon() {
state.sound_manager.play_sfx(4);
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() {
state.sound_manager.play_sfx(4);
self.inventory_player1.prev_weapon();
self.hud_player1.weapon_x_pos = 0;
}
if self.player2.cond.alive() {
if self.player2.controller.trigger_next_weapon() {
state.sound_manager.play_sfx(4);
self.inventory_player2.next_weapon();
self.hud_player2.weapon_x_pos = 32;
}
if self.player2.controller.trigger_next_weapon() {
state.sound_manager.play_sfx(4);
self.inventory_player2.next_weapon();
self.hud_player2.weapon_x_pos = 32;
}
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;
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))?;
@ -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.player1.target_x = self.player1.x;
self.player1.target_y = self.player1.y;
self.frame.target_x = self.player1.target_x;
self.frame.target_y = self.player1.target_y;
self.frame.immediate_update(state, &self.stage);
self.player2.appearance = PlayerAppearance::YellowQuote;
Ok(())
}
@ -1375,7 +1392,7 @@ impl Scene for GameScene {
self.hud_player2.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 = 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 {
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.y = 8 * 16 * 0x200;
self.fade_state = FadeState::Hidden;