using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace OpenVIII.IGMData
{
public class DebugChoose : Base
{
#region Fields
///
/// Strings
///
private static Dictionary strDebugLobby = new Dictionary()
{
{ Ditems.Reset, new FF8String("Reset Main Menu state") },
{ Ditems.Overture, new FF8String("Play Overture") },
{ Ditems.Battle, new FF8String("Battle encounter: ") },
{ Ditems.Field, new FF8String("Field debug render: ") },
{ Ditems.Movie, new FF8String("Movie debug render: ") },
{ Ditems.Music, new FF8String("Play/Stop music: ") },
{ Ditems.Sounds, new FF8String("Play audio.dat: ") },
{ Ditems.World, new FF8String("Jump to World Map") },
{ Ditems.Faces, new FF8String("Test Faces") },
{ Ditems.Icons, new FF8String("Test Icons") },
{ Ditems.Cards, new FF8String("Test Cards") },
{ Ditems.FieldModelTest, new FF8String("Test field models") },
};
private int debug_choosedAudio;
///
/// Dynamic String Values
///
private Dictionary> dynamicDebugStrings;
private Dictionary> inputsOKAY;
private Dictionary> inputsLeft;
private Dictionary> inputsRight;
#endregion Fields
#region Enums
///
/// Identifiers and Ordering of debug menu items
///
private enum Ditems
{
Reset,
Overture,
Battle,
Field,
Movie,
Music,
Sounds,
World,
Faces,
Icons,
Cards,
FieldModelTest,
///
/// Number of values. Make sure this is last.
///
Count
}
#endregion Enums
#region Methods
public static DebugChoose Create(Rectangle pos) => Create((int)Ditems.Count, 1, new IGMDataItem.Box { Pos = pos, Title = Icons.ID.DEBUG }, 1, (int)Ditems.Count);
public override bool Inputs()
{
Cursor_Status |= Cursor_Status.Enabled; //Cursor_Status |= Cursor_Status.Horizontal;
Cursor_Status &= ~Cursor_Status.Blinking;
return base.Inputs();
}
public override bool Inputs_CANCEL()
{
base.Inputs_CANCEL();
CURSOR_SELECT = 0;
Menu.Module.State = MenuModule.Mode.MainLobby;
Menu.FadeIn();
return true;
}
public override bool Inputs_OKAY()
{
if (inputsOKAY.TryGetValue((Ditems)CURSOR_SELECT, out Func f))
{
return f.Invoke() && base.Inputs_OKAY();
}
return false;
}
public override void Inputs_Left()
{
if (inputsLeft.TryGetValue((Ditems)CURSOR_SELECT, out Func f) && f.Invoke())
{
base.Inputs_Left();
Refresh();
}
}
public override void Inputs_Right()
{
if (inputsRight.TryGetValue((Ditems)CURSOR_SELECT, out Func f) && f.Invoke())
{
base.Inputs_Right();
Refresh();
}
}
public override void Refresh()
{
base.Refresh();
for (int i = 0; i < Count; i++)
{
if (dynamicDebugStrings.TryGetValue((Ditems)i, out Func f))
{
((IGMDataItem.Text)ITEM[i, 0]).Data = f();
}
}
}
protected override void Init()
{
base.Init();
for (int i = 0; i < Count; i++)
{
if (strDebugLobby.TryGetValue((Ditems)i, out FF8String str))
{
ITEM[i, 0] = new IGMDataItem.Text { Data = str, Pos = SIZE[i] };
}
}
inputsOKAY = new Dictionary>()
{
{ Ditems.Reset, ()=> {
return Inputs_CANCEL();
} },
{ Ditems.Overture, ()=> {
Menu.FadeIn();
Menu.Module.State = MenuModule.Mode.MainLobby;
Module_overture_debug.ResetModule();
Memory.Module = MODULE.OVERTURE_DEBUG;
Memory.IsMouseVisible = false;
init_debugger_Audio.StopMusic();
return true;
} },
{ Ditems.Battle, ()=> {
Menu.FadeIn();
Module_battle_debug.ResetState();
Menu.BattleMenus.CameFrom();
Memory.Module = MODULE.BATTLE_DEBUG;
//Extended.postBackBufferDelegate = BattleSwirl.Init;
//Extended.RequestBackBuffer();
Memory.IsMouseVisible = false;
return true;
} },
{ Ditems.Field, ()=> {
Menu.FadeIn();
Fields.Module.ResetField();
Memory.Module = MODULE.FIELD_DEBUG;
Memory.IsMouseVisible = false;
return true;
} },
{ Ditems.Movie, ()=> {
Menu.FadeIn();
Memory.Module = MODULE.MOVIETEST;
Module_movie_test.Play();
Memory.IsMouseVisible = false;
return true;
} },
{ Ditems.Music, ()=> {
Fields.Module.ResetField();
init_debugger_Audio.PlayStopMusic();
return true;
} },
{ Ditems.Sounds, ()=> {
init_debugger_Audio.PlaySound(debug_choosedAudio);
skipsnd = true;
return true;
} },
{ Ditems.World, ()=> {
Menu.FadeIn();
Memory.Module = MODULE.WORLD_DEBUG;
Memory.IsMouseVisible = false;
return true;
} },
{ Ditems.Faces, ()=> {
Menu.FadeIn();
Memory.Module = MODULE.FACE_TEST;
Module_face_test.Show();
return true;
} },
{ Ditems.Icons, ()=> {
Menu.FadeIn();
Memory.Module = MODULE.ICON_TEST;
Module_icon_test.Show();
return true;
} },
{ Ditems.Cards, ()=> {
Menu.FadeIn();
Memory.Module = MODULE.CARD_TEST;
Module_card_test.Show();
return true;
} },
{ Ditems.FieldModelTest, ()=> {
Menu.FadeIn();
Memory.Module = MODULE.FIELD_MODEL_TEST;
Module_card_test.Show();
return true;
} },
};
inputsLeft = new Dictionary>()
{
{ Ditems.Battle, ()=> {
if(Memory.battle_encounter >0)
Memory.battle_encounter--;
else
Memory.battle_encounter = Memory.encounters.Length - 1;
return true;
} },
{ Ditems.Field, ()=> {
if( Memory.FieldHolder.FieldID>0)
Memory.FieldHolder.FieldID--;
else
Memory.FieldHolder.FieldID = checked((ushort)(Memory.FieldHolder.fields.Length - 1));
return true;
} },
{ Ditems.Movie, ()=> {
if(Module_movie_test.Index>0)
Module_movie_test.Index--;
else
Module_movie_test.Index = Movie.Files.Count - 1;
return true;
} },
{ Ditems.Music, ()=> {
if(Memory.MusicIndex >0)
Memory.MusicIndex --;
else
Memory.MusicIndex = Memory.dicMusic.Keys.Max();
return true;
} },
{ Ditems.Sounds, ()=> {
if (debug_choosedAudio > 0)
debug_choosedAudio--;
else
debug_choosedAudio = init_debugger_Audio.soundEntriesCount-1;
return true;
} }
};
inputsRight = new Dictionary>()
{
{ Ditems.Battle, ()=> {
if(Memory.battle_encounter < Memory.encounters.Length - 1)
Memory.battle_encounter++;
else
Memory.battle_encounter = 0;
return true;
} },
{ Ditems.Field, ()=> {
if( Memory.FieldHolder.FieldID {
if(Module_movie_test.Index {
if(Memory.MusicIndex {
if (debug_choosedAudio < init_debugger_Audio.soundEntriesCount-1)
debug_choosedAudio++;
else
debug_choosedAudio = 0;
return true;
} }
};
dynamicDebugStrings = new Dictionary>
{
{ Ditems.Battle, ()=> {return strDebugLobby[Ditems.Battle].Clone().Append(Memory.battle_encounter.ToString("D4")); } },
{ Ditems.Field, ()=> {return strDebugLobby[Ditems.Field].Clone().Append($"{Memory.FieldHolder.FieldID.ToString("D3")} - {Memory.FieldHolder.fields[Memory.FieldHolder.FieldID].ToUpper()}"); } },
{ Ditems.Movie, ()=> {
if (Movie.Files.Count<=Module_movie_test.Index)
Module_movie_test.Index=0;
if(Movie.Files.Count ==0)
return "";
Movie.Files Files;
return strDebugLobby[Ditems.Movie].Clone().Append(Path.GetFileNameWithoutExtension(Files[Module_movie_test.Index])); } },
{ Ditems.Music, ()=> {return strDebugLobby[Ditems.Music].Clone().Append(Path.GetFileNameWithoutExtension(Memory.dicMusic[Memory.MusicIndex][0])); } },
{ Ditems.Sounds, ()=> {return strDebugLobby[Ditems.Sounds].Clone().Append(debug_choosedAudio.ToString("D4")); } }
};
}
protected override void InitShift(int i, int col, int row)
{
base.InitShift(i, col, row);
SIZE[i].Inflate(-22, -8);
SIZE[i].Offset(0, 12 + (-8 * row));
}
#endregion Methods
}
}