среда, 25 сентября 2013 г.

Класс для описания частей юнитов вроде готов

Класс PartUnitClass
Я решил во все классы от PartUnistClass и крупнее сделать с функциями загрузки которые принимают параметры StartScan и StopScan обозначающие начальную и последнюю строку в массиве который они должны просматривать, и с передачей массива по ссылке, что позволит не создавать в памяти много копий строк массива при загрузке.
' Gambas class file

  'PartUnitClass
 
  Public HP As Integer ' здоровье
  Public Armor As Integer ' броня
  Public HpArmor As Integer ' целостность брони
  Public ArmorK As Integer ' коэффициент повреждаемости брони, в процентах
  Public MinimalDemageArmor As Integer ' минимальный предел наносимого повреждения, если наносимое повреждение меньше, то оно не имеет значения
  Public ChanceDemage As Integer ' процент покрытия бронёй, проще говоря вероятность того что броня примет урон на себя
 
  Public MaxHP As Integer ' предел здоровья
  Public MaxArmor As Integer ' предел брони
 
  Public Weight As Integer ' масса в граммах
  Public Power As Integer ' сила в ньютонах
  ' 40 байт
 
  'надо будет предусмотреть параметры регенерации
 
  Public OtherValues As New GroupUniversalValues ' прочие значения в универсальных типах
  '+20 байта
 
Public Sub LoadClass(ByRef DataArray As String[], Optional StartLoad As Integer = 0, StopLoad As Integer = -1)  'загрузка класса из массива строк
  'Так же принимает StartLoad и StopLoad для ограничения просматриваемой в массиве области
  Dim sData As New ClassStringData ' класс для операций со строками
  Dim a As Integer '
  Dim oValues As String[] ' массив для OtherValues
  Dim m As Integer
  Dim BeginOV As Integer ' та строка после которой идут свойства OtherValues
  Dim OP As String ' оператор
  Dim Value As String ' параметр оператора
 
  m = DataArray.Max
  If StopLoad <> -1 Then m = StopLoad
 
  BeginOV = sData.FindStringIndex(DataArray, "begin other-values", StartLoad, StopLoad) ' где закнчиваются основные свойства и начинаються дополнительные
     
  For a = StartLoad To BeginOV ' просмотр от начала описания до начала описания дополнительных свойств
    'присвоение базовых свойств объекта
    OP = sData.GetOpS(DataArray[a])
    Value = sData.GetValueS(DataArray[a]) ' выборка значений из строки
       
    'присвоение нужных свойств
    If OP = "hp" Then
      'HP
      HP = Val(Value)
    Endif
    If OP = "armor" Then
      'Armor
      Armor = Val(Value)
    Endif
    If OP = "hp-armor" Then
      'HpArmor
      HpArmor = Val(Value)
    Endif
    If OP = "armork" Then
      'ArmorK
      ArmorK = Val(Value)
    Endif
    If OP = "minimal-demage-armor" Then
      'MinimalDemageArmor
      MinimalDemageArmor = Val(Value)
    Endif
    If OP = "chance-demage" Then
      'ChanceDemage
      ChanceDemage = Val(Value)
    Endif
    If OP = "max-hp" Then
      'MaxHP
      MaxHP = Val(Value)
    Endif
    If OP = "weight" Then
      ' Weight
      Weight = Val(Value)
    Endif
    If OP = "power" Then
      ' Power
      Power = Val(Value)
    Endif
    If OP = "" Then
      '
      ' = Val(Value)
    Endif
       
  Next
 
  ' Присваивание OtherValues
  oValues = sData.CopyStringArray(DataArray, BeginOV, m) ' получение массива с OtherValues (копирование фрагмента из основного)
  OtherValues.LoadClass(oValues) ' зарузка нужных строк в OtherValues
 
End

Public Function SaveClass() As String[]
  ' Функция возвращает строковый массив вмещающий данные класса.
  Dim rArray As New String[] ' возвращаемый массив
  Dim oValues As String[] ' прочие значения из массива OtherValues
  Dim a As Integer ' счётчик цикла
  Dim m As Integer ' ограничитель цикла
 
  rArray.Add("begin part-unit") ' начало описания
  rArray.Add("hp=" & LTrim(Val(HP))) ' HP
  'rArray.Add("=" & LTrim(Val())) '
  rArray.Add("armor=" & LTrim(Val(Armor))) ' Armor
  rArray.Add("hp-armor=" & LTrim(Val(HpArmor))) ' HpArmor
  rArray.Add("armorK=" & LTrim(Val(ArmorK))) ' ArmorK
  rArray.Add("minimal-demage-armor=" & LTrim(Val(MinimalDemageArmor))) ' MinimalDemageArmor
  rArray.Add("chance-demage=" & LTrim(Val(ChanceDemage))) ' ChanceDemage
  rArray.Add("max-hp=" & LTrim(Val(MaxHP))) ' MaxHP
  rArray.Add("weight=" & LTrim(Val(Weight))) ' Weight
  rArray.Add("power=" & LTrim(Val(Power))) ' Power
  'rArray.Add("=" & LTrim(Val())) ' для сохранения других общих свойств
 
  oValues = OtherValues.SaveClass() ' сохранение остальных свойств объекта
 
  m = oValues.Max
  For a = 0 To m
    ' добавление в массив нужных значений
    rArray.Add(oValues[a])
  Next
 
  rArray.Add("end part-unit") ' конец описания
  Return rArray ' возврат значения
 
End

Комментариев нет:

Отправить комментарий