Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
lm3:ce:t_mentor [2020/12/08 18:36] ruben |
lm3:ce:t_mentor [2020/12/08 18:49] (текущий) ruben |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | __false__ | + | ===== Туториал: |
| + | |||
| + | В многопользовательском проекте у пользователей бывают разные роли. Платформа Лямбда-Мю может одновременно взаимодействовать с пользователями, | ||
| + | |||
| + | ==== Пример реализации ==== | ||
| + | |||
| + | Рассмотрим проект обучения обслуживания серверов: | ||
| + | |||
| + | Дополнительно в проекте реализована доставка текстового контента на VR шлем (текстовый чат). | ||
| + | |||
| + | ==== Репозитарий ==== | ||
| + | |||
| + | Файловая структура проекта представлена ниже. | ||
| + | |||
| + | Необходимые скрипты туториала находятся в репозитарии [[https:// | ||
| + | |||
| + | Чтобы запустить платформу скачайте бинарный файл и необходимые библиотеки из репозитария [[https:// | ||
| + | |||
| + | ==== Исходные данные ==== | ||
| + | |||
| + | * Сцена серверной импортированная в Godot Engine | ||
| + | * Запрограммированное управление виртуальным персонажем в режиме 3D и VR | ||
| + | * Запрограммированный модуль связи lm3 и протокол передачи данных | ||
| + | |||
| + | ==== Цель проекта ==== | ||
| + | |||
| + | Реализация режима преподавателя. Преподаватель может переключаться между режимами свободного перемещения и просмотра глазами учащихся. Дополнительно, | ||
| + | |||
| + | ==== Разбор исходных данных ==== | ||
| + | |||
| + | Со стороны lm3 нужно добавить атрибут видимости клиента (модель ментора должна исчезать, | ||
| + | |||
| + | ==== Файловая структура проекта ==== | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | ==== Скрипты | ||
| + | |||
| + | ** main / start.lua ** | ||
| + | |||
| + | <code lua> | ||
| + | lm3: | ||
| + | lm3: | ||
| + | |||
| + | lm3: | ||
| + | server: | ||
| + | server: | ||
| + | |||
| + | lm3: | ||
| + | packer: | ||
| + | |||
| + | init_Clients(" | ||
| + | |||
| + | init_Telemetry(" | ||
| + | |||
| + | init_MsgSender(" | ||
| + | |||
| + | server: | ||
| + | server: | ||
| + | server: | ||
| + | packer: | ||
| + | |||
| + | clients: | ||
| + | msgSender: | ||
| + | |||
| + | packer: | ||
| + | -- lm3: | ||
| + | |||
| + | 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: | ||
| + | elseif attr_name == " | ||
| + | clients: | ||
| + | end | ||
| + | end | ||
| + | elseif obj_name == " | ||
| + | clients: | ||
| + | elseif obj_name == " | ||
| + | for attr_name, attr_value in pairs(obj_data) do | ||
| + | if attr_name == " | ||
| + | msgSender: | ||
| + | end | ||
| + | end | ||
| + | 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 = " | ||
| + | obj.ClientList[ev].Visability = true | ||
| + | |||
| + | 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: | ||
| + | if obj.ClientList[ev.Tag].isConnected == true then | ||
| + | obj.ClientList[ev.Tag].Visability = ev.Visability | ||
| + | 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 | ||
| + | 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 | ||
| + | |||
| + | function init_MsgSender(_name) | ||
| + | local obj = lm3: | ||
| + | |||
| + | |||
| + | obj: | ||
| + | lm3: | ||
| + | -- todo | ||
| + | if clients.ClientList[ev.Tag].isConnected == true then | ||
| + | local sendData = { } | ||
| + | sendData[" | ||
| + | for i = 1, lmconf.MaxClientCount do | ||
| + | -- todo | ||
| + | if clients.ClientList[i].isConnected == true then | ||
| + | --if i ~= ev.Tag and obj.ClientList[i].isConnected == true then | ||
| + | obj:OnSend( { Tag = i, Data = sendData } ) | ||
| + | end | ||
| + | end | ||
| + | end | ||
| + | end) | ||
| + | |||
| + | obj: | ||
| + | |||
| + | return obj | ||
| + | end | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Скриншоты | ||
| + | |||
| + | Ментор, | ||
| + | {{ : | ||
| + | |||
| + | Ментор, | ||
| + | {{ : | ||
| + | |||
| + | Ментор, | ||
| + | {{ : | ||
| + | |||
| + | VR учащийся | ||
| + | {{ : | ||