Beispiel #1
0
        /// <summary>
        /// 初始化配置文件
        /// </summary>
        /// <param name="gameBarrierConfigs">关卡配置</param>
        /// <param name="gameShipConfigs">飞船配置</param>
        /// <param name="gameSkillConfig">技能配置</param>
        public void InitConfig(GameBarrierConfig gameBarrierConfigs, List <GameShipConfig> gameShipConfigs,
                               GameSkillConfig gameSkillConfig)
        {
            _configComponent.InitializeConfig(gameShipConfigs.ToArray(), gameSkillConfig, gameBarrierConfigs);


            OnLoadingDone?.Invoke();
        }
Beispiel #2
0
 public void Dispose()
 {
     level        = null;
     ShipArray    = null;
     Skill        = null;
     BarrierArray = null;
     ConfigActors = null;
 }
Beispiel #3
0
 public void InitializeConfig(GameShipConfig[] ships, GameSkillConfig skill, GameBarrierConfig barrier)
 {
     ShipArray    = ships;
     Skill        = skill;
     BarrierArray = barrier;
     InitializeActor(ships, skill, barrier);
     InitializeMap();
 }
Beispiel #4
0
        /// <summary>
        /// 初始化战斗副本实体
        /// </summary>
        /// <param name="players">玩家集合</param>
        /// <param name="barrierId">关卡Id</param>
        /// <param name="handler">通讯句柄</param>
        public void Init(List <string> players, int barrierId, IBattleSystemHandler handler, List <ulong> teams)
        {
            m_teams = teams;

            foreach (var plyaerId in players)
            {
                _readyDic.Add(plyaerId, 0);
            }

            int i = 0;

            foreach (var pId in players)
            {
                m_players.Add(pId);
                Log.Info("playerId = " + pId);
                i++;
            }
            Log.Info("Battle 玩家个数为:" + players.Count);

            m_netHandler = handler;

            //初始化关卡配置
            GameBarrierConfig gameBarrierConfig = null;

            foreach (var item in m_netHandler.GetGameBarrierConfigs())
            {
                if (item.Id == barrierId)
                {
                    gameBarrierConfig = item;
                }
            }
            //Log.Info("barrier Id="+gameBarrierConfig.Id);
            m_level.InitConfig(gameBarrierConfig, m_netHandler.GetGameShipConfigs(), m_netHandler.GetGameSkillConfig());
            //关卡开启战斗

            m_startTime = DateTime.Now;
        }
Beispiel #5
0
 public void InitializeConfig(GameShipConfig[] ships, GameSkillConfig skill, GameBarrierConfig barrier)
 {
     _configComponent.InitializeConfig(ships, skill, barrier);
 }
Beispiel #6
0
        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
        }