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