-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.lua
128 lines (117 loc) · 2.93 KB
/
main.lua
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
-- Copyright (c) 2014 Denis Pobedrya <denis.pobedrya@gmail.com>
-- The code is licensed under MIT license, see LICENSE file for more info
local Ons = require('ons')
local world = {}
local ons
local font
local function createObj()
local o = {x = 400, y = 300, text = "Test", red = false}
o.move = function(self, x, y)
self._lerp.x = x -- linearly interpolated values should be set
self._lerp.y = y -- on server side using special _lerp table
end
o.chat = function(self, text)
self.text = text
end
o.init = function(self, p, text, red)
p.text = text
p.red = red
end
o.setred = function(self, red)
self.red = red
end
return o
end
local settings = {
create = createObj,
relay = {'chat', 'setred'},
private = {'init'},
client = {'move'},
lerp = {'x', 'y'},
unreliable = {'move'},
tick = 0.05,
debug = true
}
function love.load(params)
local server
local addr = "127.0.0.1:25780"
if params[2] == 'server' then
server = true
addr = params[3] or addr
elseif params[2] == 'client' then
server = false
addr = params[3] or addr
else
server = false
end
font = love.graphics.newFont(15)
love.graphics.setFont(font)
ons = Ons.create(settings)
if server then
ons:host(addr)
ons:onCreate(function(obj)
for i = 1, #world do
obj:init(world[i], world[i].text, world[i].red)
end
end)
love.window.setTitle("Server")
else
love.window.setTitle("Client")
ons:connect(addr)
ons:onTick(function ()
local obj = ons:getClientObject()
if obj then
obj:move(love.mouse.getX(), love.mouse.getY())
end
end)
end
world = ons:getWorld()
end
function love.update(dt)
ons:update(dt)
world = ons:getWorld()
local o = ons:getClientObject()
if o then
o.x = love.mouse.getX()
o.y = love.mouse.getY()
end
end
function love.draw()
for i = 1, #world do
local o = world[i]
if o.red then
love.graphics.setColor(255, 0, 0)
else
love.graphics.setColor(255, 255, 255)
end
love.graphics.print(o.text, o.x + 30, o.y + 30)
love.graphics.circle('fill', o.x, o.y, 20)
end
end
function love.textinput(text)
local o = ons:getClientObject()
if o then
o:chat(o.text .. text)
end
end
function love.mousepressed(x, y, button)
local o = ons:getClientObject()
if o then
o:setred(true)
end
end
function love.mousereleased(x, y, button)
local o = ons:getClientObject()
if o then
o:setred(false)
end
end
function love.keypressed(key, isrepeat)
local o = ons:getClientObject()
if o and key == 'backspace' then
o:chat(o.text:sub(0, -2))
end
end
function love.quit()
ons:disconnect()
end