Exemplo n.º 1
0
            public void ReadHealthSegments(BinaryReader reader)
            {
                for (int i = 0; i < HealthSegments.Length; i++)
                {
                    HealthSegment SegmentItem = new HealthSegment();
                    SegmentItem.ReadFromFile(reader);
                    HealthSegments[i] = SegmentItem;
                }

                for (int i = 0; i < HealthSegments.Length; i++)
                {
                    HealthSegment SegmentItem = HealthSegments[i];
                    SegmentItem.ReadArrayData(reader);
                }

                for (int i = 0; i < DamageLimiterGraph.Length; i++)
                {
                    XBinVector2 NewVector = new XBinVector2();
                    NewVector.ReadFromFile(reader);
                    DamageLimiterGraph[i] = NewVector;
                }

                for (int i = 0; i < DangerBarDistanceMults.Length; i++)
                {
                    XBinVector2 NewVector = new XBinVector2();
                    NewVector.ReadFromFile(reader);
                    DangerBarDistanceMults[i] = NewVector;
                }
            }
Exemplo n.º 2
0
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //Called whenever damage is taken by a segment to update the recharge states of either the damaged segment or all segments
 internal void damageTaken(HealthSegment segment)
 {
     //Reset all the segment recharges
     if (universalReset)
     {
         //Iterate through all segments
         for (int i = 0; i < segmentArray.Length; i++)
         {
             //Only reset timer if damage reset is enabled
             if (segmentArray[i].damageResetsRecharge)
             {
                 segmentArray[i].rechargeTimer = segmentArray[i].rechargeDelay;
             }
         }
     }
     //Otherwise we only reset this segment
     else
     {
         //Only reset timer if damage reset enabled
         if (segment.damageResetsRecharge)
         {
             segment.rechargeTimer = segment.rechargeDelay;
         }
     }
 }
Exemplo n.º 3
0
 public HealthSystemItem()
 {
     HealthSegments         = new HealthSegment[0];
     DamageLimiterGraph     = new XBinVector2[0];
     DangerBarDistanceMults = new XBinVector2[0];
     Name = "";
     DefaultEffectName = new XBinHashName();
 }
Exemplo n.º 4
0
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Takes two arrays of strings (parmeter and segment specialTags) and compares the elements of each, returning true
    //if any matches are found and false if no strings match in the arrays
    private bool stringMatched(string[] newTags, HealthSegment segment)
    {
        //Iterate through both string arrays to check each comparison
        foreach (string tag in segment.specialTags)
        {
            foreach (string newTag in newTags)
            {
                //If we find a match we return true
                if (tag.Equals(newTag))
                {
                    return(true);
                }
            }
        }

        //No match was found, return false
        return(false);
    }
Exemplo n.º 5
0
            public void ReadFromFile(BinaryReader Reader)
            {
                uint SegmentOffset = Reader.ReadUInt32();
                uint NumSegments   = Reader.ReadUInt32();
                uint NumSegments2  = Reader.ReadUInt32();

                HealthSegments = new HealthSegment[NumSegments];

                uint DamageLimiterGraphOffset = Reader.ReadUInt32();
                uint NumGraphElements0        = Reader.ReadUInt32();
                uint NumGraphElements1        = Reader.ReadUInt32();

                DamageLimiterGraph = new XBinVector2[NumGraphElements0];

                uint DamageBarDistanceOffset       = Reader.ReadUInt32();
                uint NumDamageBarDistanceElements0 = Reader.ReadUInt32();
                uint NumDamageBarDistanceElements1 = Reader.ReadUInt32();

                DangerBarDistanceMults = new XBinVector2[NumDamageBarDistanceElements0];

                DefaultRegeneration              = Reader.ReadSingle();
                DefaultCriticalSize              = Reader.ReadSingle();
                DefaultDamageTimeout             = Reader.ReadSingle();
                DefaultSize                      = Reader.ReadSingle();
                DefaultDamageGoesOver            = Convert.ToBoolean(Reader.ReadInt32());
                DefaultNoDmgTimeAfterSegmentDown = Reader.ReadSingle();
                Name = StringHelpers.ReadStringBuffer(Reader, 32).TrimEnd('\0');
                RegOnTakedownAmount        = Reader.ReadSingle();
                RegOnTakedownTime          = Reader.ReadSingle();
                RegOnTakedownExceedSegment = Convert.ToBoolean(Reader.ReadInt16());
                SegmentsCntToChangeColor   = Reader.ReadUInt16();
                DefaultEffectName.ReadFromFile(Reader);
                DefaultEffectMaxOpacity    = Reader.ReadSingle();
                DangerBarSize              = Reader.ReadSingle();
                DangerBarRegenerationDelay = Reader.ReadSingle();
                DangerBarRegenerationTime  = Reader.ReadSingle();
                LethalDmgClampMultiplier   = Reader.ReadSingle();
                AfterClampNoDmgTime        = Reader.ReadSingle();
            }
Exemplo n.º 6
0
        /// <summary>
        /// Нанести урон персонажу
        /// </summary>
        public void TakeDamage(AbilityTypes type, int damage)
        {
            HealthSegment healthSegment = GetSegmentForTakeDamage(type);

            if (healthSegment != null)
            {
                //Нанести  урон
                healthSegment.TakeDamage(damage);

                //Обновить UI
                m_UIHealthBarController.UpdateUI(type, healthSegment.CurHealth);

                //Персонаж уничтожен
                if (CreatureIsDestroyed())
                {
                    if (OnDestroy != null)
                    {
                        OnDestroy();
                    }
                }
                else //Нанесен урон
                {
                    if (OnTakeDamage != null)
                    {
                        OnTakeDamage(healthSegment.Type, healthSegment.CurHealth);
                    }
                }
            }
            else //Урон не подходящей способностью
            {
                if (OnWrongAbility != null)
                {
                    OnWrongAbility(type);
                }
            }
        }