Skip to content

Latest commit

 

History

History
84 lines (69 loc) · 3.19 KB

README.md

File metadata and controls

84 lines (69 loc) · 3.19 KB

#ONS

##About the project ONS (objective networking system) is a lua-enet wrapper allowing for easy creation of multiplayer games. It is intended to use with LÖVE though the only dependency is enet.

##Usage

First you need to provide object constructor:

local function createObj()
    local o = {x = 400, y = 300, text = "Test", red = true}
    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

Then you need to set up a settings table.

local settings = {
    create = createObj,
    relay = {'chat', 'setred'},
    private = {'init'},
    client = {'move'},
    unreliable = {'move'},
    lerp = {'x', 'y'},
    tick = 0.05,
    debug = true
}

relay methods are methods which may be called on a client and calls will be broadcasted to every client
private methods are methods which may not be called on a client and calls will be sent only to a specific client
client methods are methods which may be called on a client and calls will not be broadcasted
server methods are methods which may not be called on a client and calls will be broadcasted
lerp are numeric values which will be linearly interpolated on server and client sides, change values in _lerp table on server side to change those values
tick is a period of time between frame updates from a server
unreliable methods do not have to be delivered debug = true will print out some useful info in a terminal

To create a system, use ons.create method:

local ons = require("ons")
local system = ons.create(settings)

Methods of a system:

system:host(addr) -- Create a server
system:connect(addr) -- Connect to a server
system:disconnect(obj) -- On a client disconnects yourself, on a server disconnects a specific client
system:getClientObject() -- If connected returns a client object you may call methods of on a client
system:getWorld() -- Returns a world, table of all objects in a world
system:update(dt) -- Updates linear intorpolations and does networking stuff, need to be called periodically
system:getType() -- Possible return values are 'offline', 'client' and 'server'
system:onCreate(function(obj)) -- Callback to be called after new client connects
system:onDelete(function(obj)) -- Callback to be called after a client disconnects
system:onTick(function()) -- Callback to be called every settings.tick values of time

##Example

See main.lua file for a complete client/server example. It can be run as love . server [addr] and love . client [addr]

##Warning

This project is highly immature and untested, use on your own risk. Linear interpolation code is not ready yet for fast paced games because it doesn't take into consideration various latency effects.