Skip to content

Commit

Permalink
* Изменение лицензии.
Browse files Browse the repository at this point in the history
  • Loading branch information
Leopotam committed Mar 27, 2022
0 parents commit 632e04d
Show file tree
Hide file tree
Showing 90 changed files with 1,891 additions and 0 deletions.
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
*.sln
.vscode
.idea
Library
bin
obj
Temp
.DS_Store
10 changes: 10 additions & 0 deletions Editor.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions Editor/Leopotam.EcsLite.Unity.Ugui.Editor.asmdef
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "Leopotam.EcsLite.Unity.Ugui.Editor",
"rootNamespace": "Leopotam.EcsLite.Unity.Ugui.Editor",
"references": [
"Leopotam.EcsLite.Unity.Ugui"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}
7 changes: 7 additions & 0 deletions Editor/Leopotam.EcsLite.Unity.Ugui.Editor.asmdef.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Editor/Widgets.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions Editor/Widgets/EcsUguiNonVisualWidgetInspector.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// ----------------------------------------------------------------------------
// The Proprietary or MIT-Red License
// Copyright (c) 2012-2022 Leopotam <[email protected]>
// ----------------------------------------------------------------------------

using UnityEditor;
using UnityEditor.UI;

namespace Leopotam.EcsLite.Unity.Ugui.Editor {
[CustomEditor (typeof (EcsUguiNonVisualWidget), false)]
[CanEditMultipleObjects]
sealed class EcsUguiNonVisualWidgetInspector : GraphicEditor {
public override void OnInspectorGUI () {
serializedObject.Update ();
EditorGUILayout.PropertyField (m_Script);
RaycastControlsGUI ();
serializedObject.ApplyModifiedProperties ();
}
}
}
13 changes: 13 additions & 0 deletions Editor/Widgets/EcsUguiNonVisualWidgetInspector.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 33 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
Copyright (c) 2012 - 2022 [email protected]

Данное программное обеспечение и сопутствующая документация (далее - Продукт)
выпускается на условиях двойного лицензирования - под собственнической/коммерческой
и MIT-Red лицензиями.

Условия использования под собственнической/коммерческой лицензии обсуждаются
индивидуально, для подробностей следует писать на электронную почту.

MIT-Red регулируется совокупностью следующих правил, если хотя бы
одно из них невыполнимо - использование Продукта запрещено:

Если вы за применение opensource программного обеспечения в
военной сфере - вы не можете использовать этот Продукт.

Если вы испытываете ненависть к русским или поддерживаете
любые нападки на них - вы не можете использовать этот Продукт.

Данная лицензия разрешает лицам, получившим копию данного Продукта,
безвозмездно использовать Программное обеспечение без ограничений, включая
неограниченное право на использование, копирование, изменение, слияние,
публикацию и распространение копий Продукта.

Указанное выше уведомление об авторском праве и данные условия должны быть
включены во все копии или значимые части данного Продукта.

ДАННЫЙ ПРОДУКТ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО
ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ,
СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО
НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ
ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ,
В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ
ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОДУКТОМ.
7 changes: 7 additions & 0 deletions LICENSE.md.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

171 changes: 171 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# LeoECS Lite uGui Bindings - поддержка событий uGui в ECS-мире
Интеграция событий uGui в ECS-мир.

> Проверено на Unity 2020.3 (зависит от Unity) и содержит asmdef-описания для компиляции в виде отдельных сборок и уменьшения времени рекомпиляции основного проекта.
> **ВАЖНО!** Зависит от [LeoECS Lite](https://github.com/Leopotam/ecslite) - зависимость должна быть установлена до установки этого модуля.
> **ВАЖНО!** Зависит от [LeoECS Lite - Расширенные системы](https://github.com/Leopotam/ecslite-extendedsystems) - зависимость должна быть установлена до установки этого модуля.
* [Установка](#Установка)
* [В виде unity модуля](#В-виде-unity-модуля)
* [В виде исходников](#В-виде-исходников)
* [Классы](#Классы)
* [EcsUguiEmitter](#EcsUguiEmitter)
* [EcsUguiCallbackSystem](#EcsUguiCallbackSystem)
* [Действия](#Действия)
* [Компоненты](#Компоненты)
* [Лицензия](#Лицензия)

# Социальные ресурсы
[![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.ecslite.unity.ugui": "https://github.com/Leopotam/ecslite-unity-ugui.git",
```
По умолчанию используется последняя релизная версия. Если требуется версия "в разработке" с актуальными изменениями - следует переключиться на ветку `develop`:
```
"com.leopotam.ecslite.unity.ugui": "https://github.com/Leopotam/ecslite-unity-ugui.git#develop",
```

## В виде исходников
Код так же может быть склонирован или получен в виде архива со страницы релизов.

# Классы

## EcsUguiEmitter
`EcsUiEmitter` является `MonoBehaviour`-классом, отвечающим за генерацию ECS-событий на основе uGui-событий (нажатие, отпускание, перетаскивание и т.п).
Должен быть размещен на корневом `GameObject`-е UI-иерархии (или хотя бы на корневом `Canvas`-е) и подключен к ECS-инфраструктуре через инспектор:
```c#
public class Startup : MonoBehaviour {
// Поле должно быть проинициализировано в инспекторе средствами редактора Unity.
[SerializeField] EcsUguiEmitter _uguiEmitter;

EcsSystems _systems;

void Start () {
_systems = new EcsSystems (new EcsWorld ());
_systems
.Add (new Test1System ())
.Add (new Test2System ())
// Этот вызов должен быть размещен после всех систем,
// в которых есть зависимость от uGui-событий.
.InjectUgui (_uguiEmitter)
.Init ();
}

void Update () {
_systems?.Update ();
}

void OnDestroy () {
if (_systems != null) {
_systems.GetWorld ("ugui-events").Destroy ();
_systems.GetWorld ().Destroy ();
_systems = null;
}
}
}

public class Test1System : IEcsInitSystem {
// Это поле будет автоматически инициализировано
// ссылкой на экземпляр эмиттера на сцене.
readonly EcsUguiEmitter _ugui = default;

GameObject _btnGo;
Transform _btnTransform;
Button _btn;

public void Init (EcsSystems systems) {
// Получение ссылки на виджет-действие с именем "MyButton".
_btnGo = _ugui.GetNamedObject ("MyButton");
// Чтение Transform-компонента с него.
_btnTransform = _ugui.GetNamedObject ("MyButton").GetComponent<Transform> ();
// Чтение Button-компонента с него.
_btn = _ugui.GetNamedObject ("MyButton").GetComponent<Button> ();
}
}
```
Пример выше можно упростить через `[EcsUguiNamedAttribute]`:
```c#
public class Test2System : IEcsInitSystem {
// Все поля будут автоматически заполнены ссылками
// на соответствующие компоненты с именованного виджета-действия.
[EcsUguiNamed("MyButton")] GameObject _btnGo;
[EcsUguiNamed("MyButton")] Transform _btnTransform;
[EcsUguiNamed("MyButton")] Button _btn;

public void Init (EcsSystems systems) {
// Все поля инициализированы и могут быть использованы здесь.
}
}
```

## EcsUguiCallbackSystem
Эта система дает возможность напрямую подписываться на uGui-события без дополнительного кода:
```c#
public class TestUguiClickEventSystem : EcsUguiCallbackSystem {
[Preserve] // Этот атрибут необходим для сохранения этого метода для il2cpp.
[EcsUguiClickEvent]
void OnAnyClick (in EcsUguiClickEvent evt) {
Debug.Log ("Im clicked!", evt.Sender);
}

// Этот метод будет вызван при нажатии на виджет с действием, имеющим имя "exit-button".
[Preserve]
[EcsUguiClickEvent("exit-button")]
void OnExitButtonClicked (in EcsUguiClickEvent evt) {
Debug.Log ("exit-button clicked!", evt.Sender);
}
}
```
Список поддерживаемых атрибутов действий:
```c#
[EcsUguiClickEvent]
[EcsUguiUpEvent]
[EcsUguiDownEvent]
[EcsUguiDragStartEvent]
[EcsUguiDragMoveEvent]
[EcsUguiDragEndEvent]
[EcsUguiEnterEvent]
[EcsUguiExitEvent]
[EcsUguiScrollViewEvent]
[EcsUguiSliderChangeEvent]
[EcsUguiTmpDropdownChangeEvent]
[EcsUguiTmpInputChangeEvent]
[EcsUguiTmpInputEndEvent]
[EcsUguiDropEvent]
```
## Действия
Действия (классы `xxxAction`) - это `MonoBehaviour`-компоненты, которые слушают события uGui виджетов, ищут `EcsUiEmitter` по иерархии вверх и вызывают генерацию соответствующих событий для ECS-мира.

## Компоненты
ECS-компоненты, описывающие события: `EcsUguiClickEvent`, `EcsUguiBeginDragEvent`, `EcsUguiEndDragEvent` и т.д. - все они являются стандартными ECS-компонентами и могут быть отфильтрованы с помощью `EcsFilter`:
```c#
public class TestUguiClickEventSystem : IEcsInitSystem, IEcsRunSystem {
EcsPool<EcsUguiClickEvent> _clickEventsPool;
EcsFilter _clickEvents;

public void Init (EcsSystems systems) {
var world = systems.GetWorld ();
_clickEventsPool = world.GetPool<EcsUguiClickEvent> ();
_clickEvents = world.Filter<EcsUguiClickEvent> ().End ();
}

public void Run (EcsSystems systems) {
foreach (var entity in _clickEvents) {
ref EcsUguiClickEvent data = ref _clickEventsPool.Get (entity);
Debug.Log ("Im clicked!", data.Sender);
}
}
}
```

# Лицензия
Фреймворк выпускается под двумя лицензиями, [подробности тут](./LICENSE.md).

В случаях лицензирования по условиям MIT-Red не стоит расчитывать на
персональные консультации или какие-либо гарантии.
9 changes: 9 additions & 0 deletions README.md.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Runtime.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Runtime/Actions.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 632e04d

Please sign in to comment.