Skip to content

Commit

Permalink
[game] Call Use for other obj types
Browse files Browse the repository at this point in the history
  • Loading branch information
Dmytro Lysai authored and pingw33n committed Jun 1, 2020
1 parent 04784f0 commit 8bf625a
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 7 deletions.
3 changes: 3 additions & 0 deletions src/asset/proto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ use crate::util::{enum_iter, EnumIter};
/// "The doorway seems to be blocked."
pub const MSG_DOORWAY_SEEMS_TO_BE_BLOCKED: MessageId = 597;

/// "You see: %s."
pub const MSG_YOU_SEE_X: MessageId = 480;

#[derive(Debug)]
pub struct Proto {
id: ProtoId,
Expand Down
53 changes: 46 additions & 7 deletions src/game/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -688,20 +688,59 @@ impl GameState {
// return 0;
// }

let used_kind = {
let (used_kind, script) = {
let world = self.world.borrow();
let usedo = world.objects().get(used);
if let Some(ExactEntityKind::Scenery(v)) = usedo.proto().map(|p| p.kind()) {
v
} else {
return;
}
let used_kind = unwrap_or_return!(
usedo.proto().map(|p| p.kind()),
Some(ExactEntityKind::Scenery(v)) => v);
(used_kind, usedo.script)
};

if used_kind == SceneryKind::Door {
self.use_door(user, used, ui);
} else {
// TODO
let world = &mut self.world.borrow_mut();

let script_overrides = if let Some((sid, _)) = script {
self.scripts.execute_predefined_proc(sid, PredefinedProc::Use,
&mut script::Context {
world,
sequencer: &mut self.sequencer,
dialog: &mut self.dialog,
ui,
message_panel: self.message_panel,
map_id: self.map_id.unwrap(),
source_obj: Some(user),
target_obj: Some(used),
}).unwrap().assert_no_suspend().script_overrides
} else {
false
};
let script_overrides = if !script_overrides {
match used_kind {
SceneryKind::Door => unreachable!(),
// TODO
| SceneryKind::Stairs
| SceneryKind::Elevator
| SceneryKind::LadderDown
| SceneryKind::LadderUp
=> {
warn!("{:?} use is not implemented", used_kind);
false
}
SceneryKind::Misc => false,
}
} else {
false
};
if !script_overrides && user == world.dude_obj().unwrap() {
if let Some(obj_name) = world.object_name(used) {
let msg = &self.proto_db.messages().get(MSG_YOU_SEE_X).unwrap().text;
let msg = sprintf(msg, &[&obj_name]);
self.push_message(&msg, ui);
}
}
}
}

Expand Down
9 changes: 9 additions & 0 deletions src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,13 @@ macro_rules! enum_len {
($ty:ty) => {{
<$ty as ::enum_map::Enum<()>>::POSSIBLE_VALUES
}};
}

macro_rules! unwrap_or_return {
($expression:expr, $pattern:pat => $res:expr) => {
match $expression {
$pattern => $res,
_ => return,
}
}
}

0 comments on commit 8bf625a

Please sign in to comment.