ro-webgl/Assets/Src/GameLogic/Battle/EditorBattleMgr.cs
2021-12-21 09:40:39 +08:00

264 lines
8.2 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
public class EditorBattleMgr : SingletonMono<EditorBattleMgr>
{
LogicBattleField battleField = null;
FighterManager fighterMgr = null;
ReadyPoint actorSpawnPoint = null;
SpawnPoint monsterSpawnPoint = null;
bool bInitedFighter = false;
bool bStartGame = false;
public override void InitMgr()
{
base.InitMgr();
}
private void Start()
{
Constants.isOffline = true;
EventMgr.AddEventListener<int>(ECoreEventType.EID_ConfigMgrInit, OnCfgLoaded);
MusicMgr.Instance.InitMgr();
ConfigMgr.CreateInstance();
GameObject readyPointGo = GameObject.Find("ActorBornPoint");
if(readyPointGo!=null)
{
actorSpawnPoint = readyPointGo.GetComponent<ReadyPoint>();
}
GameObject spawnPointGo = GameObject.Find("SpawnPoint");
if(spawnPointGo!=null)
{
monsterSpawnPoint = spawnPointGo.GetComponent<SpawnPoint>();
}
}
private void OnCfgLoaded(CoreEvent<int> ce)
{
if(ce.Data == 1)
{
StartGame();
}
}
void Update()
{
if (!bInitedFighter)
{
if(bStartGame && !BattlePrepareManager.Instance.IsLoading)
{
Spawn();
}
return;
}
if(battleField != null)
{
battleField.Update(Time.deltaTime);
}
if (fighterMgr != null)
{
fighterMgr.FixedUpdateByEditor(Time.deltaTime);
EffectManager.Instance.Update(Time.deltaTime);
}
}
public void Restart()
{
EndGame();
StartGame();
}
public void StartGame()
{
if(actorSpawnPoint == null)
{
EditorUtility.DisplayDialog("错误", "角色出生点没有,请配置!!", "确定");
return;
}
if(monsterSpawnPoint == null)
{
EditorUtility.DisplayDialog("错误", "怪物出生点没有,请配置!", "确定");
return;
}
List<ActorData> teamActors = new List<ActorData>();
List<ActorData> enemyActors = new List<ActorData>();
for (int idx = 0; idx < 4; idx++)
{
string idKey = string.Format("TrainCamp_HeroID_{0}", idx);
string levelKey = string.Format("TrainCamp_HeroLevel_{0}", idx);
string skillIdKey = string.Format("TrainCamp_HeroSkillId_{0}", idx);
string skillLvKey = string.Format("TrainCamp_HeroSkillLv_{0}", idx);
string genderKey = string.Format("TrainCamp_Gender_{0}", idx);
string invincibleKey = string.Format("TrainCamp_Invincible_{0}", idx);
int id = 0, lv = 0, skillId = 0, skillLv = 0;
Role_Gender gender = Role_Gender.Male;
bool invincible = false;
if (PlayerPrefs.HasKey(idKey))
id = PlayerPrefs.GetInt(idKey);
if (PlayerPrefs.HasKey(levelKey))
lv = PlayerPrefs.GetInt(levelKey);
if (PlayerPrefs.HasKey(skillIdKey))
skillId = PlayerPrefs.GetInt(skillIdKey);
if (PlayerPrefs.HasKey(skillLvKey))
skillLv = PlayerPrefs.GetInt(skillLvKey);
if (PlayerPrefs.HasKey(genderKey))
gender = (Role_Gender)PlayerPrefs.GetInt(genderKey);
if (PlayerPrefs.HasKey(invincibleKey))
invincible = PlayerPrefs.GetInt(invincibleKey) > 0 ? true : false;
if (id >0 && lv > 0 && skillId > 0 && skillLv > 0)
{
SkillParam skill = new SkillParam();
skill.skillId = skillId;
skill.skillLv = skillLv;
List<SkillParam> skills = new List<SkillParam>();
skills.Add(skill);
ActorData hero = null;
if (idx == 0)
{
HeroActorData temp = ActorData.CreatePlayerActor(100000 + idx, id * 10 + (int)gender, lv, skills!=null?skills.ToArray():null) as HeroActorData;
temp.SetProfessionId(id);
hero = temp;
}
else
{
hero = ActorData.CreateFellowActor(100000 + idx, id, lv, skills!=null?skills.ToArray():null);
}
hero.Invincible = invincible;
teamActors.Add(hero);
}
}
for (int idx = 0; idx < 6; idx++)
{
string idKey = string.Format("TrainCamp_NpcID_{0}", idx);
string levelKey = string.Format("TrainCamp_NpcLevel_{0}", idx);
string posKey = string.Format("TrainCamp_NpcPos_{0}", idx);
string invincibleKey = string.Format("TrainCamp_NpcInvincible_{0}", idx);
int id = 0, level = 0, pos = 1;
bool invincible = false;
if (PlayerPrefs.HasKey(idKey))
id = PlayerPrefs.GetInt(idKey);
if (PlayerPrefs.HasKey(levelKey))
level = PlayerPrefs.GetInt(levelKey);
else
level = 1;
if (PlayerPrefs.HasKey(posKey))
pos = PlayerPrefs.GetInt(posKey);
if (PlayerPrefs.HasKey(invincibleKey))
invincible = PlayerPrefs.GetInt(invincibleKey) > 0 ? true : false;
if (id > 0 && level > 0 )
{
ActorData npc = ActorData.CreateNpcPlayerActor(200000+ idx, id, level);
npc.PositionValue = pos;
npc.Invincible = invincible;
enemyActors.Add(npc);
}
}
if (teamActors.Count == 0)
{
EditorUtility.DisplayDialog("错误", "我方英雄没有一个合格的测试者", "确定");
return;
}
if(enemyActors.Count == 0)
{
EditorUtility.DisplayDialog("错误", "请正确部署最少一个怪", "确定");
return;
}
bool enableLog = false;
if(PlayerPrefs.HasKey("EnabledLog"))
enableLog = PlayerPrefs.GetInt("EnabledLog") > 0 ? true:false;
if(enableLog)
{
DebugHelper.LogLevel = LogLevel.Info;
}
fighterMgr = new FighterManager(null);
fighterMgr.AddFighters(teamActors.ToArray(), eTeamType.Friend);
fighterMgr.AddFighters(enemyActors.ToArray(), eTeamType.Enemy);
fighterMgr.ParseLoad();
BattlePrepareManager.Instance.StartLoad();
bStartGame = true;
}
void Spawn()
{
if (bInitedFighter) return;
if (battleField == null) {
battleField = new LogicBattleField(null, null);
}
for (int idx = 0; idx < fighterMgr.AllFighters.Count; idx++)
{
Fighter f = fighterMgr.AllFighters[idx];
f.StateData.IsInvincible = f.Actor.Invincible;
if (f.TeamSide == eTeamType.Friend)
{
f.Spawn(actorSpawnPoint.GetBornPointPos(f.ProfType,f.ReadyPosOrder).heroPos, Vector3.forward, Quaternion.identity);
}
else
{
Vector3 pos = Vector3.zero;
Transform p = monsterSpawnPoint.transform.Find("point" + f.PositionValue);
if (p != null)
pos = p.position;
f.Spawn(pos, Vector3.back, Quaternion.identity);
}
battleField.AddFighter(f);
}
bInitedFighter = true;
battleField.CurrentState = LogicBattleFieldStateType.EditorFighting;
}
public void EndGame()
{
if (fighterMgr != null)
{
fighterMgr.Dispose();
fighterMgr = null;
}
//ScaleTimeInfo.Instance.Stop();
EffectManager.Instance.Clear();
if (MusicMgr.HasInstance())
MusicMgr.Instance.CleanBeforeChangeScene();
}
}
#endif