107 lines
6.1 KiB
C#
107 lines
6.1 KiB
C#
// Play 중 보스 상태 요약(읽기 전용)
|
|
var sb = new System.Text.StringBuilder();
|
|
sb.Append("playing=").Append(UnityEngine.Application.isPlaying);
|
|
var director = BurningTimes.Boss.TVBossDirector.Instance;
|
|
sb.Append(" director=").Append(director != null);
|
|
if (director == null)
|
|
return sb.ToString();
|
|
sb.Append(" config=").Append(director.ConfigReady).Append(" bosses=").Append(director.BossCount).Append(" tier=").Append(director.Tier);
|
|
sb.Append(" player=").Append(Fx.Player.Instance != null).Append(" world=").Append(Fx.WorldManager.HasInstance());
|
|
sb.Append(" timeScale=").Append(UnityEngine.Time.timeScale.ToString("0.0"));
|
|
|
|
var world = Unity.Entities.World.DefaultGameObjectInjectionWorld;
|
|
if (world == null || world.IsCreated == false)
|
|
return sb.Append(" world=none").ToString();
|
|
var em = world.EntityManager;
|
|
double now = world.Time.ElapsedTime;
|
|
sb.Append(" t=").Append(now.ToString("0.0"));
|
|
|
|
if (director.TryGetHud(out var hud))
|
|
sb.Append("\nHUD alive=").Append(hud.aliveCount).Append(" idx=").Append(hud.bossIndex).Append(" phase=").Append(hud.phase + 1).Append('/').Append(hud.phaseCount)
|
|
.Append(" hp=").Append(hud.hpRatio.ToString("0.000")).Append(" inv=").Append(hud.invincible).Append(" groggy=").Append(hud.groggyGauge).Append('/').Append(hud.groggyHits)
|
|
.Append(" stun=").Append(hud.groggy).Append(" enraged=").Append(hud.enraged).Append(" elapsed=").Append(hud.elapsed.ToString("0.0"))
|
|
.Append(" zone=").Append(hud.zoneType).Append(" zoneR=").Append(hud.zoneRadius.ToString("0.0")).Append(" zoneStack=").Append(hud.zoneStack.ToString("0.0"));
|
|
|
|
using (var q = em.CreateEntityQuery(Unity.Entities.ComponentType.ReadOnly<BurningTimes.Boss.BossStateComponent>()))
|
|
using (var entities = q.ToEntityArray(Unity.Collections.Allocator.Temp))
|
|
{
|
|
sb.Append("\nstateEntities=").Append(entities.Length);
|
|
foreach (var e in entities)
|
|
{
|
|
var st = em.GetComponentData<BurningTimes.Boss.BossStateComponent>(e);
|
|
var h = em.GetComponentData<Fx.HealthComponent>(e);
|
|
var lt = em.GetComponentData<Unity.Transforms.LocalTransform>(e);
|
|
var atk = em.GetComponentData<Fx.AttackStatusComponent>(e);
|
|
var idx = em.GetComponentData<Fx.CharacterIndexComponent>(e);
|
|
var spd = em.GetComponentData<Fx.MoveSpeedComponent>(e);
|
|
sb.Append("\n [").Append(e.Index).Append(" idx=").Append(idx.characterIndex).Append(" init=").Append(st.initialized).Append(" dead=").Append(st.dead).Append(" phase=").Append(st.phase)
|
|
.Append(" hp=").Append(h.health).Append('/').Append(h.healthMax).Append(" inv=").Append(h.invincibilityCount).Append(" abn=").Append(h.applyAbnormalState)
|
|
.Append(" scale=").Append(lt.Scale.ToString("0.00")).Append(" atk=").Append(atk.attack).Append(" speed=").Append(spd.runSpeed.ToString("0.0"))
|
|
.Append(" pos=").Append(lt.Position.x.ToString("0.0")).Append(',').Append(lt.Position.y.ToString("0.0")).Append(',').Append(lt.Position.z.ToString("0.0"))
|
|
.Append(" arena=").Append(st.arenaCenter.x.ToString("0.0")).Append(',').Append(st.arenaCenter.z.ToString("0.0"))
|
|
.Append(" gauge=").Append(st.groggyGauge).Append(" groggyLeft=").Append(System.Math.Max(0.0, st.groggyUntil - now).ToString("0.0"))
|
|
.Append(" zone=").Append(st.zoneType).Append(" stack=").Append(st.zoneStack.ToString("0.0")).Append(" enraged=").Append(st.enraged);
|
|
if (em.HasComponent<Fx.StunStateComponent>(e))
|
|
{
|
|
var stun = em.GetComponentData<Fx.StunStateComponent>(e);
|
|
sb.Append(" stunActive=").Append(stun.active);
|
|
}
|
|
if (em.HasComponent<Fx.MonsterAttackComponent>(e))
|
|
{
|
|
var c = em.GetComponentData<Fx.MonsterAttackComponent>(e);
|
|
sb.Append(" contactOff=").Append(c.nextByteTimeSeconds > 1e100);
|
|
}
|
|
if (em.HasBuffer<Fx.UseSkillBufferElement>(e))
|
|
{
|
|
var uses = em.GetBuffer<Fx.UseSkillBufferElement>(e, true);
|
|
sb.Append("\n skills=");
|
|
for (int i = 0; i < uses.Length; i++)
|
|
sb.Append(uses[i].skillID).Append('(').Append(uses[i].useElapsedTime.ToString("0.0")).Append(')').Append(i < uses.Length - 1 ? "," : "");
|
|
}
|
|
if (em.HasBuffer<BurningTimes.Boss.BossWatchElement>(e))
|
|
{
|
|
var watch = em.GetBuffer<BurningTimes.Boss.BossWatchElement>(e, true);
|
|
sb.Append("\n watch=");
|
|
for (int i = 0; i < watch.Length; i++)
|
|
sb.Append(watch[i].skillId).Append(":stage").Append(watch[i].stage).Append(i < watch.Length - 1 ? "," : "");
|
|
}
|
|
sb.Append(']');
|
|
}
|
|
}
|
|
|
|
using (var pq = em.CreateEntityQuery(Unity.Entities.ComponentType.ReadOnly<Fx.PlayerTag>(), Unity.Entities.ComponentType.ReadOnly<Fx.HealthComponent>()))
|
|
using (var players = pq.ToEntityArray(Unity.Collections.Allocator.Temp))
|
|
{
|
|
foreach (var p in players)
|
|
{
|
|
var h = em.GetComponentData<Fx.HealthComponent>(p);
|
|
var lt = em.GetComponentData<Unity.Transforms.LocalTransform>(p);
|
|
sb.Append("\nplayer hp=").Append(h.health).Append('/').Append(h.healthMax).Append(" inv=").Append(h.invincibilityCount)
|
|
.Append(" pos=").Append(lt.Position.x.ToString("0.0")).Append(',').Append(lt.Position.y.ToString("0.0")).Append(',').Append(lt.Position.z.ToString("0.0"));
|
|
}
|
|
}
|
|
|
|
// 몬스터 수(종류별)
|
|
using (var mq = em.CreateEntityQuery(Unity.Entities.ComponentType.ReadOnly<Fx.CharacterIndexComponent>(), Unity.Entities.ComponentType.ReadOnly<Fx.HealthComponent>()))
|
|
using (var all = mq.ToEntityArray(Unity.Collections.Allocator.Temp))
|
|
{
|
|
var counts = new System.Collections.Generic.SortedDictionary<int, int>();
|
|
foreach (var e in all)
|
|
{
|
|
if (em.HasComponent<Fx.PlayerTag>(e))
|
|
continue;
|
|
if (em.IsEnabled(e) == false)
|
|
continue;
|
|
var h = em.GetComponentData<Fx.HealthComponent>(e);
|
|
if (h.health <= 0)
|
|
continue;
|
|
int id = em.GetComponentData<Fx.CharacterIndexComponent>(e).characterIndex;
|
|
counts.TryGetValue(id, out int c);
|
|
counts[id] = c + 1;
|
|
}
|
|
sb.Append("\nalive monsters: ");
|
|
foreach (var pair in counts)
|
|
sb.Append(pair.Key).Append('x').Append(pair.Value).Append(' ');
|
|
}
|
|
return sb.ToString();
|