示例#1
0
        /// <summary>
        /// AI使用发射槽来控制发射武器
        /// 普通发射使用发射类型
        /// </summary>
        /// <param name="i"></param>
        public void FireAI(int i)
        {
            //Log.Trace("FireAI: 发射槽" + i + " 发射槽总数" + skills.Count);
            if (skills.Count <= i)
            {
                //Log.Trace("FireAI: 发射槽 超过了 发射槽总数");
                return;
            }
            if (skills[i] is ISkillContainer actor)
            {
                //var weaponactor = actor.Clone();
                //weaponactor.SetActorId(level.GetCreateInternalComponentBase().GetCreateID());
                //var weapon = weaponactor as ISkillContainer;
                if (actor.GetActorType() == ActorTypeBaseDefine.ContinuousLaserActor)
                {
                    foreach (var s in skillInitList)
                    {
                        if (s.ActorType == ActorTypeBaseDefine.ContinuousLaserActor)
                        {
                            return;
                        }
                    }
                }
                if (actor.GetActorType() == ActorTypeBaseDefine.ContinuousLaserActor)
                {
                    if (skillcd[i] == 0)
                    {
                        return;
                    }
                }
                else
                {
                    if (skillcd[i] != 0)
                    {
                        return;
                    }
                }
                var id     = level.GetCreateInternalComponentBase().GetCreateID();
                var weapon = actor as ISkillContainer;
                weapon.SetRelPosition(0, 0);
                //Log.Trace("当前发射者 位置:" + container.GetPhysicalinternalBase().GetBody().Position + " 朝向:" +
                //          container.GetPhysicalinternalBase().GetBody().Forward);
                //Log.Trace("当前武器箱 位置:"+actor.GetBody().Position + " 朝向:"+actor.GetBody().Forward);
                //Log.Trace("被发射武器"+weapon.GetBody().Id+" 位置:" + weapon.GetBody().Position + " 朝向:" + weapon.GetBody().Forward+" 朝向角度:"+weapon.GetBody().Angle);


                //level.GetEnvirinfointernalBase().AddActor(weapon as ActorBase);
                var init = weapon.GetInitData();
                level.AddEventMessagesToHandlerForward(new InitEventMessage(id, actor.GetCamp(), actor.GetActorType(), init.point_x, init.point_y, init.angle, weapon.GetLinerDamping(), ownerid: weapon.GetOwnerID(), relatpoint_x: weapon.GetRelPositionX(), relatpoint_y: weapon.GetRelPositionY()));

                skillInitList.Add(new UserData(id, weapon.GetActorType()));
                OnFire?.Invoke(weapon);
                if (actor.GetActorType() != ActorTypeBaseDefine.ContinuousLaserActor)
                {
                    skillcd[i] = DateTime.Now.Ticks;
                }
            }
        }
示例#2
0
        public void Execute()
        {
            if (!taskEventBase.TryGetValue(key_actortype, out int actortype))
            {
                return;
            }
            if (!taskEventBase.TryGetValue(key_x, out int x))
            {
                return;
            }
            if (!taskEventBase.TryGetValue(key_y, out int y))
            {
                return;
            }
            ulong id = level.GetCreateInternalComponentBase().GetCreateID();

            level.AddEventMessagesToHandlerForward(new InitEventMessage(actorid: id, actortype: actortype, camp: LevelActorBase.WallCamp, point_x: x, point_y: y, angle: 0, LinerDamping: 0.1f));
            //Log.Trace("StartCondition InitActorID" + id);
        }
示例#3
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++;
        }