/// <summary> /// Перехват события когда что-то было уничтожено, получило повреждения или только что создано /// </summary> public void UIEventChange(Thing thing, bool distroy = false, bool newSpawn = false) { Loger.Log("HostAttackUpdate UIEventChange " + thing.GetType().ToString() + " " + thing.Label + " id=" + thing.thingIDNumber + (distroy ? " distroy!" : "") + (newSpawn ? " newSpawn!" : "")); var tId = thing.thingIDNumber; lock (ToSendListsSync) { if (distroy) { if (!ToSendDeleteId.Contains(tId)) { ToSendDeleteId.Add(tId); } } else if (newSpawn) { ToSendThingAdd.Add(thing); } else { if (!ToUpdateStateId.Contains(tId)) { ToUpdateStateId.Add(tId); ToUpdateState.Add(thing); } } } }
/// <summary> /// Перехват события когда что-то было уничтожено, получило повреждения или только что создано /// </summary> public void UIEventChange(Thing thing, bool distroy = false, bool newSpawn = false) { Loger.Log("HostAttackUpdate UIEventChange " + thing.GetType().ToString() + " " + thing.Label + " id=" + thing.thingIDNumber + (distroy ? " distroy!" : "") + (newSpawn ? " newSpawn!" : "") + (thing is Corpse ? " Corpse" : "")); var tId = thing.thingIDNumber; lock (ToSendListsSync) { if (distroy) { if (!ToSendDeleteId.Contains(tId)) { ToSendDeleteId.Add(tId); } } else if (newSpawn) { if (thing is Corpse && (thing as Corpse).InnerPawn != null) { //трупы обрабатываем отдельно: передаем труп не как объект, а как редактирование состояния пешки - // она сама станет трупом + после изменеия состояния удалить из словарей, чтобы её не удалили // (да ID созданного трупа будет не синхронизированно, но считаем что с ними ничего не будут делать) //todo здесь, а также изменить у атакующего: когда пришла команда удалить пешку, то // задержать команду на 1 цикл (новый массив) var corpse = thing as Corpse; ToSendNewCorpse.Add(corpse.InnerPawn); } else { ToSendThingAdd.Add(thing); } } else { if (!ToUpdateStateId.Contains(tId)) { ToUpdateStateId.Add(tId); ToUpdateState.Add(thing); } } } }