/// <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; } } }
/// <summary> /// 处理生成事件 /// </summary> protected void HandlerInitEvent(InitEventMessage initEvent) { if (initEvent == null) { return; } ActorBase actor = null; if (initEvent.haveId) { actor = levelContainer.GetCreateInternalComponentBase().CreateActor(initEvent.actortype, initEvent.camp, initEvent.point_x, initEvent.point_y, initEvent.angle, initEvent.actorid, initEvent.IsPlayer, initEvent.weapontype_a, initEvent.weapontype_b, initEvent.name, initEvent.time); } else { actor = levelContainer.GetCreateInternalComponentBase().CreateActor(initEvent.actortype, initEvent.camp, initEvent.point_x, initEvent.point_y, initEvent.angle, initEvent.IsPlayer, initEvent.weapontype_a, initEvent.weapontype_b, initEvent.name, initEvent.time); initEvent.actorid = actor.GetActorID(); } if (initEvent.time != 0) { actor.SetActorInitPro(initEvent.time); } if (actor != null) { if (actor is ISkillContainer skill) { skill.SetOwnerID(initEvent.onwerid); } actor.SetRelPosition(initEvent.relatpoint_x, initEvent.relatpoint_y); actor.SetLinerDamping(initEvent.LinerDamping); levelContainer.GetEnvirinfointernalBase().AddActor(actor); } Log.Trace("HandlerComponentBase HandlerInitEvent: 生成一个Actor id" + actor.GetActorID() + " " + actor.GetActorType()); //执行回调生成事件 OnInitMessageHandler?.Invoke(initEvent.actorid); initMessageNum++; }
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); }
protected void InitializeActor(GameShipConfig[] ships, GameSkillConfig skill, GameBarrierConfig barrier) { var factory = level.GetEnvirinfointernalBase().GetFactory(); #region 任务配置 foreach (var barrierTaskConfig in barrier.TaskConfigs) { int id = barrierTaskConfig.Id; int condition = barrierTaskConfig.StartCondition; int result = barrierTaskConfig.Result; var dict = new Dictionary <int, int>(); string des = barrierTaskConfig.Description; //Log.Trace("加载配置 任务id:" + id + " 条件" + condition + " 结果" + result); foreach (var itme in barrierTaskConfig.TaskConditionItemConfig) { dict.Add(itme.ConditionTarget, itme.ConditionValue); //Log.Trace(" key" + itme.ConditionTarget + " value" + itme.ConditionValue); } var task1 = level.GetCreateInternalComponentBase().CreateTaskEvent( condition, result, id, dict, des); level.AddTaskEvent(task1); } #endregion WeaponActorBase weaponactor = null; #region 武器 #region 往前冲武器 //高射炮 weaponactor = new WeaponActorBase(0, ActorTypeBaseDefine.AntiAircraftGunActor, level); //weaponactor.CreateBody(factory.CreateRectangleBody(0, 0, 0.3f, 2.725f,isSensor:true)); weaponactor.CreateInitData(new InitData { }); weaponactor.CreateAiComponent(new GogogoAiComponent(weaponactor, 20000)); ConfigActors.Add(ActorTypeBaseDefine.AntiAircraftGunActor, weaponactor); //鱼雷 weaponactor = new WeaponActorBase(0, ActorTypeBaseDefine.TorpedoActor, level); //weaponactor.CreateBody(factory.CreateRectangleBody(0, 0, 0.3f, 2.725f, isSensor: true)); weaponactor.CreateInitData(new InitData()); weaponactor.CreateAiComponent(new GogogoAiComponent(weaponactor, 15000)); ConfigActors.Add(ActorTypeBaseDefine.TorpedoActor, weaponactor); //机关枪 weaponactor = new WeaponActorBase(0, ActorTypeBaseDefine.MachineGunActor, level); //weaponactor.CreateBody(factory.CreateRectangleBody(0, 0, 0.3f, 2.725f, isSensor: true)); weaponactor.CreateInitData(new InitData()); weaponactor.CreateAiComponent(new GogogoAiComponent(weaponactor, 20000)); ConfigActors.Add(ActorTypeBaseDefine.MachineGunActor, weaponactor); #endregion //持续激光 weaponactor = new WeaponActorBase(0, ActorTypeBaseDefine.ContinuousLaserActor, level); //weaponactor.CreateBody(factory.CreateRectangleBody(0, 0, 0.3f, 2.725f, isSensor: true)); weaponactor.CreateInitData(new InitData()); weaponactor.CreateAiComponent(null); ConfigActors.Add(ActorTypeBaseDefine.ContinuousLaserActor, weaponactor); #region 自爆炸武器 //定时炸弹 weaponactor = new WeaponActorBase(0, ActorTypeBaseDefine.TimeBombActor, level); //weaponactor.CreateBody(factory.CreateRectangleBody(0, 0, 0.3f, 2.725f, isSensor: true)); weaponactor.CreateInitData(new InitData()); weaponactor.CreateAiComponent(new DeadAiComponent(50000000, weaponactor)); ConfigActors.Add(ActorTypeBaseDefine.TimeBombActor, weaponactor); //触发炸弹 weaponactor = new WeaponActorBase(0, ActorTypeBaseDefine.TriggerBombActor, level); //weaponactor.CreateBody(factory.CreateRectangleBody(0, 0, 0.3f, 2.725f, isSensor: true)); weaponactor.CreateInitData(new InitData()); weaponactor.CreateAiComponent(null); ConfigActors.Add(ActorTypeBaseDefine.TriggerBombActor, weaponactor); #endregion //跟踪导弹 weaponactor = new WeaponActorBase(0, ActorTypeBaseDefine.TrackingMissileActor, level); //weaponactor.CreateBody(factory.CreateRectangleBody(0, 0, 0.3f, 2.725f, isSensor: true)); weaponactor.CreateInitData(new InitData()); weaponactor.CreateAiComponent(new FollowAiComponent(level, weaponactor, 200, 2, 1000)); ConfigActors.Add(ActorTypeBaseDefine.TrackingMissileActor, weaponactor); //蓄力激光 weaponactor = new WeaponActorBase(0, ActorTypeBaseDefine.PowerLaserActor, level); //weaponactor.CreateBody(factory.CreateRectangleBody(0, 0, 0.3f, 2.725f, isSensor: true)); weaponactor.CreateInitData(new InitData()); weaponactor.CreateAiComponent(new GogogoAiComponent(weaponactor, 15000)); ConfigActors.Add(ActorTypeBaseDefine.PowerLaserActor, weaponactor); #endregion #region 技能属性配置 foreach (var skillconfig in Skill.DamageSkillConfig) { if (ConfigActors.TryGetValue(skillconfig.SkillType, out var actor)) { if (!(actor is IWeaponBaseComponentContainer skillitem)) { return; } var cd = skillconfig.CD; var damage = skillconfig.DamageValue; var count = skillconfig.MaxCount; skillitem.SetSkillCd(cd); skillitem.SetWeaponDamage(damage); skillitem.SetSkillCapacity(count); //Log.Trace("InitializeActor: CD" + cd + " damage" + damage + " count" + count); } } #endregion ShipActorBase shipactor = null; #region 船 //歼灭船 shipactor = new ShipActorBase(0, ActorTypeBaseDefine.AnnihilationShipActor, level); //shipactor.CreateBody(factory.CreateTrapezoidBody(0, 0, 6, 14, 3)); shipactor.CreateInitData(new InitData()); shipactor.InitializeFireControl(new List <int> // 跟踪导弹 机关枪 { ActorTypeBaseDefine.TrackingMissileActor, ActorTypeBaseDefine.MachineGunActor }); shipactor.CreateAiComponent(new ShipEnemyAiComponent(level, shipactor)); ConfigActors.Add(ActorTypeBaseDefine.AnnihilationShipActor, shipactor); //精英船A shipactor = new ShipActorBase(0, ActorTypeBaseDefine.EliteShipActorA, level); //shipactor.CreateBody(factory.CreateTrapezoidBody(0, 0, 6, 14, 3)); shipactor.CreateInitData(new InitData()); shipactor.CreateAiComponent(new EliteShipAAiComponent(shipactor, 30000, 5)); shipactor.InitializeFireControl(new List <int> // 鱼雷 高射炮 { ActorTypeBaseDefine.TorpedoActor, ActorTypeBaseDefine.AntiAircraftGunActor }); ConfigActors.Add(ActorTypeBaseDefine.EliteShipActorA, shipactor); //精英船B shipactor = new ShipActorBase(0, ActorTypeBaseDefine.EliteShipActorB, level); //shipactor.CreateBody(factory.CreateTrapezoidBody(0, 0, 6, 14, 3)); shipactor.CreateInitData(new InitData()); shipactor.CreateAiComponent(new ShipEnemyAiComponent(level, shipactor)); shipactor.InitializeFireControl(new List <int> // 蓄力激光 时间炸弹 { ActorTypeBaseDefine.ContinuousLaserActor, ActorTypeBaseDefine.TimeBombActor }); ConfigActors.Add(ActorTypeBaseDefine.EliteShipActorB, shipactor); //战斗机A shipactor = new ShipActorBase(0, ActorTypeBaseDefine.FighterShipActorA, level); //shipactor.CreateBody(factory.CreateTrapezoidBody(0, 0, 6, 14, 3)); shipactor.CreateInitData(new InitData()); shipactor.CreateAiComponent(new ShipEnemyAiComponent(level, shipactor)); shipactor.InitializeFireControl(new List <int> // 机关枪 持续激光 { ActorTypeBaseDefine.MachineGunActor, ActorTypeBaseDefine.ContinuousLaserActor }); ConfigActors.Add(ActorTypeBaseDefine.FighterShipActorA, shipactor); //战斗机B shipactor = new ShipActorBase(0, ActorTypeBaseDefine.FighterShipActorB, level); //shipactor.CreateBody(factory.CreateTrapezoidBody(0, 0, 6, 14, 3)); shipactor.CreateInitData(new InitData()); shipactor.CreateAiComponent(new ShipEnemyAiComponent(level, shipactor)); shipactor.InitializeFireControl(new List <int> // 高射炮 蓄力激光s { ActorTypeBaseDefine.AntiAircraftGunActor, ActorTypeBaseDefine.PowerLaserActor }); ConfigActors.Add(ActorTypeBaseDefine.FighterShipActorB, shipactor); //无人机 shipactor = new ShipActorBase(0, ActorTypeBaseDefine.DroneShipActor, level); //shipactor.CreateBody(factory.CreateTrapezoidBody(0, 0, 6, 14, 3)); shipactor.CreateInitData(new InitData()); shipactor.CreateAiComponent(new ShipEnemyAiComponent(level, shipactor)); shipactor.InitializeFireControl(new List <int> // 机关枪 { ActorTypeBaseDefine.MachineGunActor }); ConfigActors.Add(ActorTypeBaseDefine.DroneShipActor, shipactor); //黄蜂飞船 shipactor = new ShipActorBase(0, ActorTypeBaseDefine.WaspShipActorA, level); //shipactor.CreateBody(factory.CreateTrapezoidBody(0, 0, 6, 14, 3)); shipactor.CreateInitData(new InitData()); shipactor.CreateAiComponent(new ShipEnemyAiComponent(level, shipactor)); shipactor.InitializeFireControl(new List <int> // 机关枪 高射炮 { ActorTypeBaseDefine.MachineGunActor, ActorTypeBaseDefine.AntiAircraftGunActor }); ConfigActors.Add(ActorTypeBaseDefine.WaspShipActorA, shipactor); #endregion #region 船配置属性 foreach (var shipconfig in ships) { if (ConfigActors.TryGetValue(shipconfig.ShipType, out var actor)) { if (!(actor is IShipComponentBaseContainer shipitem)) { return; } var hp = shipconfig.MaxHp; var shield = shipconfig.MaxShield; shipitem.SetHP(hp); shipitem.SetShieldNum(shield); } } #endregion EnvirActor envirActor = null; #region 环境 //陨石 envirActor = new EnvirActor(0, ActorTypeBaseDefine.Meteorite_L, level); envirActor.CreateInitData(new InitData()); ConfigActors.Add(ActorTypeBaseDefine.Meteorite_L, envirActor); envirActor = new EnvirActor(0, ActorTypeBaseDefine.Meteorite_S, level); envirActor.CreateInitData(new InitData()); ConfigActors.Add(ActorTypeBaseDefine.Meteorite_S, envirActor); envirActor = new EnvirActor(0, ActorTypeBaseDefine.Meteorite_M, level); envirActor.CreateInitData(new InitData()); ConfigActors.Add(ActorTypeBaseDefine.Meteorite_M, envirActor); envirActor = new EnvirActor(0, ActorTypeBaseDefine.BlackHole, level); envirActor.CreateInitData(new InitData()); envirActor.CreateAiComponent(new BlackHoleAiComponent(envirActor, 100, 0.5f)); ConfigActors.Add(ActorTypeBaseDefine.BlackHole, envirActor); #endregion }