예제 #1
0
 public bool TryGetActor(Int32 key, out ActorBase actor)
 {
     return(ConfigActors.TryGetValue(key, out actor));
 }
예제 #2
0
 public static bool IsPlayer(this ActorBase actor)
 {
     return(actor.GetCamp() == LevelActorBase.PlayerCamp);
 }
예제 #3
0
 public static float GetBodyMassByActor(this ActorBase actor)
 {
     return(BodyExtensions.GetSpaceWanderMass(actor.GetGameModelByActorType()));
 }
예제 #4
0
        /// <summary>
        /// 处理销毁事件
        /// </summary>
        protected void HandlerDestroyEvent(DestroyEventMessage destroyEvent)
        {
            if (destroyEvent == null)
            {
                return;
            }
            //Log.Trace("处理销毁事件" + destroyEvent.actorid);

            //先执行回调销毁事件
            OnDestroyMessageHandler?.Invoke(destroyEvent.actorid);
            ActorBase actor = null;

            if (levelContainer == null)
            {
                return;
            }
            if (levelContainer.GetEnvirinfointernalBase() == null)
            {
                return;
            }
            if (levelContainer.GetEnvirinfointernalBase().GetAllActors() == null)
            {
                return;
            }
            foreach (var actorBase in levelContainer.GetEnvirinfointernalBase().GetAllActors())
            {
                if (actorBase.GetActorID() == destroyEvent.actorid)
                {
                    actor = actorBase;
                }
            }
            if (actor == null)
            {
                return;
            }
            if (actor.IsPlayer() && actor.IsShip())
            {
                string i       = null;
                var    players = levelContainer.GetPlayerDict();
                foreach (var p in players)
                {
                    if (p.Value == actor.GetActorID())
                    {
                        i = p.Key;
                    }
                }
                if (i != null)
                {
                    players.Remove(i);
                }
                if (players.Count == 0)
                {
                    levelContainer.AddEventMessagesToHandlerForward(new FailEventMessage(levelContainer.GetLevelID()));
                }
            }
            levelContainer.GetEnvirinfointernalBase().RemoveActor(actor);
            actor.Dispose();


            DestoryMessageNum++;
        }