public ActorBase CreateActor(int actortype, int camp, float Vector2_x, float Vector2_y, float angle, ulong Id, bool isPlayer = false, Int32 weapontype_a = 0, Int32 weapontype_b = 0, string name = "", float time = 0) { ActorBase actor = null; //从配置文件中获取Actor level.GetConfigComponentInternalBase().GetActorClone(actortype, out actor); switch (actortype) { case ActorTypeBaseDefine.ActorNone: //actor = new ActorBase(); break; #region 飞船Actor case ActorTypeBaseDefine.ShipActorNone: case ActorTypeBaseDefine.EliteShipActorA: case ActorTypeBaseDefine.EliteShipActorB: case ActorTypeBaseDefine.FighterShipActorA: case ActorTypeBaseDefine.FighterShipActorB: case ActorTypeBaseDefine.WaspShipActorA: case ActorTypeBaseDefine.AnnihilationShipActor: case ActorTypeBaseDefine.DroneShipActor: case ActorTypeBaseDefine.PlayerShipActor: if (actor == null) { actor = new ShipActorBase(Id, actortype, level); } if (isPlayer) { var ship = (ShipActorBase)actor; ship.SetActorName(name); ship.CreateAiComponent(null); ship.InitializeFireControl(new List <int> { weapontype_a, weapontype_b }); } break; #endregion #region 武器Acotr #region 默认向前飞型武器 case ActorTypeBaseDefine.AntiAircraftGunActor: case ActorTypeBaseDefine.MachineGunActor: case ActorTypeBaseDefine.TorpedoActor: #endregion #region 跟踪型武器 case ActorTypeBaseDefine.TrackingMissileActor: #endregion case ActorTypeBaseDefine.ContinuousLaserActor: case ActorTypeBaseDefine.TimeBombActor: case ActorTypeBaseDefine.TriggerBombActor: break; case ActorTypeBaseDefine.PowerLaserActor: if (actor != null) { if (actor is IWeaponBaseComponentContainer weapon) { weapon.SetWeaponDamage((int)(weapon.GetWeaponDamage() * time)); } } break; #endregion } if (actor != null) { actor.SetActorId(Id); actor.PrepareActor(Vector2_x, Vector2_y, angle); actor.SetCamp(camp); } return(actor); }
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 }