public void Update() { foreach (var kvp in _ships) { IShip s = kvp.Value; float oldHealth = s.CurrentHealth; s.Update(); if (oldHealth != s.CurrentHealth && TimeKeeper.MsSinceInitialization - s.LastHealthUpdateTime >= s.HealthUpdatePeriod) { var data = new MessageSetHealth(); data.HealthData.Add(new HealthData() { Health = (int)s.CurrentHealth, Shields = (int)s.Shields.CurrentShields, Energy = (int)s.CurrentEnergy }); s.GetPlayer().SendMessage(new NetworkMessageContainer(data, MessageTypes.SetHealth)); s.LastHealthUpdateTime = TimeKeeper.MsSinceInitialization; } if (s.IsDead) { if (TimeKeeper.MsSinceInitialization - s.KillTimeStamp > s.RespawnTimeDelay) { ReviveShip(s.Id, _areaLocator.GetArea(s.ReviveAreaID == null?_areaLocator.SolAreaID:s.ReviveAreaID), .2f, 0); } } } }
/// <summary> /// Set debuffsToAdd to null if there are none to add /// </summary> /// <param name="s"></param> /// <param name="debuffsToAdd">Debuffs added since the last damage was sent</param> public void SendShipDamage(IShip s, Dictionary <DebuffTypes, int> debuffsToAdd = null) { MessageSetHealth data = new MessageSetHealth(); HealthData hd = new HealthData() { ShipID = s.Id, Health = (int)s.CurrentHealth, Shields = (int)s.Shields.CurrentShields, Energy = (int)s.CurrentEnergy }; if (debuffsToAdd != null) { foreach (var kvp in debuffsToAdd) { hd.DebuffTypesToAdd.Add(kvp.Key); hd.DebuffCountsToAdd.Add(kvp.Value); } } data.HealthData.Add(hd); s.GetPlayer().SendMessage(new NetworkMessageContainer(data, MessageTypes.SetHealth)); }