Example #1
0
        public virtual async UniTask <TActor> AddActorAsync(string actorId)
        {
            if (ActorExists(actorId))
            {
                Debug.LogWarning($"Actor '{actorId}' was requested to be added, but it already exists.");
                return(GetActor(actorId));
            }

            if (pendingAddActorTasks.ContainsKey(actorId))
            {
                return(await pendingAddActorTasks[actorId].Task);
            }

            pendingAddActorTasks[actorId] = new UniTaskCompletionSource <TActor>();

            var constructedActor = await ConstructActorAsync(actorId);

            ManagedActors.Add(actorId, constructedActor);

            pendingAddActorTasks[actorId].TrySetResult(constructedActor);
            pendingAddActorTasks.Remove(actorId);

            OnActorAdded?.Invoke(actorId);

            return(constructedActor);
        }
Example #2
0
 public override void Add(Actor actor)
 {
     base.Add(actor);
     actor.Game = Game;
     if (OnActorAdded != null)
     {
         OnActorAdded.Invoke(new ActorEventArgs {
             Actor = actor
         });
     }
 }
Example #3
0
        public void Add(ActorBase actor)
        {
            if (_actors.ContainsKey(actor.Serial) == true)
            {
                throw new UnityException("Already actor " + actor.Serial + " Added!");
            }

            int newSerial = _serialIssuer.Get();

            actor.SetSerial(newSerial);

            _actors.Add(newSerial, actor);

            if (actor is Character)
            {
                LocalCharacter = actor as Character;
            }

            OnActorAdded?.Invoke(actor);
        }
Example #4
0
 internal void ActorAdded(Actor actor)
 {
     OnActorAdded?.Invoke(this, new ActorEventArgs(actor));
 }