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; } }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //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; } } }
public HealthSystemItem() { HealthSegments = new HealthSegment[0]; DamageLimiterGraph = new XBinVector2[0]; DangerBarDistanceMults = new XBinVector2[0]; Name = ""; DefaultEffectName = new XBinHashName(); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //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); }
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(); }
/// <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); } } }