Перейти к содержимому
BattleFrame

[UB2] Умный dataHub

В этой теме 1 комментарий

Рекомендуемые комментарии

5 845
[GA]
Разработчик, Коллекционер
3 874 публикации
24 467 боёв

Smart Datahub

Представлен в UB2 следующими типами данных: dhdhEntitydhComponent и dhCollection. Обеспечивает возможность автоматически подписываться на события и тонко настраивать взаимодействие с ними.

 

1. Автоматическая подписка

Одна из основных особенностей Smart Datahub - возможность автоматически подписываться на распространённые события, такие как collection.evChildAdded и collection.evChildRemoved, к примеру.

По умолчанию она  ВКЛЮЧЕНА!  Не забывайте выключать её в местах, где она не нужна.

 

Для того чтобы отключить автоподписку, достаточно прописать autoUpdate=false в биндинге (по аналогии с (watch=true) или (init=true)). Тогда никаких подписок создано не будет и биндинг будет работать только с событиями, прописанными вручную.

Пример:

(scope
    (var myEntity:dhComponent= "getSingleComponent(CC.testComponent)" autoUpdate=false)
)

Список ивентов, на которые автоматически подписываются методы:

Скрытый текст

 

Метод Возвращаемый тип Описание Подписки на события при autoUpdate = "true"
getSingleEntity dhEntity Получить первую сущность из подколлекции с указанным classId и путём - Если подколлеция ещё не существует: baseCollection.evСhildAdded
- Если подколлеция уже существует: baseCollection.evСhildRemoved
- baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
getCollectionByPath dhCollection Получить подколлекцию по classId и пути (уникальному идентификатору подколлекции) - Если подколлеция ещё не существует: baseCollection.evСhildAdded
- Если подколлеция уже существует: baseCollection.evСhildRemoved
getSingleComponent dhComponent Получить первую сущность из коллекции и взять соответствующую компоненту - baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
- entity.evAdded (если компоненты ещё нет)
- entity.evRemoved (если компонента уже есть)
getPrimaryComponent dhComponent Получить сущность из коллекции по первичному ключу и взять соответствующую компоненту - baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
- entity.evAdded (если компоненты ещё нет)
- entity.evRemoved (если компонента уже есть)
getPrimaryEntity dhEntity Получить сущность из коллекции по первичному ключу - baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
getPrimaryCompositeEntity dhEntity Конкатенировать параметры в первичный ключ и получить сущность по этому ключу из коллекции - baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
getSingleEntity dhEntity Получить первую сущность из коллекции с указанным classId - baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
getEntity dhEntity Получить сущность по id  
getCollection dhCollection Получить коллекцию по classId  

 

2. Типы данных

2.1 Entity object

Сущности (Entities) хранятся в коллекциях (Collections), а также могут быть получены по идентификатору из объекта datahub. В Smart datahub сущности имеют тип dhEntity. Вы можете получить доступ к компонентам объекта с синтаксисом .dot, то есть:

(var myAutoEntity:dhEntity = "getPrimaryEntity(CC.test, 'id')")
(var myComponent:dhComponent = "myAutoEntity.test")

Сущности имеют два события:

  • evAdded - вызывается при добавлении компонента в сущность. Автоматическая подписка по переменным.
  • evRemoved - вызывается при удалении компонента из сущности. Автоматическая подписка по переменным.

 

Примеры:

(var waveHitDanger:dhComponent = "entity.waveHitDanger" autoUpdate=false (event "entity.evAdded"))
(var diplomacyRelationComponent:dhComponent = "entity.diplomacyRelation" autoUpdate=false (event "entity.evAdded") (event "entity.evRemoved"))

Список ивентов, на которые автоматически подписываются методы:

Скрытый текст

 

Метод Возвращаемый тип Описание Подписки на события при autoUpdate = "true"
.component dhComponent Получить компоненту нужного класса - entity.evAdded (если компоненты ещё нет)
- entity.evRemoved (если компонента уже есть)
getComponent dhComponent Получить компоненту нужного класса по classId - entity.evAdded (если компоненты ещё нет)
- entity.evRemoved (если компонента уже есть)
hasComponent bool Проверить, есть ли компонента нужного класса в сущности - entity.evAdded (если компоненты ещё нет)
- entity.evRemoved (если компонента уже есть)

 

 

2.2 Collection object

Коллекция - это набор сущностей, которые имеют общий компонент. Коллекции и компоненты очень близки, но коллекция содержит только сущности и не содержит никаких свойств.

В Smart datahub коллекции имеют тип dhCollection.

 

Использование коллекций:

  • getCollection(CC.someComponentName) - возвращает коллекцию сущностей, содержащих указанный компонент.
    • (var markersCollection:dhCollection = "$datahub.getCollection(CC.worldMarker)")
  • getChildByPath('collectionName') - дает доступ к подколлекциям по их имени.
    • (var visibleDangers:dhCollection = "getCollection(CC.visibleDanger)")
      (var searchPointCol:dhCollection = "visibleDangers.getChildByPath('submarineSearchPoints')")
  • firstEntity() - позволяет получить первую сущность, включающую в себя указанный компонент (подходит для использования, если в коллекции только один элемент (getSingleEntity), или если нужно взять любой элемент)
    • (var visibleDangers:dhCollection = "getCollection(CC.visibleDanger)")
      (var firstVisibleDanger:dhEntity = "visibleDangers.firstEntity()")

 

События коллекций:

  • evAdded - Вызывается при добавлении объекта в коллекцию. Автоматическая подписка по переменным.
    • (var diplomacyRelationCollection:dhCollection = "getCollection(CC.diplomacyRelation)")
      (vardiplomacyRelationComponent:dhComponent = "entity.diplomacyRelationComponent" autoUpdate=false (event "diplomacyRelationCollection.evAdded"))
  • evRemoved - Вызывается при удалении объекта из коллекции. Автоматическая подписка по переменным.
    • (var diplomacyRelationCollection:dhCollection = "getCollection(CC.diplomacyRelation)")
      (var diplomacyRelationComponent:dhComponent = "entity.diplomacyRelation" autoUpdate=false (event "diplomacyRelationCollection.evAdded") (event "diplomacyRelationCollection.evRemoved"))
  • evUpdated - Сортированная коллекция - это тип коллекции, компоненты которой организованы в определенном порядке. Во всех остальных аспектах это обычная коллекция. Вызывается при обновлении сортировки. Автоматическая подписка по переменным.
    • (var itemsList:array = "col.items" autoUpdate=false (event "col.evUpdated"))
  • evChildAdded - Вызывается при добавлении дочерней коллекции.
    • (var realPlayersCollection:dhCollection = "collection.getChildByPath('realPlayers')"  autoUpdate=false(event "collection.evChildAdded") (event "collection.evChildRemoved"))
  • evChildRemoved - Вызывается при удалении дочерней коллекции.
    • (var allyCollection:dhCollection = "collection ? collection.getChildByPath('team.ally.alive') : null"  autoUpdate=false(event "collection.evChildAdded") (event "collection.evChildRemoved"))

Список ивентов, на которые автоматически подписываются методы:

Скрытый текст

 

Метод Возвращаемый тип Описание Подписки на события при autoUpdate = "true"
collection[index] dhEntity Получить сущность по индексу - baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
collection.length Number Получить размер коллекции - baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
collection.items Array[GFX] Получить массив элементов коллекции.
Deprecated! Метод всё ещё доступен, но имеются планы по его упразднению!
 
getEntityByKey dhEntity Получить из коллекции сущность по первичному ключу - baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
getEntityAtIndex dhEntity Получить сущность по индексу - baseCollection.evAdded (для всех кроме сортинга)
- baseCollection.evRemoved (для всех кроме сортинга)
- baseCollection.evUpdated (для сортинга)
child dhCollection Получить дочернюю коллекцию по id - Если подколлеция ещё не существует: baseCollection.evСhildAdded
- Если подколлеция уже существует: baseCollection.evСhildRemoved
getChildByPath dhCollection Получить дочернюю коллекцию по пути - Если подколлеция ещё не существует: baseCollection.evСhildAdded
- Если подколлеция уже существует: baseCollection.evСhildRemoved
hasChildByPath dhCollection Проверить наличие дочерней коллекции по пути - Если подколлеция ещё не существует: baseCollection.evСhildAdded
- Если подколлеция уже существует: baseCollection.evСhildRemoved
getFullPath String Получить полный путь к коллекции.  

 


2.3 Component object

Компоненты - это объекты, содержащие реальные данные. Вы можете получить доступ к свойствам компонента с помощью синтаксиса .dot:

(var myEntity:dhEntity = "getEntity(123)")
(var goodComponent:dhComponent = "myEntity.goodComponent")
(var propertyOfGoodComponent:int = "goodComponent.someProperty")

 

Любое арифметическое действие при участии null вернет результат null.

#Рассмотрим ситуацию, когда элемент существует, а какой-то энтити или компонента нет.
(scope
    # Здесь в ownCarrierComponent будет записан Null, если мы не на авианосцк или гибриде с авиагруппой
    (var ownCarrierComponent:dhComponent = "getSingleComponent(CC.aircarrier)")

    #Даже если ownCarrierComponent будет Null, то выражение ownCarrierComponent.activeSquadron тоже вернёт Null
    #Также вместо полноценного тернарника можно использовать сокращённую форму
    (var activeSquadron:number = "ownCarrierComponent.activeSquadron ?: ActiveSquadron.NONE" (event "ownCarrierComponent.evStateChanged"))

 

 

 

  • Плюс 2

Рассказать о публикации


Ссылка на публикацию
Гость
Эта тема закрыта для публикации новых ответов.

×