/// <summary> /// Setup the CESharp EntityFramework, including registering of discovered CESharp entity classes and assumption of already spawned CESharp entites. /// </summary> public static void Instantiate(InterDomainHandler handler) { EntityProperty.RegisterConverters(); s_managedEntities = new Dictionary <uint, BaseEntity> (); s_entityClassRegistry = new EntityClassRegistry(); s_entityClassRegistry.RegisterAll(); s_entitySystemSink = new EntitySystemSink(); s_entitySystemSink.Spawn += OnSpawn; s_entitySystemSink.Event += OnEvent; s_entitySystemSink.Remove += OnRemove; s_entityUpdateListener = new EntityUpdateListener(); s_entityUpdateListener.Update += OnUpdate; // Assume already spawned entities IEntityIt it = Global.gEnv.pEntitySystem.GetEntityIterator(); if (it != null) { it.MoveFirst(); IEntity pEntity = null; while (!it.IsEnd()) { pEntity = it.Next(); EntityClass managedClass = s_entityClassRegistry.GetEntityClass(pEntity); if (managedClass == null) { continue; } Log.Info("[EntityFramework] Assume entity: {0} ({1})", pEntity.GetName(), managedClass.ProtoType.Name); BaseEntity instance = managedClass.CreateInstance(pEntity); handler.RetrieveEntity(instance); s_managedEntities.Add(pEntity.GetId(), instance); } } }