Files
Hippolyzer/addon_examples/backwards.py
Salad Dais fd747c9615 Switch to importing hippolyzer.lib.base.templates
Should help deal with automatic template reloading issues since
mtime wasn't changing on `lib.proxy.templates`.
2021-06-01 08:24:17 +00:00

57 lines
2.1 KiB
Python

"""
All buttons make you go backwards.
Except for backward, which makes you go left.
"""
from hippolyzer.lib.base.templates import AgentControlFlags
from hippolyzer.lib.proxy.message import ProxiedMessage
from hippolyzer.lib.proxy.addon_utils import BaseAddon
from hippolyzer.lib.proxy.region import ProxiedRegion
from hippolyzer.lib.proxy.sessions import Session
NUDGE_MASK = sum(x for x in AgentControlFlags if "NUDGE" in x.name)
FAST_MASK = sum(x for x in AgentControlFlags if "FAST" in x.name)
DIR_MASK = sum(x for x in AgentControlFlags if
any(x.name.endswith(y) for y in ("_POS", "_NEG")))
BACK_MASK = (AgentControlFlags.AT_NEG | AgentControlFlags.NUDGE_AT_NEG)
class BackwardsAddon(BaseAddon):
def handle_lludp_message(self, session: Session, region: ProxiedRegion, message: ProxiedMessage):
if message.name == "AgentUpdate":
agent_data_block = message["AgentData"][0]
flags: AgentControlFlags = agent_data_block.deserialize_var("ControlFlags")
# Don't want these at all.
flags &= ~(AgentControlFlags.TURN_LEFT | AgentControlFlags.TURN_RIGHT)
any_nudge = bool(flags & NUDGE_MASK)
any_fast = bool(flags & FAST_MASK)
dir_vals = flags & DIR_MASK
going_back = bool(flags & BACK_MASK)
other_dir_vals = dir_vals & ~BACK_MASK
new_flags = AgentControlFlags(0)
# back -> left
if going_back:
if any_nudge:
new_flags |= AgentControlFlags.NUDGE_LEFT_POS
else:
new_flags |= AgentControlFlags.LEFT_POS
if any_fast:
new_flags |= AgentControlFlags.FAST_LEFT
# anything else -> back
if other_dir_vals:
if any_nudge:
new_flags |= AgentControlFlags.NUDGE_AT_NEG
else:
new_flags |= AgentControlFlags.AT_NEG
if any_fast:
new_flags |= AgentControlFlags.FAST_AT
agent_data_block["ControlFlags"] = new_flags
addons = [BackwardsAddon()]