aboutsummaryrefslogtreecommitdiff
path: root/src/ecs/char_controller.moon
diff options
context:
space:
mode:
authorAlex Pickering <alex@cogarr.net>2026-02-01 13:14:32 -0600
committerAlexander M Pickering <alex@cogarr.net>2026-02-01 13:14:32 -0600
commit3a975db66a3711f34e8b64bb27a8eaca79fdeca9 (patch)
treefcc12f8f9d638ff575c1963796de76b7628854b4 /src/ecs/char_controller.moon
downloadggj26-3a975db66a3711f34e8b64bb27a8eaca79fdeca9.tar.gz
ggj26-3a975db66a3711f34e8b64bb27a8eaca79fdeca9.tar.bz2
ggj26-3a975db66a3711f34e8b64bb27a8eaca79fdeca9.zip
Initial commitHEADmaster
Diffstat (limited to 'src/ecs/char_controller.moon')
-rw-r--r--src/ecs/char_controller.moon70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/ecs/char_controller.moon b/src/ecs/char_controller.moon
new file mode 100644
index 0000000..e5e3db7
--- /dev/null
+++ b/src/ecs/char_controller.moon
@@ -0,0 +1,70 @@
+ScriptComponent = require("ecs.script")
+win = require("window")
+log = require("log")
+world = require("world")
+
+class CharacterControllerComponent extends ScriptComponent
+ new: (name, properties, netc_name) =>
+ log.info("Creating new character controller", {"ecs"})
+ properties.script = () ->
+ --log.info("Character controller running", {"ecs"})
+ any_change = false
+ assert(@net.__class.__name == "ClientNetworkedComponent", "Wrong net component, was a " .. @net.__class.__name)
+ assert(@pred,"No predicted component")
+ assert(world.network, "Network must be created before CharacterControllerComponent starts running")
+ if win\key_pressed("w")
+ log.info("Key down w",{"net","ecs","client","player"})
+ @net.properties.acc[2] = 1
+ any_change = true
+ elseif win\key_released("w")
+ log.info("Key up w",{"net","ecs","client","player"})
+ any_change = true
+ @net.properties.acc[2] = 0
+ if win\key_pressed("s")
+ log.info("Key down s",{"net","ecs","client","player"})
+ any_change = true
+ @net.properties.acc[2] = -1
+ elseif win\key_released("s")
+ log.info("Key up s",{"net","ecs","client","player"})
+ any_change = true
+ @net.properties.acc[2] = 0
+ if win\key_pressed("a")
+ log.info("Key down a", {"net","ecs","client","player"})
+ any_change = true
+ @net.properties.acc[1] = -1
+ elseif win\key_released("a")
+ log.info("Key up a", {"net","ecs","client","player"})
+ any_change = true
+ @net.properties.acc[1] = 0
+ if win\key_pressed("d")
+ log.info("Key down d", {"net","ecs","client","player"})
+ any_change = true
+ @net.properties.acc[1] = 1
+ elseif win\key_released("d")
+ log.info("Key up d", {"net","ecs","client","player"})
+ any_change = true
+ @net.properties.acc[1] = 0
+
+ -- We can't actually update the network on the client,
+ -- but we still want to do predicted movement
+ if any_change
+ @net.properties.last_update = am.eval_js("Date.now();")
+ @net.properties.pos = @pred.properties.pos
+ --@net.properties.vel = @pred.properties.vel
+ world.network\send("SuggestPlayerUpdate",{
+ acc: @net.properties.acc
+ vel: @net.properties.vel
+ pos: @pred.properties.pos
+ })
+ return false
+ --print("Running character controller",win\key_pressed("w"))
+ @netc_name = netc_name
+ super(name, properties)
+ join: (entity) =>
+ log.debug("Components was:" .. tostring(entity.components), {"ecs"})
+ @net = entity\get(@netc_name)
+ @pred = entity\get("pred")
+ assert(@net, "Must have added network component: " .. @netc_name .. ".")
+ super(entity)
+
+CharacterControllerComponent