Week 72: Commands, wandering, and power-line connections

An animated GIF of a recording from Meteor Power showing two bots moving all around the level to build and connect stations.
Commands are now stored in a global queue,
and a bot moves to the next command when finishing an earlier command.

tl;dr: Last week I overhauled the bot-command system, I added wander behavior for idle bots, I added a dynamic speed-multiplier for specific behaviors, and I fixed a long list of small issues with power-line connections.

What happened last week?


  • Overhauled the bot-command system.
    • Fixed many command-transition issues.
    • Implemented missing commands.
    • Refactored commands to use a global queue.
  • Added a wander behavior for idle bots.
  • Added support for applying a dynamic speed-multiplier for specific behaviors.
  • Fixed a long list of small issues with the logic for power-line connection updates.

Laundry list

  • Commands system:
    • Fix station and bot recycling.
    • Add support for entity-instance-specific command disablement.
    • Add support for station and wire repair commands.
    • Replace obsolete BotCommand enum with Commands enum.
    • Disable bot-stop command when idle.
    • Fix an issue where bot commands would fail if they had interrupted a previous command when they were triggered.
    • Fix an issue with LevelControls not correctly switching-off disabled state.
    • Fix an issue with run-wire overlay-buttons not always switching back-and-forth with cancel buttons correctly.
    • Refactor command system to use a new global command-queue.
    • Clean-up some bot-command-transition logic.
    • Automatically select the closest idle bot when starting a new command.
    • Fix bot idleness tracking.
    • Consolidate _clear_command_state with _cancel_command and fix some edge-cases with how/when commands were being released.
    • Fix an issue with navigation_state.triggered_by_player being reset before trying to access it.
  • Wander-when-idle behavior:
    • Fix a bug in WanderBehavior that could cause movement to always be rightward.
    • Update player-navigation logic to not assume that PlayerNavigationBehavior will either always be enabled or disabled.
    • Have bots wander around a bit when idle.
    • Fix a long-standing issue with an intra-surface edge-calculation using an invalid stopping distance that wasn't accounting for max-speed limits.
    • This was causing characters to sometimes suddenly teleport at the end of a movement.
    • Prevent exclamation-mark from showing each time the wander behavior triggers new movement.
    • Fix an issue with WanderBehavior not correctly detecting when the character is already at the edge of the movement boundary.
    • Fix issues with behavior transitions when opening and closing the radial-menu and selecting the player for point-and-click navigation.
    • Fix bots to correctly resume wandering after navigating to a target.
    • Fix initial bot wander.
  • Speed-multipliers for specific behaviors:
    • Design a new proxy pattern to support using a modified version of MovementParameters, which greatly reduces the amount of logic I need to change to support non-global changes to speed-multipliers.
    • Write and publish a deep-dive devlog post on a proxy pattern for Godot with read-only reflection.
      • https://devlog.levi.dev/2022/05/an-easy-godot-proxy-pattern-with-read.html
    • Update get_direct_property_map to work for more types of objects.
    • Create a read-only proxy for MovementParameters.
    • Use the MovementParameters proxy to apply a movement-speed multiplier depending on the current behavior.
    • Create a read-only proxy for PlatformGraph.
      • This in turn references the new character-instance-specific read-only MovementParameters proxy.
  • Power-line connection logic:
    • Fix an issue with wires being removed as soon as they're connected to the second station.
    • Update station highlights when connected/disconnected to the command-center.
    • Configure better wire-attachment positions per station.
    • Update the command-center to use 4 separate wire-attachment positions.
    • Don't select station when clicking on run-wire as the second station.
    • Add a connection-status message to station info-panels.
    • Fix ability to tap on the station, rather than its overlay button, in order to select the second station for running a wire.
    • Fix station/bot/wire connection updates for the many possible edge-cases of adding and removing entities.
    • Fix an issue with command-center-connection events not always firing.
    • Fix an issue with not being able to select the command-center second when running a wire.
    • Fix an issue with deselecting the first-selected station when selecting the second station for running a wire.
    • Fix an issue with overlay buttons not resetting back to "run-wire" from "cancel" when resetting station selections.
    • Update the info-panel when a station's is-connected-to-command-center status changes.
  • Miscellaneous:
    • Fix an issue with closing radial-menus when stations/bots are destroyed.
    • Fix an issue with default stats values when loading.
    • Rename enums to not be plural.
    • Fix an issue with LevelControl disabled mode false-positives.
    • Add support for getting the bounds of a ShapedLevelControl.
    • Have bots walk to the side of the command-center when they are created.
    • Fix health label z-index.
    • Rename DefaultBehavior to StaticBehavior.
    • Rename ChoreographerBehavior to NavigationOverrideBehavior.
    • Move stop_on_surface logic from Bot to SurfacerCharacter.
    • Fix solar-collector outlining.
    • Show station highlights at the start.
    • Update station art.
    • Add a color-override parameter to ScaffolderPanelContainer.
    • Fix support for disabling the welcome-panel.
    • Remove obsolete bot-powered-down logic.
    • Remove obsolete right-click-to-cancel logic.
    • Remove ability to select bot for player-nav by releasing touch on the radial-menu center.
    • Fix regressions with HUD panels capturing mouse events.
    • Trigger HUD fade when opening the radial menu.
    • Rename Command to CommandType.
    • Rename BotCommand to Command.
    • Review linear algebra and 3D math.
      • https://gamemath.com/book/
    • Create concept art for line-runner and barrier bots.
    • Start sketching pixel-art for other character concepts.

What's next?

  • I'm going to take some time this week to review C++ and 3D techniques, and to explore the Unreal game engine.
  • I'll also probably create some new art for additional bot and station types.

🎉 Cheers!

This is a simple icon representing my sabbatical.