/// <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; } } }
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); }
/// <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++; }