示例#1
0
        /// <summary>
        /// 发送当前Actor到指定的Network连接服务。
        /// </summary>
        /// <param name="actor">Actor类</param>
        /// <param name="network">网络类</param>
        /// <param name="command">消息指令</param>
        internal static void SendMySelf(this BaseActorComponent actor, Network network, MSGCommand command)
        {
            if (!actor.IsLocalActor)
            {
                throw new ComponentException("非LocalActor不能发送ActorMySelf消息。");
            }

            var syncMessage = new ActorSyncMessage
            {
                ActorId   = actor.Id,
                ActorType = actor.ActorEntity.ActorType,
            };

            network.Send(syncMessage, (ushort)command);
        }
        private void AddLocal(BaseActorComponent component)
        {
            if (this.LocalActors.ContainsKey(component.Id))
            {
                return;
            }

            this.LocalActors.AddOrUpdate(component.Id, component, (k, v) => component);

            this.ActorComponents[component.ActorEntity.Id] = component;

            var message = new ActorSyncMessage
            {
                ActorId   = component.Id,
                ActorType = component.ActorEntity.ActorType,
            };

            this.Distributions.InnerNetworks.Send(message, (ushort)MSGCommand.AddActorCmd);
        }
        /// <summary>
        /// 添加Actor
        /// </summary>
        /// <param name="current"></param>
        /// <param name="network"></param>
        /// <param name="actorId"></param>
        /// <param name="actorType"></param>
        /// <param name="objectId"></param>
        /// <returns></returns>
        public static BaseActorComponent AddActor(this ActorComponentStorage current, Network network, ActorSyncMessage message)
        {
            var type  = current.GetActorType(message.ActorType);
            var actor = Game.Scene.AddComponent(type) as BaseActorComponent;

            actor.SetRemote(network, message.ActorId);
            return(actor);
        }