Skip to content

Commit

Permalink
Update parsing of flag alerts.
Browse files Browse the repository at this point in the history
  • Loading branch information
vikpe committed May 21, 2024
1 parent 01de160 commit d62a036
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 21 deletions.
74 changes: 54 additions & 20 deletions src/fragfile.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use anyhow::{anyhow as e, Result};

use crate::fragfile_messages::{
UNKNOWN_TEAMKILL_X, WILDCARD, X_ASSIST_RETURN_FLAG, X_CAPTURE_FLAG, X_DEATH,
X_DEFEND_CARRIER_VS_AGGRESSIVE, X_DEFEND_FLAG, X_FRAG_Y, X_RETURN_FLAG, X_SUICIDE,
X_SUICIDE_BY_WEAPON, X_TEAMKILL_UNKNOWN, Y_FRAG_X,
UNKNOWN_TEAMKILL_X, WILDCARD, X_CAPTURE_FLAG, X_DEATH, X_DEFEND_CARRIER,
X_DEFEND_CARRIER_VS_AGGRESSIVE, X_DEFEND_FLAG, X_FRAG_Y, X_RETURN_FLAG, X_RETURN_FLAG_ASSIST,
X_SUICIDE, X_SUICIDE_BY_WEAPON, X_TEAMKILL_UNKNOWN, Y_FRAG_X,
};

#[derive(Debug, PartialEq, Eq)]
Expand All @@ -21,9 +21,10 @@ pub enum Event {
pub enum FlagEvent {
Capture,
Defend,
DefendVsAggressive,
Return,
ReturnAssist,
DefendCarrier,
DefendCarrierVsAggressive,
ReturnFlag,
ReturnFlagAssist,
}

impl TryFrom<&str> for Event {
Expand Down Expand Up @@ -67,28 +68,33 @@ impl TryFrom<&str> for Event {
player: value.trim_end_matches(p).to_string(),
event: FlagEvent::Capture,
});
} else if let Some(p) = X_ASSIST_RETURN_FLAG.iter().find(|&p| value.ends_with(p)) {
} else if let Some(p) = X_RETURN_FLAG_ASSIST.iter().find(|&p| value.ends_with(p)) {
return Ok(Event::FlagAlert {
player: value.trim_end_matches(p).to_string(),
event: FlagEvent::ReturnAssist,
event: FlagEvent::ReturnFlagAssist,
});
} else if let Some(p) = X_RETURN_FLAG.iter().find(|&p| value.ends_with(p)) {
return Ok(Event::FlagAlert {
player: value.trim_end_matches(p).to_string(),
event: FlagEvent::Return,
event: FlagEvent::ReturnFlag,
});
} else if let Some(p) = X_DEFEND_FLAG.iter().find(|&p| value.ends_with(p)) {
return Ok(Event::FlagAlert {
player: value.trim_end_matches(p).to_string(),
event: FlagEvent::Defend,
});
} else if let Some(p) = X_DEFEND_CARRIER.iter().find(|&p| value.ends_with(p)) {
return Ok(Event::FlagAlert {
player: value.trim_end_matches(p).to_string(),
event: FlagEvent::DefendCarrier,
});
} else if let Some(p) = X_DEFEND_CARRIER_VS_AGGRESSIVE
.iter()
.find(|&p| value.ends_with(p))
{
return Ok(Event::FlagAlert {
player: value.trim_end_matches(p).to_string(),
event: FlagEvent::DefendVsAggressive,
event: FlagEvent::DefendCarrierVsAggressive,
});
}

Expand Down Expand Up @@ -288,42 +294,42 @@ mod tests {
"FOO gets an assist for returning his flag!",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::ReturnAssist,
event: FlagEvent::ReturnFlagAssist,
}),
),
(
"FOO gets an assist for fragging the flag carrier!",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::ReturnAssist,
event: FlagEvent::ReturnFlagAssist,
}),
),
(
"FOO returned the RED flag!",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::Return,
event: FlagEvent::ReturnFlag,
}),
),
(
"FOO returned the ÒÅÄ flag!",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::Return,
event: FlagEvent::ReturnFlag,
}),
),
(
"FOO returned the BLUE flag!",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::Return,
event: FlagEvent::ReturnFlag,
}),
),
(
"FOO returned the ÂÌÕÅ flag!",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::Return,
event: FlagEvent::ReturnFlag,
}),
),
(
Expand All @@ -347,32 +353,60 @@ mod tests {
event: FlagEvent::Defend,
}),
),
(
"FOO defends RED's flag carrier",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::DefendCarrier,
}),
),
(
"FOO defends ÒÅÄ's flag carrier",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::DefendCarrier,
}),
),
(
"FOO defends BLUE's flag carrier",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::DefendCarrier,
}),
),
(
"FOO defends ÂÌÕÅ's flag carrier",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::DefendCarrier,
}),
),
(
"FOO defends RED's flag carrier against an aggressive enemy",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::DefendVsAggressive,
event: FlagEvent::DefendCarrierVsAggressive,
}),
),
(
"FOO defends ÒÅÄ's flag carrier against an aggressive enemy",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::DefendVsAggressive,
event: FlagEvent::DefendCarrierVsAggressive,
}),
),
(
"FOO defends BLUE's flag carrier against an aggressive enemy",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::DefendVsAggressive,
event: FlagEvent::DefendCarrierVsAggressive,
}),
),
(
"FOO defends ÂÌÕÅ's flag carrier against an aggressive enemy",
Ok(Event::FlagAlert {
player: "FOO".to_string(),
event: FlagEvent::DefendVsAggressive,
event: FlagEvent::DefendCarrierVsAggressive,
}),
),
]);
Expand Down
9 changes: 8 additions & 1 deletion src/fragfile_messages.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ pub const X_CAPTURE_FLAG: [&str; 4] = [
" captured the ÂÌÕÅ flag!",
];

pub const X_ASSIST_RETURN_FLAG: [&str; 2] = [
pub const X_RETURN_FLAG_ASSIST: [&str; 2] = [
" gets an assist for returning his flag!",
" gets an assist for fragging the flag carrier!",
];
Expand All @@ -119,6 +119,13 @@ pub const X_DEFEND_FLAG: [&str; 4] = [
" defends the ÂÌÕÅ flag",
];

pub const X_DEFEND_CARRIER: [&str; 4] = [
" defends RED's flag carrier",
" defends ÒÅÄ's flag carrier",
" defends BLUE's flag carrier",
" defends ÂÌÕÅ's flag carrier",
];

pub const X_DEFEND_CARRIER_VS_AGGRESSIVE: [&str; 4] = [
" defends RED's flag carrier against an aggressive enemy",
" defends ÒÅÄ's flag carrier against an aggressive enemy",
Expand Down

0 comments on commit d62a036

Please sign in to comment.