/// <summary> /// Send out a <see cref="CyclopsDamage"/> packet /// </summary> private void BroadcastDamageState(SubRoot subRoot, Optional <DamageInfo> info) { string subGuid = GuidHelper.GetGuid(subRoot.gameObject); LiveMixin subHealth = subRoot.gameObject.RequireComponent <LiveMixin>(); if (subHealth.health > 0) { DamageInfoData damageInfo = null; if (info.IsPresent()) { DamageInfo damage = info.Get(); // Source of the damage. Used if the damage done to the Cyclops was not calculated on other clients. Currently it's just used to figure out what sounds and // visual effects should be used. DamageInfoData serializedDamageInfo = new DamageInfoData(subGuid, damage.dealer != null ? GuidHelper.GetGuid(damage.dealer) : string.Empty, damage.originalDamage, damage.damage, damage.position, damage.type); } int[] damagePointIndexes = GetActiveDamagePoints(subRoot).ToArray(); CyclopsFireData[] firePoints = GetActiveRoomFires(subRoot.GetComponent <SubFire>()).ToArray(); CyclopsDamage packet = new CyclopsDamage(subGuid, subRoot.GetComponent <LiveMixin>().health, subRoot.damageManager.subLiveMixin.health, subRoot.GetComponent <SubFire>().liveMixin.health, damagePointIndexes, firePoints, damageInfo); packetSender.Send(packet); } else { // RIP CyclopsDestroyed packet = new CyclopsDestroyed(subGuid); packetSender.Send(packet); } }
/// <param name="guid"><see cref="SubRoot"/> Guid.</param> /// <param name="subHealth"><see cref="SubRoot.liveMixin.health"/>.</param> /// <param name="damageManagerHealth"><see cref="CyclopsExternalDamageManager.subLiveMixin.health"/>.</param> /// <param name="subFireHealth"><see cref="SubFire.liveMixin.health"/>.</param> /// <param name="damagePointIndexes"><see cref="CyclopsExternalDamageManager.damagePoints"/> where <see cref="GameObject.activeSelf"/>. /// Null if only a Cyclops health change.</param> /// <param name="roomFires"><see cref="SubFire.RoomFire.spawnNodes"/> where <see cref="Transform.childCount"/> > 0. /// Null if only a Cyclops health change.</param> /// <param name="damageInfo">Null if a repair or extinguish.</param> public CyclopsDamage(string guid, float subHealth, float damageManagerHealth, float subFireHealth, int[] damagePointIndexes, CyclopsFireData[] roomFires, DamageInfoData damageInfo = null) { Guid = guid; SubHealth = subHealth; DamageManagerHealth = damageManagerHealth; SubFireHealth = subFireHealth; DamagePointIndexes = damagePointIndexes; RoomFires = roomFires; DamageInfo = damageInfo; }