Skip to content

Commit 632e04d

Browse files
committed
* Изменение лицензии.
0 parents  commit 632e04d

File tree

90 files changed

+1891
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+1891
-0
lines changed

.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
*.sln
2+
.vscode
3+
.idea
4+
Library
5+
bin
6+
obj
7+
Temp
8+
.DS_Store

Editor.meta

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"name": "Leopotam.EcsLite.Unity.Ugui.Editor",
3+
"rootNamespace": "Leopotam.EcsLite.Unity.Ugui.Editor",
4+
"references": [
5+
"Leopotam.EcsLite.Unity.Ugui"
6+
],
7+
"includePlatforms": [
8+
"Editor"
9+
],
10+
"excludePlatforms": [],
11+
"allowUnsafeCode": false,
12+
"overrideReferences": false,
13+
"precompiledReferences": [],
14+
"autoReferenced": true,
15+
"defineConstraints": [],
16+
"versionDefines": [],
17+
"noEngineReferences": false
18+
}

Editor/Leopotam.EcsLite.Unity.Ugui.Editor.asmdef.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/Widgets.meta

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// ----------------------------------------------------------------------------
2+
// The Proprietary or MIT-Red License
3+
// Copyright (c) 2012-2022 Leopotam <[email protected]>
4+
// ----------------------------------------------------------------------------
5+
6+
using UnityEditor;
7+
using UnityEditor.UI;
8+
9+
namespace Leopotam.EcsLite.Unity.Ugui.Editor {
10+
[CustomEditor (typeof (EcsUguiNonVisualWidget), false)]
11+
[CanEditMultipleObjects]
12+
sealed class EcsUguiNonVisualWidgetInspector : GraphicEditor {
13+
public override void OnInspectorGUI () {
14+
serializedObject.Update ();
15+
EditorGUILayout.PropertyField (m_Script);
16+
RaycastControlsGUI ();
17+
serializedObject.ApplyModifiedProperties ();
18+
}
19+
}
20+
}

Editor/Widgets/EcsUguiNonVisualWidgetInspector.cs.meta

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

LICENSE.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
Copyright (c) 2012 - 2022 [email protected]
2+
3+
Данное программное обеспечение и сопутствующая документация (далее - Продукт)
4+
выпускается на условиях двойного лицензирования - под собственнической/коммерческой
5+
и MIT-Red лицензиями.
6+
7+
Условия использования под собственнической/коммерческой лицензии обсуждаются
8+
индивидуально, для подробностей следует писать на электронную почту.
9+
10+
MIT-Red регулируется совокупностью следующих правил, если хотя бы
11+
одно из них невыполнимо - использование Продукта запрещено:
12+
13+
Если вы за применение opensource программного обеспечения в
14+
военной сфере - вы не можете использовать этот Продукт.
15+
16+
Если вы испытываете ненависть к русским или поддерживаете
17+
любые нападки на них - вы не можете использовать этот Продукт.
18+
19+
Данная лицензия разрешает лицам, получившим копию данного Продукта,
20+
безвозмездно использовать Программное обеспечение без ограничений, включая
21+
неограниченное право на использование, копирование, изменение, слияние,
22+
публикацию и распространение копий Продукта.
23+
24+
Указанное выше уведомление об авторском праве и данные условия должны быть
25+
включены во все копии или значимые части данного Продукта.
26+
27+
ДАННЫЙ ПРОДУКТ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО
28+
ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ,
29+
СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО
30+
НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ
31+
ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ,
32+
В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ
33+
ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОДУКТОМ.

LICENSE.md.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
# LeoECS Lite uGui Bindings - поддержка событий uGui в ECS-мире
2+
Интеграция событий uGui в ECS-мир.
3+
4+
> Проверено на Unity 2020.3 (зависит от Unity) и содержит asmdef-описания для компиляции в виде отдельных сборок и уменьшения времени рекомпиляции основного проекта.
5+
6+
> **ВАЖНО!** Зависит от [LeoECS Lite](https://github.com/Leopotam/ecslite) - зависимость должна быть установлена до установки этого модуля.
7+
> **ВАЖНО!** Зависит от [LeoECS Lite - Расширенные системы](https://github.com/Leopotam/ecslite-extendedsystems) - зависимость должна быть установлена до установки этого модуля.
8+
9+
* [Установка](#Установка)
10+
* [В виде unity модуля](#В-виде-unity-модуля)
11+
* [В виде исходников](#В-виде-исходников)
12+
* [Классы](#Классы)
13+
* [EcsUguiEmitter](#EcsUguiEmitter)
14+
* [EcsUguiCallbackSystem](#EcsUguiCallbackSystem)
15+
* [Действия](#Действия)
16+
* [Компоненты](#Компоненты)
17+
* [Лицензия](#Лицензия)
18+
19+
# Социальные ресурсы
20+
[![discord](https://img.shields.io/discord/404358247621853185.svg?label=enter%20to%20discord%20server&style=for-the-badge&logo=discord)](https://discord.gg/5GZVde6)
21+
22+
# Установка
23+
24+
## В виде unity модуля
25+
Поддерживается установка в виде unity-модуля через git-ссылку в PackageManager или прямое редактирование `Packages/manifest.json`:
26+
```
27+
"com.leopotam.ecslite.unity.ugui": "https://github.com/Leopotam/ecslite-unity-ugui.git",
28+
```
29+
По умолчанию используется последняя релизная версия. Если требуется версия "в разработке" с актуальными изменениями - следует переключиться на ветку `develop`:
30+
```
31+
"com.leopotam.ecslite.unity.ugui": "https://github.com/Leopotam/ecslite-unity-ugui.git#develop",
32+
```
33+
34+
## В виде исходников
35+
Код так же может быть склонирован или получен в виде архива со страницы релизов.
36+
37+
# Классы
38+
39+
## EcsUguiEmitter
40+
`EcsUiEmitter` является `MonoBehaviour`-классом, отвечающим за генерацию ECS-событий на основе uGui-событий (нажатие, отпускание, перетаскивание и т.п).
41+
Должен быть размещен на корневом `GameObject`-е UI-иерархии (или хотя бы на корневом `Canvas`-е) и подключен к ECS-инфраструктуре через инспектор:
42+
```c#
43+
public class Startup : MonoBehaviour {
44+
// Поле должно быть проинициализировано в инспекторе средствами редактора Unity.
45+
[SerializeField] EcsUguiEmitter _uguiEmitter;
46+
47+
EcsSystems _systems;
48+
49+
void Start () {
50+
_systems = new EcsSystems (new EcsWorld ());
51+
_systems
52+
.Add (new Test1System ())
53+
.Add (new Test2System ())
54+
// Этот вызов должен быть размещен после всех систем,
55+
// в которых есть зависимость от uGui-событий.
56+
.InjectUgui (_uguiEmitter)
57+
.Init ();
58+
}
59+
60+
void Update () {
61+
_systems?.Update ();
62+
}
63+
64+
void OnDestroy () {
65+
if (_systems != null) {
66+
_systems.GetWorld ("ugui-events").Destroy ();
67+
_systems.GetWorld ().Destroy ();
68+
_systems = null;
69+
}
70+
}
71+
}
72+
73+
public class Test1System : IEcsInitSystem {
74+
// Это поле будет автоматически инициализировано
75+
// ссылкой на экземпляр эмиттера на сцене.
76+
readonly EcsUguiEmitter _ugui = default;
77+
78+
GameObject _btnGo;
79+
Transform _btnTransform;
80+
Button _btn;
81+
82+
public void Init (EcsSystems systems) {
83+
// Получение ссылки на виджет-действие с именем "MyButton".
84+
_btnGo = _ugui.GetNamedObject ("MyButton");
85+
// Чтение Transform-компонента с него.
86+
_btnTransform = _ugui.GetNamedObject ("MyButton").GetComponent<Transform> ();
87+
// Чтение Button-компонента с него.
88+
_btn = _ugui.GetNamedObject ("MyButton").GetComponent<Button> ();
89+
}
90+
}
91+
```
92+
Пример выше можно упростить через `[EcsUguiNamedAttribute]`:
93+
```c#
94+
public class Test2System : IEcsInitSystem {
95+
// Все поля будут автоматически заполнены ссылками
96+
// на соответствующие компоненты с именованного виджета-действия.
97+
[EcsUguiNamed("MyButton")] GameObject _btnGo;
98+
[EcsUguiNamed("MyButton")] Transform _btnTransform;
99+
[EcsUguiNamed("MyButton")] Button _btn;
100+
101+
public void Init (EcsSystems systems) {
102+
// Все поля инициализированы и могут быть использованы здесь.
103+
}
104+
}
105+
```
106+
107+
## EcsUguiCallbackSystem
108+
Эта система дает возможность напрямую подписываться на uGui-события без дополнительного кода:
109+
```c#
110+
public class TestUguiClickEventSystem : EcsUguiCallbackSystem {
111+
[Preserve] // Этот атрибут необходим для сохранения этого метода для il2cpp.
112+
[EcsUguiClickEvent]
113+
void OnAnyClick (in EcsUguiClickEvent evt) {
114+
Debug.Log ("Im clicked!", evt.Sender);
115+
}
116+
117+
// Этот метод будет вызван при нажатии на виджет с действием, имеющим имя "exit-button".
118+
[Preserve]
119+
[EcsUguiClickEvent("exit-button")]
120+
void OnExitButtonClicked (in EcsUguiClickEvent evt) {
121+
Debug.Log ("exit-button clicked!", evt.Sender);
122+
}
123+
}
124+
```
125+
Список поддерживаемых атрибутов действий:
126+
```c#
127+
[EcsUguiClickEvent]
128+
[EcsUguiUpEvent]
129+
[EcsUguiDownEvent]
130+
[EcsUguiDragStartEvent]
131+
[EcsUguiDragMoveEvent]
132+
[EcsUguiDragEndEvent]
133+
[EcsUguiEnterEvent]
134+
[EcsUguiExitEvent]
135+
[EcsUguiScrollViewEvent]
136+
[EcsUguiSliderChangeEvent]
137+
[EcsUguiTmpDropdownChangeEvent]
138+
[EcsUguiTmpInputChangeEvent]
139+
[EcsUguiTmpInputEndEvent]
140+
[EcsUguiDropEvent]
141+
```
142+
## Действия
143+
Действия (классы `xxxAction`) - это `MonoBehaviour`-компоненты, которые слушают события uGui виджетов, ищут `EcsUiEmitter` по иерархии вверх и вызывают генерацию соответствующих событий для ECS-мира.
144+
145+
## Компоненты
146+
ECS-компоненты, описывающие события: `EcsUguiClickEvent`, `EcsUguiBeginDragEvent`, `EcsUguiEndDragEvent` и т.д. - все они являются стандартными ECS-компонентами и могут быть отфильтрованы с помощью `EcsFilter`:
147+
```c#
148+
public class TestUguiClickEventSystem : IEcsInitSystem, IEcsRunSystem {
149+
EcsPool<EcsUguiClickEvent> _clickEventsPool;
150+
EcsFilter _clickEvents;
151+
152+
public void Init (EcsSystems systems) {
153+
var world = systems.GetWorld ();
154+
_clickEventsPool = world.GetPool<EcsUguiClickEvent> ();
155+
_clickEvents = world.Filter<EcsUguiClickEvent> ().End ();
156+
}
157+
158+
public void Run (EcsSystems systems) {
159+
foreach (var entity in _clickEvents) {
160+
ref EcsUguiClickEvent data = ref _clickEventsPool.Get (entity);
161+
Debug.Log ("Im clicked!", data.Sender);
162+
}
163+
}
164+
}
165+
```
166+
167+
# Лицензия
168+
Фреймворк выпускается под двумя лицензиями, [подробности тут](./LICENSE.md).
169+
170+
В случаях лицензирования по условиям MIT-Red не стоит расчитывать на
171+
персональные консультации или какие-либо гарантии.

0 commit comments

Comments
 (0)