Бесконечное возрождение NPC
Класс динамический ему можно назначить время жизни и жизни то есть он может быть уничтожен.
Можно добавить для возраждения любой Character класс и назначить время через которое появляются новые боты.
MapObjectResNPC.cs
Код:using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using Engine; using Engine.EntitySystem; using Engine.MapSystem; using Engine.MathEx; using Engine.Renderer; using Engine.PhysicsSystem; using Engine.Utils; using ProjectCommon; using Engine.SoundSystem; namespace ProjectEntities { /// <summary> /// Defines the <see cref="InfluenceRegion"/> entity type. /// </summary> public class MapObjectResNPCType : DynamicType { [FieldSerialize] CharacterType characterType; [FieldSerialize] float respTimeType; [Description( "Character который будет возрождаться" )] public CharacterType CharacterType { get { return characterType; } set { characterType = value; } } [Description( "Время между пораждениями" )] public float RespTimeType { get { return respTimeType; } set { respTimeType = value; } } } public class MapObjectResNPC : Dynamic { float spawntime; MapObjectResNPCType _type = null; public new MapObjectResNPCType Type { get { return _type; } } protected override void OnPostCreate(bool loaded) { base.OnPostCreate(loaded);//при старте грузит spawntime = 0.0f;//переменная куда насчитвываються тики SubscribeToTickEvent();//подпись на событие таймера. } protected override void OnTick() { base.OnTick(); if (Type.Name != "Box") { spawntime += TickDelta;//на переменную насчитываються тики if(spawntime >= Type.RespTimeType) { CreateNPC();//создается объект spawntime = 0.0f;//обнуляется переменная для тиков } } return; } void CreateNPC() { //Создаем новый игровой объект MapObject RES = (MapObject)Entities.Instance.Create(Type.CharacterType, Map.Instance); //Задаем позицию RES.Position = GetInterpolatedPosition() + new Vec3( 0, 0, .1f ); //Завершаем инициализацию RES.PostCreate(); } } }