示例#1
0
        public View Spawn(ActorTag actorTag)
        {
            if (!_viewPrefabPools.TryGetValue(actorTag, out var pool))
            {
                pool           = new ViewPrefabPool();
                pool.Prefab    = Resources.Load <GameObject>($"{PATH_PREFIX}/{ActorTagPathDic[actorTag]}");
                pool.SpawnRoot = new GameObject($"__SpawnRoot_{actorTag.ToString()}")
                                 .transform;
                pool.PoolRoot = new GameObject($"__PoolRoot_{actorTag.ToString()}")
                                .transform;

                pool.SpawnRoot.SetParent(transform);
                pool.SpawnRoot.localPosition = Vector3.zero;
                pool.SpawnRoot.localRotation = Quaternion.identity;
                pool.SpawnRoot.localScale    = Vector3.one;

                pool.PoolRoot.SetParent(transform);
                pool.PoolRoot.localPosition = Vector3.zero;
                pool.PoolRoot.localRotation = Quaternion.identity;
                pool.PoolRoot.localScale    = Vector3.one;

                _viewPrefabPools.Add(actorTag, pool);
            }

            return(pool.Spawn());
        }
示例#2
0
 private void Running(ActorTag msg)
 {
     fTestRun++;
     if (fNextNode != null)
     {
         if ((fTestRun % 100) == 0)
         {
             //var tr = new actTrace();
             //tr.Start();
             fNextNode.SendMessage(msg);
             //tr.Stop("End Node Ring");
         }
         else
         {
             fNextNode.SendMessage(msg);
         }
     }
     else
     {
         if (fTestRun >= RingTest.fTest)
         {
             TestResult.end = DateTimeOffset.UtcNow;
             StringBuilder sb = new StringBuilder();
             sb.AppendLine("End Test " + fTestRun.ToString() + " " + TestResult.end.ToString());
             sb.AppendLine("Elapsed " + fTestRun.ToString() + " " + TestResult.Delta.ToString()); // .ToString("N5"));
             Console.WriteLine(sb.ToString());
             RingTest.answer?.SendMessage(sb.ToString());
         }
     }
 }
 public RemoteSenderActor(ActorTag aTag)
     : base()
 {
     fRemoteTag        = aTag;
     fSerializeService = ActorServer.GetInstance().SerializeService;
     Become(new Behavior <object>(DoRouting));
 }
示例#4
0
文件: APlayer.cs 项目: liamwhan/pong
 public APlayer(GraphicsDeviceManager graphics, ActorTag actorType, PlayerIndex controllerIndex, Vector2 startingPosition) : base(graphics, actorType)
 {
     //Set Starting Position
     Position        = startingPosition;
     ControllerIndex = controllerIndex;
     ActorTag        = actorType;
 }
示例#5
0
        public ParserActor()
            : base()
        {
            var collect = new Behavior <IActor, string>((a, s) =>
            {
                fList.Add(s);
                Console.WriteLine("parsed {0}", s);
            }
                                                        );
            var connect = new Behavior <ActorTag>(t => fParserServer = t);
            var parse   = new Behavior <IEnumerable <string> >(t =>
            {
                IActor aServer = null;
                if (fParserServer == null)
                {
                    aServer       = new ParserServer();
                    fParserServer = aServer.Tag;
                }
                else
                {
                    aServer = new ConnectActor(this, fParserServer.Host, "ParserServer");
                }
                foreach (string s in t)
                {
                    aServer.SendMessage(this, s);
                }
            }
                                                               );

            Become(collect);
            AddBehavior(connect);
            AddBehavior(parse);
        }
示例#6
0
        public void DataContractObjectTestWithData()
        {
            string   someData = "someData";
            ActorTag tag      = new ActorTag();
            var      dco      = new DataContractObject(someData, tag);

            Assert.AreEqual(someData, dco.Data);
            Assert.AreEqual(tag, dco.Tag);
        }
示例#7
0
        public object GetDeserializedObject(object obj, Type targetType)
        {
            IActor act = (IActor)obj;

            HostDirectoryActor.Register(act);
            // continue
            ActorTag remoteTag = act.Tag;

            return(act);
        }
示例#8
0
 public object GetDeserializedObject(object obj, Type targetType)
 {
     if (obj is IActor act)
     {
         HostDirectoryActor.Register(act);
         ActorTag remoteTag = act.Tag; // dont touch this
         return(act);
     }
     return(obj);
 }
示例#9
0
        public bool Recycle(View view, ActorTag tag)
        {
            if (!_viewPrefabPools.TryGetValue(tag, out var pool))
            {
                Destroy(view.gameObject);
                return(false);
            }

            pool.Recycle(view);
            return(true);
        }
示例#10
0
        protected override void Execute(List <GameEntity> entities)
        {
            _entities?.Clear();
            _currentTag = ActorTag.None;

            entities.Sort(Compare);

            foreach (var gameEntity in entities)
            {
                var findTargetComp = gameEntity.findTargetCmdComp;

                if (_entities == null ||
                    _currentTag != findTargetComp.TargetTag)
                {
                    _entities = GameManager.GetEntities(
                        findTargetComp.TargetTag,
                        ref _entities);

                    _currentTag = findTargetComp.TargetTag;
                }

                var targetId = -1;

                if (findTargetComp.FindTargetType == FindTargetType.Closet)
                {
                    var selfPos  = gameEntity.posComp.Value;
                    var closeDis = float.MaxValue;
                    foreach (var entity in _entities)
                    {
                        if (!entity.IsValid() || !entity.hasPosComp)
                        {
                            continue;
                        }

                        var dis = (entity.posComp.Value - selfPos).sqrMagnitude;
                        if (closeDis > dis)
                        {
                            closeDis = dis;
                            targetId = entity.idComp.Value;
                        }
                    }
                }

                if (targetId != -1)
                {
                    gameEntity.RemoveFindTargetCmdComp();
                    gameEntity.AddTargetComp(
                        targetId,
                        findTargetComp.TargetTag,
                        findTargetComp.FindTargetType,
                        findTargetComp.LostTargetActionType);
                }
            }
        }
 public void WorkerActorTest()
 {
     TestLauncherActor.Test(
         () =>
     {
         EnumerableActor <string> memLogger = new EnumerableActor <string>();
         IActor worker      = new WorkerActorTestString(memLogger);
         IActor dummyBroker = new BaseActor();
         ActorTag tag       = new ActorTag();
         worker.SendMessage(dummyBroker, tag, "Worker on stage");
         Task.Delay(1000).Wait();
         Assert.AreEqual(1, memLogger.Count);
         Assert.AreEqual("Worker on stage", memLogger.First());
     });
 }
示例#12
0
        public void GetObjectData(object obj, SerializationInfo info, StreamingContext context)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info", "SerializationInfo was null");
            }
            IActor act = (IActor)obj;

            HostDirectoryActor.Register(act);
            // continue
            info.SetType(typeof(RemoteSenderActor));
            ActorTag remoteTag = act.Tag;

            info.AddValue("RemoteTag", remoteTag, typeof(ActorTag));
        }
示例#13
0
        public object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
        {
            // Reset the property value using the GetValue method.

            // force misc init
            if (obj is RemoteSenderActor remoteActor)
            {
                if (info == null)
                {
                    throw new ActorException("Receiving null SerializationInfo");
                }
                BaseActor.CompleteInitialize(remoteActor);
                RemoteSenderActor.CompleteInitialize(remoteActor);
                ActorTag getTag = (ActorTag)info.GetValue("RemoteTag", typeof(ActorTag));
                typeof(RemoteSenderActor).GetField("fRemoteTag").SetValue(obj, getTag);
            }
            return(null); // ms bug here
        }
示例#14
0
 private void Found(Dictionary <string, string> someServices)
 {
     if (someServices.TryGetValue(fServiceName, out string service))
     {
         if (!string.IsNullOrEmpty(service))
         {
             ActorTag tag = new ActorTag(service);
             Become(new Behavior <ActorTag>(DoConnect));
             SendMessage(tag);
         }
         else
         // service with no end point
         {
             Become(new NullBehaviors());
         }
     }
     else
     // not found
     {
         Become(new NullBehaviors());
     }
 }
示例#15
0
 public T Spawn <T>(ActorTag actorTag) where T : class, IView
 {
     return(Spawn(actorTag) as T);
 }
示例#16
0
 public static APlayer GetPlayer(ActorTag actorTag)
 {
     return((APlayer)Actors.Find(x => x.ActorTag == actorTag));
 }
        public void Serialize(object data, ActorTag tag, Stream stream)
        {
            SerialObject so = new SerialObject(data, tag);

            NetDataActorSerializer.Serialize(so, stream);
        }
示例#18
0
        public void Serialize(object data, ActorTag tag, Stream stream)
        {
            DataContractObject dco = new DataContractObject(data, tag);

            DataContractActorSerializer.Serialize(dco, stream);
        }
示例#19
0
 public SerialObject(object someData, ActorTag aTag)
 {
     Data = someData;
     Tag  = aTag;
 }
示例#20
0
        private void DoConnect(ActorTag tag)
        {
            IActor remoteSend = new RemoteSenderActor(tag);

            fSender.SendMessage(fServiceName, tag, remoteSend);
        }
示例#21
0
 public DataContractObject(object someData, ActorTag aTag)
 {
     Data = someData;
     Tag  = aTag;
 }
示例#22
0
文件: Actor.cs 项目: liamwhan/pong
 public Actor(GraphicsDeviceManager graphics, ActorTag actorTag)
 {
     _graphics = graphics;
     ActorTag  = actorTag;
     ActorManager.RegisterActor(this);
 }
示例#23
0
文件: ABall.cs 项目: liamwhan/pong
 public ABall(GraphicsDeviceManager graphics, ActorTag actorType) : base(graphics, actorType)
 {
     //Set Starting Position
     _startingPosition = new Vector2(_graphics.PreferredBackBufferWidth / 2, _graphics.PreferredBackBufferHeight / 2);
     Reset();
 }