コード例 #1
0
        private IActorRef CreateActor(WorldActorState state, CreatePlayerEntityActorMessage message)
        {
            //Create the actor and tell it to initialize.
            IActorRef actorRef = state.WorldActorFactory.ActorOf(Resolver.Create <DefaultPlayerEntityActor>(), message.EntityGuid.RawGuidValue.ToString());

            DefaultPlayerEntityActor.InitializeActor(actorRef, new DefaultPlayerEntityActorState(EntityDataMappable.RetrieveEntity(message.EntityGuid), message.EntityGuid, InterestMappable.RetrieveEntity(message.EntityGuid), SendServiceMappable.RetrieveEntity(message.EntityGuid)));

            //Actors aren't removed from this
            //they are just replaced with nobody.
            if (ActorRefMappable.ContainsKey(message.EntityGuid))
            {
                //If nobody, all good. Otherwise THIS SHOULD NEVER HAPPEN
                if (ActorRefMappable[message.EntityGuid].IsNobody())
                {
                    ActorRefMappable.ReplaceObject(message.EntityGuid, actorRef);
                }
                else
                {
                    throw new InvalidOperationException($"World attempted to spawn multiple of the same player actor/");                     //this will literally kill the world actor.
                }
            }
            else
            {
                ActorRefMappable.AddObject(message.EntityGuid, actorRef);
            }

            if (Logger.IsInfoEnabled)
            {
                Logger.Info($"Created Player Actor: {typeof(DefaultPlayerEntityActor)} for Entity: {message.EntityGuid}");
            }

            return(actorRef);
        }
コード例 #2
0
        private void CreateActor(WorldActorState state, CreateGameObjectEntityActorMessage message)
        {
            //Even visual objects now get actors
            EntityActorCreationResult actorCreationData = EntityActorFactory.Create(message.EntityGuid);

            //Create the actor and tell it to initialize.
            IActorRef actorRef = state.WorldActorFactory.ActorOf(Resolver.Create(actorCreationData.DesiredActorType), message.EntityGuid.RawGuidValue.ToString());

            actorRef.Tell(actorCreationData.InitializationMessage);

            ActorRefMappable.AddObject(message.EntityGuid, actorRef);

            if (Logger.IsInfoEnabled)
            {
                Logger.Info($"Created GameObject Actor: {actorCreationData.DesiredActorType} for Entity: {message.EntityGuid}");
            }
        }
コード例 #3
0
        private void CreateActor(WorldActorState state, CreateCreatureEntityActorMessage message)
        {
            //Create the actor and tell it to initialize.
            IActorRef actorRef = state.WorldActorFactory.ActorOf(Resolver.Create <DefaultCreatureEntityActor>(), message.EntityGuid.RawGuidValue.ToString());

            //TODO: Move to factory.
            CreatureInstanceModel instanceModel = CreatureInstanceMappable.RetrieveEntity(message.EntityGuid);
            CreatureTemplateModel templateModel = CreatureTemplateMappable.RetrieveEntity(message.EntityGuid);

            DefaultCreatureEntityActor.InitializeActor(actorRef, new DefaultCreatureActorState(EntityDataMappable.RetrieveEntity(message.EntityGuid), message.EntityGuid, instanceModel, templateModel, InterestMappable.RetrieveEntity(message.EntityGuid)));

            ActorRefMappable.AddObject(message.EntityGuid, actorRef);

            if (Logger.IsInfoEnabled)
            {
                Logger.Info($"Created Creature Actor: {typeof(DefaultCreatureEntityActor)} for Entity: {message.EntityGuid}");
            }
        }