Skip to content

Commit

Permalink
feat: ダイヤグラムの再描画機能を追加
Browse files Browse the repository at this point in the history
  • Loading branch information
automatic9045 committed Apr 9, 2022
1 parent 47624df commit 61df383
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 2 deletions.
5 changes: 3 additions & 2 deletions AtsEx.BveTypeCollection/5.8.7554.391.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
</BveType>
<BveType Wrapper="ITimePosForm" Original="aj">
<Method Wrapper="SetScenario" WrapperParams="IScenarioProvider" Original="a"/>
<Method Wrapper="Draw" WrapperParams="void" Original="d" IsOriginalPrivate="true"/>
</BveType>
<!-- Internal class wrappers END -->

Expand Down Expand Up @@ -48,7 +49,7 @@
</Property>
<Method Wrapper="Draw" WrapperParams="void" Original="o"/>
</BveType>

<BveType Wrapper="IBveFile" Original="b5">
<Property Wrapper="Path">
<Getter Original="d"/>
Expand Down Expand Up @@ -190,7 +191,7 @@
<Getter Original="l"/>
<Setter Original="a"/>
</Property>

<Method Wrapper="FromFile" WrapperParams="System.String" Original="a" IsWrapperStatic="true" StaticWrapperContainer="IScenarioInfoGenerator" IsOriginalStatic="true"/>
</BveType>

Expand Down
1 change: 1 addition & 0 deletions AtsEx.BveTypeCollection/6.0.7554.619.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
</BveType>
<BveType Wrapper="ITimePosForm" Original="aj">
<Method Wrapper="SetScenario" WrapperParams="IScenarioProvider" Original="a"/>
<Method Wrapper="Draw" WrapperParams="void" Original="d" IsOriginalPrivate="true"/>
</BveType>
<!-- Internal class wrappers END -->

Expand Down
6 changes: 6 additions & 0 deletions AtsEx.PluginHost/IBveHacker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,5 +112,11 @@ public interface IBveHacker : IDisposable
/// シナリオの読込中に <see cref="IScenarioProvider"/> を取得するには <see cref="ScenarioProviderCreated"/> イベントを購読してください。
/// </summary>
IScenarioProvider CurrentScenarioProvider { get; }


/// <summary>
/// BVE の「時刻と位置」フォームのダイヤグラムを再描画します。
/// </summary>
void UpdateDiagram();
}
}
1 change: 1 addition & 0 deletions AtsEx/AtsEx.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
<Compile Include="BveHacker\CoreHackService.cs" />
<Compile Include="BveHacker\CoreHackServices\ContextMenuHacker.cs" />
<Compile Include="BveHacker\CoreHackServices\LoadErrorHacker.cs" />
<Compile Include="BveHacker\CoreHackServices\DiagramHacker.cs" />
<Compile Include="ClassWrappers\Helpers\ScenarioInfoGenerator.cs" />
<Compile Include="ClassWrappers\Internal\ChartForm.cs" />
<Compile Include="ClassWrappers\Internal\LoadingProgressForm.cs" />
Expand Down
4 changes: 4 additions & 0 deletions AtsEx/BveHacker/BveHacker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@ public IScenarioProvider CurrentScenarioProvider
internal set => Services.GetService<IScenarioHacker>().CurrentScenarioProvider = value as ScenarioProvider;
}


public void UpdateDiagram() => Services.GetService<IDiagramHacker>().Draw();


public void Dispose()
{
Services.Dispose();
Expand Down
1 change: 1 addition & 0 deletions AtsEx/BveHacker/CoreHackServiceCollectionBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public static ServiceCollection Build(Process targetProcess)
services.Register<ISubFormHacker>(() => new SubFormHacker(targetProcess, services));
services.Register<ILoadErrorHacker>(() => new LoadErrorHacker(targetProcess, services));
services.Register<IScenarioHacker>(() => new ScenarioHacker(targetProcess, services));
services.Register<IDiagramHacker>(() => new DiagramHacker(targetProcess, services));

services.Lock();

Expand Down
36 changes: 36 additions & 0 deletions AtsEx/BveHacker/CoreHackServices/DiagramHacker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using HarmonyLib;

using Automatic9045.AtsEx.BveTypeCollection;
using Automatic9045.AtsEx.ClassWrappers;
using Automatic9045.AtsEx.PluginHost;
using Automatic9045.AtsEx.PluginHost.ClassWrappers;

namespace Automatic9045.AtsEx.CoreHackServices
{
internal interface IDiagramHacker
{
void Draw();
}

internal sealed class DiagramHacker : CoreHackService, IDiagramHacker
{
private ITimePosForm TimePosForm;

public DiagramHacker(Process targetProcess, ServiceCollection services) : base(targetProcess, services)
{
Form formSrc = services.GetService<ISubFormHacker>().TimePosForm;
TimePosForm = new TimePosForm(formSrc);
}

public void Draw() => TimePosForm.Draw();
}
}
19 changes: 19 additions & 0 deletions AtsEx/ClassWrappers/Internal/TimePosForm.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

using Automatic9045.AtsEx.BveTypeCollection;
using Automatic9045.AtsEx.PluginHost;
using Automatic9045.AtsEx.PluginHost.ClassWrappers;

namespace Automatic9045.AtsEx.ClassWrappers
{
internal interface ITimePosForm : IClassWrapper
{
void SetScenario(IScenarioProvider scenarioProvider);
void Draw();
}

internal class TimePosForm : ClassWrapper, ITimePosForm
{
public TimePosForm(object src) : base(src)
{
IBveTypeMemberCollection members = BveTypeCollectionProvider.Instance.GetTypeInfoOf<ITimePosForm>();

DrawMethod = members.GetSourceMethodOf(nameof(ITimePosForm.Draw));
}

public void SetScenario(IScenarioProvider scenarioProvider) => throw new NotImplementedException();

protected MethodInfo DrawMethod;
public void Draw() => DrawMethod.Invoke(Src, null);
}
}

0 comments on commit 61df383

Please sign in to comment.