Skip to content

Instantly share code, notes, and snippets.

@killofwin
Created January 9, 2014 09:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save killofwin/8331932 to your computer and use it in GitHub Desktop.
Save killofwin/8331932 to your computer and use it in GitHub Desktop.
Public Function GetSymmetryDuplication(Part As PartUnitClass) As Boolean[]
'Функция возвращает в виде битовой маски симметрию дублирования части
'Данная функция универсальна и работает со всем созданными в 2D редакторе (первом) проектами частей юнитов
Dim r As New Boolean[32] ' результат в массиве размером 32 бита,
' больше смысла нет, так как переменная определяющая симметрию занимает 32 бита (на 32 разрядных системах)
' Нулевой бит отвечает за саму же конечность и игнорируеться.
' Анализ результатов следует проводить с элемента 1.
' На всякий случай в качестве ограничителя счётчика используйте переменную со значением r.Max
' Использование же числа 31 = (32 - 1) может привести к несовместимости если процедура симметрии будет изменена на более сложную
Dim GODC As New GameObjectDataClass ' содержит нужные данные редактора
Dim LinkGODC As Integer ' ссылка на данные редактора в свойствах части юнита.
Dim a As Integer ' счётчик циклов
Dim b As Integer ' второй счётчик
Dim m As Integer
LinkGODC = Part.OtherValues.FindRangeID(Editor2dRangeMinID, Editor2dRangeMaxID) ' Для начала ищем описания характерные для Editor2D
If LinkGODC <> -1 Then
'свойство найдено
If TypeOf(Part.OtherValues.Values[LinkGODC]) = TypeOf(GODC) Then GODC = Part.OtherValues.Values[LinkGODC] ' присвоение ссылки для удобства (но только если типы совпадают)
If LinkGODC = Editor2dPartUnitMorfid Then ' это часть морфида первого типа
' а теперь вычислим симметрию дублирования этой части
m = r.Max
For a = 1 To m
'симметрия рассматриваеться включительно, то есть нулевой бит в маске указывает на саму же конечность
r[a] = BTst(GODC.IntegerValues[PropertyPartUnitMorfidMaskD], a) ' считываем маску дублирования по битам из переданной части
Next
Endif
' Другие типы юнитов 2D редактора
Endif
Return r
End
Public Function GetSymmetryBlocking(Part As PartUnitClass) As Boolean[]
'Функция возвращает в виде битовой маски симметрию блокирования части
'Данная функция универсальна и работает со всем созданными в 2D редакторе (первом) проектами частей юнитов
Dim r As New Boolean[32] ' результат в массиве размером 32 бита,
' больше смысла нет, так как переменная определяющая симметрию занимает 32 бита (на 32 разрядных системах)
' Нулевой бит отвечает за саму же конечность и игнорируеться.
' Анализ результатов следует проводить с элемента 1.
' На всякий случай в качестве ограничителя счётчика используйте переменную со значением r.Max
' Использование же числа 31 = (32 - 1) может привести к несовместимости если процедура симметрии будет изменена на более сложную
Dim GODC As New GameObjectDataClass ' содержит нужные данные редактора
Dim LinkGODC As Integer ' ссылка на данные редактора в свойствах части юнита.
Dim a As Integer ' счётчик циклов
Dim b As Integer ' второй счётчик
Dim m As Integer
LinkGODC = Part.OtherValues.FindRangeID(Editor2dRangeMinID, Editor2dRangeMaxID) ' Для начала ищем описания характерные для Editor2D
If LinkGODC <> -1 Then
'свойство найдено
If TypeOf(Part.OtherValues.Values[LinkGODC]) = TypeOf(GODC) Then GODC = Part.OtherValues.Values[LinkGODC] ' присвоение ссылки для удобства (но только если типы совпадают)
If LinkGODC = Editor2dPartUnitMorfid Then ' это часть морфида первого типа
' а теперь вычислим симметрию блокирования этой части
m = r.Max
For a = 1 To m
'симметрия рассматриваеться включительно, то есть нулевой бит в маске указывает на саму же конечность
r[a] = BTst(GODC.IntegerValues[PropertyPartUnitMorfidMaskD], a) ' считываем маску блокирования по битам из переданной части
Next
Endif
' Другие типы юнитов 2D редактора
Endif
Return r
End
@littlebylittle
Copy link

Пжздц как вырвиглазно выглядит
К такому надо привыкнуть.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment