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:
parent
abc238dae4
commit
0cb6b91198
|
@ -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")?;
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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));
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue