Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
lm3:ce:t_godot_multiplayer [2020/12/03 20:32] ruben |
lm3:ce:t_godot_multiplayer [2020/12/04 14:48] (текущий) ruben |
||
|---|---|---|---|
| Строка 91: | Строка 91: | ||
| *< | *< | ||
| + | ==== Файловая структура проекта ==== | ||
| + | {{ : | ||
| + | |||
| + | ==== Взаимосвязи ==== | ||
| + | |||
| + | Объекты основной логической машины: | ||
| + | * TCP-server server: прием и передача данных клиенту | ||
| + | * DataPack packer: распаковка и запаковка данных клиенту | ||
| + | * Clients clients: взаимодействие клиентов | ||
| + | |||
| + | Диаграмма связей: | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | ==== Скрипты ==== | ||
| + | |||
| + | **main / start.lua** | ||
| + | |||
| + | <code lua> | ||
| + | lm3: | ||
| + | lm3: | ||
| + | |||
| + | lm3: | ||
| + | server: | ||
| + | server: | ||
| + | |||
| + | lm3: | ||
| + | packer: | ||
| + | |||
| + | init_Clients(" | ||
| + | |||
| + | init_Telemetry(" | ||
| + | |||
| + | -- связи объектов | ||
| + | server: | ||
| + | server: | ||
| + | server: | ||
| + | packer: | ||
| + | clients: | ||
| + | |||
| + | -- распределим данные | ||
| + | packer: | ||
| + | for obj_name, obj_data in pairs(ev.Data) do | ||
| + | if obj_name == " | ||
| + | for attr_name, attr_value in pairs(obj_data) do | ||
| + | if attr_name == " | ||
| + | clients: | ||
| + | end | ||
| + | end | ||
| + | elseif obj_name == " | ||
| + | clients: | ||
| + | end | ||
| + | end | ||
| + | end) | ||
| + | </ | ||
| + | |||
| + | **main / mp_lib.lua** | ||
| + | |||
| + | <code lua> | ||
| + | function init_Clients(_name) | ||
| + | local obj = lm3: | ||
| + | |||
| + | -- структура данных о клиентах | ||
| + | obj.ClientList = {} | ||
| + | for i = 1, lmconf.MaxClientCount do | ||
| + | obj.ClientList[i] = { | ||
| + | isConnected = false, | ||
| + | Type = "" | ||
| + | } | ||
| + | end | ||
| + | |||
| + | -- подключение клиента | ||
| + | obj: | ||
| + | lm3: | ||
| + | |||
| + | obj.ClientList[ev].isConnected = true | ||
| + | obj.ClientList[ev].Type = " | ||
| + | |||
| + | local sendData = { } | ||
| + | local needSend = false | ||
| + | for i = 1, lmconf.MaxClientCount do | ||
| + | if i ~= ev and obj.ClientList[i].isConnected == true then | ||
| + | sendData[" | ||
| + | needSend = true | ||
| + | end | ||
| + | end | ||
| + | |||
| + | if needSend == true then | ||
| + | obj:OnSend( { Tag = ev, Data = sendData } ) | ||
| + | end | ||
| + | end) | ||
| + | |||
| + | -- отключение клиента | ||
| + | obj: | ||
| + | lm3: | ||
| + | obj.ClientList[ev].isConnected = false | ||
| + | local sendData = { } | ||
| + | sendData[" | ||
| + | for i = 1, lmconf.MaxClientCount do | ||
| + | if obj.ClientList[i].isConnected == true then | ||
| + | obj:OnSend( { Tag = i, Data = sendData } ) | ||
| + | end | ||
| + | end | ||
| + | end) | ||
| + | |||
| + | -- присвоение типа | ||
| + | obj: | ||
| + | if obj.ClientList[ev.Tag].isConnected == true then | ||
| + | obj.ClientList[ev.Tag].Type = ev.Type | ||
| + | local sendData = { } | ||
| + | sendData[" | ||
| + | -- lm3: | ||
| + | for i = 1, lmconf.MaxClientCount do | ||
| + | if i ~= ev.Tag and obj.ClientList[i].isConnected == true then | ||
| + | obj:OnSend( { Tag = i, Data = sendData } ) | ||
| + | end | ||
| + | end | ||
| + | end | ||
| + | end) | ||
| + | |||
| + | -- присвоение положения | ||
| + | obj: | ||
| + | local sendData = {} | ||
| + | sendData[" | ||
| + | for i = 1, lmconf.MaxClientCount do | ||
| + | if i ~= ev.Tag and obj.ClientList[i].isConnected == true then | ||
| + | obj:OnSend( { Tag = i, Data = sendData } ) | ||
| + | end | ||
| + | end | ||
| + | end) | ||
| + | |||
| + | obj: | ||
| + | |||
| + | return obj | ||
| + | end | ||
| + | |||
| + | function init_Telemetry(_name) | ||
| + | local obj = lm3: | ||
| + | |||
| + | |||
| + | return obj | ||
| + | end | ||
| + | </ | ||
| + | |||
| + | ==== Скриншоты ==== | ||
| + | |||
| + | С пультом управления: | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Без: | ||
| + | |||
| + | {{ : | ||