예제 #1
0
        /// <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);
                    }
                }
            }
        }
예제 #2
0
        /// <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);
                    }
                }
            }
        }