diff options
Diffstat (limited to 'src/ecs/char_controller.moon')
| -rw-r--r-- | src/ecs/char_controller.moon | 70 |
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 |
