Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
 /// <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;
 }