From d3a2cdfbad59ac554f1b64ff74e0d397605de82b Mon Sep 17 00:00:00 2001 From: Leopotam Date: Tue, 22 Mar 2022 14:12:38 +0300 Subject: [PATCH] =?UTF-8?q?*=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BB=D0=B8=D1=86=D0=B5=D0=BD=D0=B7=D0=B8=D0=B8?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 8 ++ Editor.meta | 10 ++ Editor/Leopotam.Ecs.Ui.Editor.asmdef | 10 ++ Editor/Leopotam.Ecs.Ui.Editor.asmdef.meta | 7 ++ Editor/Widgets.meta | 10 ++ .../Widgets/EcsUiNonVisualWidgetInspector.cs | 20 ++++ .../EcsUiNonVisualWidgetInspector.cs.meta | 13 +++ LICENSE.md | 33 ++++++ LICENSE.md.meta | 7 ++ README.md | 100 ++++++++++++++++++ README.md.meta | 9 ++ Runtime.meta | 10 ++ Runtime/Actions.meta | 8 ++ Runtime/Actions/EcsUiActionBase.cs | 90 ++++++++++++++++ Runtime/Actions/EcsUiActionBase.cs.meta | 13 +++ Runtime/Actions/EcsUiClickAction.cs | 30 ++++++ Runtime/Actions/EcsUiClickAction.cs.meta | 13 +++ Runtime/Actions/EcsUiDownUpAction.cs | 36 +++++++ Runtime/Actions/EcsUiDownUpAction.cs.meta | 11 ++ Runtime/Actions/EcsUiDragAction.cs | 48 +++++++++ Runtime/Actions/EcsUiDragAction.cs.meta | 13 +++ Runtime/Actions/EcsUiDropAction.cs | 23 ++++ Runtime/Actions/EcsUiDropAction.cs.meta | 13 +++ Runtime/Actions/EcsUiEnterExitAction.cs | 30 ++++++ Runtime/Actions/EcsUiEnterExitAction.cs.meta | 13 +++ Runtime/Actions/EcsUiNoAction.cs | 11 ++ Runtime/Actions/EcsUiNoAction.cs.meta | 13 +++ Runtime/Actions/EcsUiScrollViewAction.cs | 32 ++++++ Runtime/Actions/EcsUiScrollViewAction.cs.meta | 13 +++ Runtime/Actions/EcsUiSliderAction.cs | 32 ++++++ Runtime/Actions/EcsUiSliderAction.cs.meta | 13 +++ Runtime/Actions/EcsUiTmpDropdownAction.cs | 32 ++++++ .../Actions/EcsUiTmpDropdownAction.cs.meta | 11 ++ Runtime/Actions/EcsUiTmpInputAction.cs | 42 ++++++++ Runtime/Actions/EcsUiTmpInputAction.cs.meta | 13 +++ Runtime/Components.meta | 8 ++ Runtime/Components/EcsUiBeginDragEvent.cs | 17 +++ .../Components/EcsUiBeginDragEvent.cs.meta | 13 +++ Runtime/Components/EcsUiClickEvent.cs | 16 +++ Runtime/Components/EcsUiClickEvent.cs.meta | 13 +++ Runtime/Components/EcsUiDownEvent.cs | 17 +++ Runtime/Components/EcsUiDownEvent.cs.meta | 11 ++ Runtime/Components/EcsUiDragEvent.cs | 18 ++++ Runtime/Components/EcsUiDragEvent.cs.meta | 13 +++ Runtime/Components/EcsUiDropEvent.cs | 15 +++ Runtime/Components/EcsUiDropEvent.cs.meta | 13 +++ Runtime/Components/EcsUiEndDragEvent.cs | 17 +++ Runtime/Components/EcsUiEndDragEvent.cs.meta | 13 +++ Runtime/Components/EcsUiEnterEvent.cs | 13 +++ Runtime/Components/EcsUiEnterEvent.cs.meta | 13 +++ Runtime/Components/EcsUiExitEvent.cs | 13 +++ Runtime/Components/EcsUiExitEvent.cs.meta | 13 +++ Runtime/Components/EcsUiScrollViewEvent.cs | 15 +++ .../Components/EcsUiScrollViewEvent.cs.meta | 13 +++ Runtime/Components/EcsUiSliderChangeEvent.cs | 14 +++ .../Components/EcsUiSliderChangeEvent.cs.meta | 11 ++ .../Components/EcsUiTmpDropdownChangeEvent.cs | 14 +++ .../EcsUiTmpDropdownChangeEvent.cs.meta | 11 ++ .../Components/EcsUiTmpInputChangeEvent.cs | 14 +++ .../EcsUiTmpInputChangeEvent.cs.meta | 11 ++ Runtime/Components/EcsUiTmpInputEndEvent.cs | 14 +++ .../Components/EcsUiTmpInputEndEvent.cs.meta | 11 ++ Runtime/Components/EcsUiUpEvent.cs | 17 +++ Runtime/Components/EcsUiUpEvent.cs.meta | 11 ++ Runtime/Helpers.meta | 8 ++ Runtime/Helpers/EcsSystemsExtensions.cs | 91 ++++++++++++++++ Runtime/Helpers/EcsSystemsExtensions.cs.meta | 11 ++ Runtime/Leopotam.Ecs.Ui.asmdef | 16 +++ Runtime/Leopotam.Ecs.Ui.asmdef.meta | 7 ++ Runtime/Systems.meta | 8 ++ Runtime/Systems/EcsUiEmitter.cs | 80 ++++++++++++++ Runtime/Systems/EcsUiEmitter.cs.meta | 13 +++ Runtime/Systems/EcsUiProxyEmitter.cs | 66 ++++++++++++ Runtime/Systems/EcsUiProxyEmitter.cs.meta | 3 + Runtime/Widgets.meta | 10 ++ Runtime/Widgets/EcsUiNonVisualWidget.cs | 21 ++++ Runtime/Widgets/EcsUiNonVisualWidget.cs.meta | 13 +++ package.json | 19 ++++ package.json.meta | 7 ++ 79 files changed, 1555 insertions(+) create mode 100644 .gitignore create mode 100644 Editor.meta create mode 100644 Editor/Leopotam.Ecs.Ui.Editor.asmdef create mode 100644 Editor/Leopotam.Ecs.Ui.Editor.asmdef.meta create mode 100644 Editor/Widgets.meta create mode 100644 Editor/Widgets/EcsUiNonVisualWidgetInspector.cs create mode 100644 Editor/Widgets/EcsUiNonVisualWidgetInspector.cs.meta create mode 100644 LICENSE.md create mode 100644 LICENSE.md.meta create mode 100644 README.md create mode 100644 README.md.meta create mode 100644 Runtime.meta create mode 100644 Runtime/Actions.meta create mode 100755 Runtime/Actions/EcsUiActionBase.cs create mode 100644 Runtime/Actions/EcsUiActionBase.cs.meta create mode 100644 Runtime/Actions/EcsUiClickAction.cs create mode 100644 Runtime/Actions/EcsUiClickAction.cs.meta create mode 100644 Runtime/Actions/EcsUiDownUpAction.cs create mode 100644 Runtime/Actions/EcsUiDownUpAction.cs.meta create mode 100644 Runtime/Actions/EcsUiDragAction.cs create mode 100644 Runtime/Actions/EcsUiDragAction.cs.meta create mode 100644 Runtime/Actions/EcsUiDropAction.cs create mode 100644 Runtime/Actions/EcsUiDropAction.cs.meta create mode 100644 Runtime/Actions/EcsUiEnterExitAction.cs create mode 100644 Runtime/Actions/EcsUiEnterExitAction.cs.meta create mode 100644 Runtime/Actions/EcsUiNoAction.cs create mode 100644 Runtime/Actions/EcsUiNoAction.cs.meta create mode 100644 Runtime/Actions/EcsUiScrollViewAction.cs create mode 100644 Runtime/Actions/EcsUiScrollViewAction.cs.meta create mode 100644 Runtime/Actions/EcsUiSliderAction.cs create mode 100644 Runtime/Actions/EcsUiSliderAction.cs.meta create mode 100644 Runtime/Actions/EcsUiTmpDropdownAction.cs create mode 100644 Runtime/Actions/EcsUiTmpDropdownAction.cs.meta create mode 100644 Runtime/Actions/EcsUiTmpInputAction.cs create mode 100644 Runtime/Actions/EcsUiTmpInputAction.cs.meta create mode 100644 Runtime/Components.meta create mode 100644 Runtime/Components/EcsUiBeginDragEvent.cs create mode 100644 Runtime/Components/EcsUiBeginDragEvent.cs.meta create mode 100644 Runtime/Components/EcsUiClickEvent.cs create mode 100644 Runtime/Components/EcsUiClickEvent.cs.meta create mode 100644 Runtime/Components/EcsUiDownEvent.cs create mode 100644 Runtime/Components/EcsUiDownEvent.cs.meta create mode 100644 Runtime/Components/EcsUiDragEvent.cs create mode 100644 Runtime/Components/EcsUiDragEvent.cs.meta create mode 100644 Runtime/Components/EcsUiDropEvent.cs create mode 100644 Runtime/Components/EcsUiDropEvent.cs.meta create mode 100644 Runtime/Components/EcsUiEndDragEvent.cs create mode 100644 Runtime/Components/EcsUiEndDragEvent.cs.meta create mode 100644 Runtime/Components/EcsUiEnterEvent.cs create mode 100644 Runtime/Components/EcsUiEnterEvent.cs.meta create mode 100644 Runtime/Components/EcsUiExitEvent.cs create mode 100644 Runtime/Components/EcsUiExitEvent.cs.meta create mode 100644 Runtime/Components/EcsUiScrollViewEvent.cs create mode 100644 Runtime/Components/EcsUiScrollViewEvent.cs.meta create mode 100644 Runtime/Components/EcsUiSliderChangeEvent.cs create mode 100644 Runtime/Components/EcsUiSliderChangeEvent.cs.meta create mode 100644 Runtime/Components/EcsUiTmpDropdownChangeEvent.cs create mode 100644 Runtime/Components/EcsUiTmpDropdownChangeEvent.cs.meta create mode 100644 Runtime/Components/EcsUiTmpInputChangeEvent.cs create mode 100644 Runtime/Components/EcsUiTmpInputChangeEvent.cs.meta create mode 100644 Runtime/Components/EcsUiTmpInputEndEvent.cs create mode 100644 Runtime/Components/EcsUiTmpInputEndEvent.cs.meta create mode 100644 Runtime/Components/EcsUiUpEvent.cs create mode 100644 Runtime/Components/EcsUiUpEvent.cs.meta create mode 100644 Runtime/Helpers.meta create mode 100644 Runtime/Helpers/EcsSystemsExtensions.cs create mode 100644 Runtime/Helpers/EcsSystemsExtensions.cs.meta create mode 100644 Runtime/Leopotam.Ecs.Ui.asmdef create mode 100644 Runtime/Leopotam.Ecs.Ui.asmdef.meta create mode 100644 Runtime/Systems.meta create mode 100644 Runtime/Systems/EcsUiEmitter.cs create mode 100644 Runtime/Systems/EcsUiEmitter.cs.meta create mode 100644 Runtime/Systems/EcsUiProxyEmitter.cs create mode 100644 Runtime/Systems/EcsUiProxyEmitter.cs.meta create mode 100644 Runtime/Widgets.meta create mode 100644 Runtime/Widgets/EcsUiNonVisualWidget.cs create mode 100644 Runtime/Widgets/EcsUiNonVisualWidget.cs.meta create mode 100755 package.json create mode 100644 package.json.meta diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cc80cde --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.sln +.vscode +.idea +Library +bin +obj +Temp +.DS_Store diff --git a/Editor.meta b/Editor.meta new file mode 100644 index 0000000..374224d --- /dev/null +++ b/Editor.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f31e382a4af2e41d391b9318dc9d3c1c +folderAsset: yes +timeCreated: 1515842406 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Leopotam.Ecs.Ui.Editor.asmdef b/Editor/Leopotam.Ecs.Ui.Editor.asmdef new file mode 100644 index 0000000..0df4a98 --- /dev/null +++ b/Editor/Leopotam.Ecs.Ui.Editor.asmdef @@ -0,0 +1,10 @@ +{ + "name": "Leopotam.Ecs.Ui.Editor", + "references": [ + "Leopotam.Ecs.Ui" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} \ No newline at end of file diff --git a/Editor/Leopotam.Ecs.Ui.Editor.asmdef.meta b/Editor/Leopotam.Ecs.Ui.Editor.asmdef.meta new file mode 100644 index 0000000..f2b3acf --- /dev/null +++ b/Editor/Leopotam.Ecs.Ui.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bead7f1a092074ba9aac29329dee43ca +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Widgets.meta b/Editor/Widgets.meta new file mode 100644 index 0000000..1d9b3d2 --- /dev/null +++ b/Editor/Widgets.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a85ebb70659c94adc85151479b09444e +folderAsset: yes +timeCreated: 1515842602 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Widgets/EcsUiNonVisualWidgetInspector.cs b/Editor/Widgets/EcsUiNonVisualWidgetInspector.cs new file mode 100644 index 0000000..63edbab --- /dev/null +++ b/Editor/Widgets/EcsUiNonVisualWidgetInspector.cs @@ -0,0 +1,20 @@ +// ---------------------------------------------------------------------------- +// The Proprietary or MIT-Red License +// Copyright (c) 2012-2022 Leopotam +// ---------------------------------------------------------------------------- + +using UnityEditor; +using UnityEditor.UI; + +namespace Leopotam.Ecs.Ui.Widgets.UnityEditors { + [CustomEditor (typeof (EcsUiNonVisualWidget), false)] + [CanEditMultipleObjects] + sealed class EcsUiNonVisualWidgetInspector : GraphicEditor { + public override void OnInspectorGUI () { + serializedObject.Update (); + EditorGUILayout.PropertyField (m_Script); + RaycastControlsGUI (); + serializedObject.ApplyModifiedProperties (); + } + } +} \ No newline at end of file diff --git a/Editor/Widgets/EcsUiNonVisualWidgetInspector.cs.meta b/Editor/Widgets/EcsUiNonVisualWidgetInspector.cs.meta new file mode 100644 index 0000000..7c7a61b --- /dev/null +++ b/Editor/Widgets/EcsUiNonVisualWidgetInspector.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4eacb708943f14b64902ec8d26d24fc5 +timeCreated: 1515891771 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..5554a18 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,33 @@ +Copyright (c) 2012 - 2022 leopotam@yandex.ru + +Данное программное обеспечение и сопутствующая документация (далее - Продукт) +выпускается на условиях двойного лицензирования - под собственнической/коммерческой +и MIT-Red лицензиями. + +Условия использования под собственнической/коммерческой лицензии обсуждаются +индивидуально, для подробностей следует писать на электронную почту. + +MIT-Red регулируется совокупностью следующих правил, если хотя бы +одно из них невыполнимо - использование Продукта запрещено: + +Если вы за применение opensource программного обеспечения в +военной сфере - вы не можете использовать этот Продукт. + +Если вы испытываете ненависть к русским или поддерживаете +любые нападки на них - вы не можете использовать этот Продукт. + +Данная лицензия разрешает лицам, получившим копию данного Продукта, +безвозмездно использовать Программное обеспечение без ограничений, включая +неограниченное право на использование, копирование, изменение, слияние, +публикацию и распространение копий Продукта. + +Указанное выше уведомление об авторском праве и данные условия должны быть +включены во все копии или значимые части данного Продукта. + +ДАННЫЙ ПРОДУКТ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО +ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, +СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО +НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ +ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, +В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ +ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОДУКТОМ. \ No newline at end of file diff --git a/LICENSE.md.meta b/LICENSE.md.meta new file mode 100644 index 0000000..fdd872f --- /dev/null +++ b/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7bcd058f508c24a77aee0727effb2ebb +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md new file mode 100644 index 0000000..1c74aca --- /dev/null +++ b/README.md @@ -0,0 +1,100 @@ +# Интеграция uGui в LeoECS +Интеграция событий uGui в ECS-мир. + +> Проверено на Unity 2020.3 (зависит от Unity) и содержит asmdef-описания для компиляции в виде отдельных сборок и уменьшения времени рекомпиляции основного проекта. + +# Содержание +* [Социальные ресурсы](#Социальные-ресурсы) +* [Установка](#Установка) + * [В виде unity модуля](#В-виде-unity-модуля) + * [В виде исходников](#В-виде-исходников) +* [Основные типы](#Основные-типы) + * [EcsUiEmitter](#EcsUiEmitter) + * [Действия](#Действия) + * [Компоненты](#Компоненты) +* [Инициализация](#Инициализация) +* [Лицензия](#Лицензия) + +# Социальные ресурсы +[![discord](https://img.shields.io/discord/404358247621853185.svg?label=enter%20to%20discord%20server&style=for-the-badge&logo=discord)](https://discord.gg/5GZVde6) + +# Установка + +## В виде unity модуля +Поддерживается установка в виде unity-модуля через git-ссылку в PackageManager или прямое редактирование `Packages/manifest.json`: +``` +"com.leopotam.ecs": "https://github.com/Leopotam/ecs-ui.git", +``` +По умолчанию используется последняя релизная версия. Если требуется версия "в разработке" с актуальными изменениями - следует переключиться на ветку `develop`: +``` +"com.leopotam.ecs": "https://github.com/Leopotam/ecs-ui.git#develop", +``` + +## В виде исходников +Код так же может быть склонирован или получен в виде архива со страницы релизов. + +# Основные типы + +## EcsUiEmitter +`EcsUiEmitter` является `MonoBehaviour`-классом, отвечающим за генерацию ECS-событий на основе uGui-событий (нажатие, отпускание, перетаскивание и т.п): +```c# +public class Startup : MonoBehaviour { + // Поле должно быть проинициализировано в инспекторе средствами редактора Unity. + [SerializeField] EcsUiEmitter _uiEmitter; + + EcsSystems _systems; + + void Start () { + var world = new EcsWorld (); + _systems = new EcsSystems (world) + // Дополнительная инициализация... + .Add (new TestSystem ()) + .InjectUi (_uiEmitter); + _systems.Init (); + } +} + +public class TestSystem : IEcsInitSystem { + // Поля с автоматической инъекцией. + EcsUiEmitter _ui; + [EcsUiNamed("MyButton")] GameObject _btnGo; + [EcsUiNamed("MyButton")] Transform _btnTransform; + [EcsUiNamed("MyButton")] Button _btn; + + public void Init () { + // Все поля системы к этому моменту проинициализированы и могут быть использованы: + // _ui - содержит ссылку на EcsUiEmitter. + // _btnGo - содержит ссылку, аналог вызова _ui.GetNamedObject ("MyButton"); + // _btnTransform = содержит ссылку, аналог вызова _ui.GetNamedObject ("MyButton").GetComponent (); + // _btn = содержит ссылку, аналог вызова _ui.GetNamedObject ("MyButton").GetComponent