1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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
|