Skip to content

Commit

Permalink
feat: [クラスラッパー]自軌道関連の型・メンバーを追加
Browse files Browse the repository at this point in the history
  • Loading branch information
automatic9045 committed Jul 26, 2023
1 parent aaed1be commit 0398861
Show file tree
Hide file tree
Showing 7 changed files with 255 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Libs/BveTypes/BveTypes.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@
<Compile Include="ClassWrappers\Public\CarBc.cs" />
<Compile Include="ClassWrappers\Public\CarInfo.cs" />
<Compile Include="ClassWrappers\Public\Cl.cs" />
<Compile Include="ClassWrappers\Public\Curve.cs" />
<Compile Include="ClassWrappers\Public\CurveList.cs" />
<Compile Include="ClassWrappers\Public\Direct3DProvider.cs" />
<Compile Include="ClassWrappers\Public\CarDoor.cs" />
<Compile Include="ClassWrappers\Public\DoorSet.cs" />
Expand All @@ -98,6 +100,7 @@
<Compile Include="ClassWrappers\Public\Ecb.cs" />
<Compile Include="ClassWrappers\Public\GraphCurve.cs" />
<Compile Include="ClassWrappers\Public\GraphCurvePoint.cs" />
<Compile Include="ClassWrappers\Public\MyTrack.cs" />
<Compile Include="ClassWrappers\Public\Passenger.cs" />
<Compile Include="ClassWrappers\Public\SideDoorSet.cs" />
<Compile Include="ClassWrappers\Public\SoundSet.cs" />
Expand Down
70 changes: 70 additions & 0 deletions Libs/BveTypes/ClassWrappers/Public/Curve.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using FastMember;
using TypeWrapping;

namespace BveTypes.ClassWrappers
{
/// <summary>
/// 自軌道のカーブを表します。
/// </summary>
/// <remarks>
/// 緩和曲線、円曲線のどちらもこのクラスで定義します。緩和曲線の場合は 1m ごとに曲率が変化するため、曲率の変化する 1m ごとに定義します。
/// </remarks>
public class Curve : MapObjectBase
{
[InitializeClassWrapper]
private static void Initialize(BveTypeSet bveTypes)
{
ClassMemberSet members = bveTypes.GetClassInfoOf<Curve>();

CurvatureGetMethod = members.GetSourcePropertyGetterOf(nameof(Curvature));
CurvatureSetMethod = members.GetSourcePropertySetterOf(nameof(Curvature));

DirectionGetMethod = members.GetSourcePropertyGetterOf(nameof(Direction));
DirectionSetMethod = members.GetSourcePropertySetterOf(nameof(Direction));
}

/// <summary>
/// オリジナル オブジェクトから <see cref="Curve"/> クラスの新しいインスタンスを初期化します。
/// </summary>
/// <param name="src">ラップするオリジナル オブジェクト。</param>
protected Curve(object src) : base(src)
{
}

/// <summary>
/// オリジナル オブジェクトからラッパーのインスタンスを生成します。
/// </summary>
/// <param name="src">ラップするオリジナル オブジェクト。</param>
/// <returns>オリジナル オブジェクトをラップした <see cref="Curve"/> クラスのインスタンス。</returns>
[CreateClassWrapperFromSource]
public static Curve FromSource(object src) => src is null ? null : new Curve(src);

private static FastMethod CurvatureGetMethod;
private static FastMethod CurvatureSetMethod;
/// <summary>
/// このカーブの曲率 [/m]、すなわち半径 [m] の逆数を取得・設定します。
/// </summary>
public double Curvature
{
get => CurvatureGetMethod.Invoke(Src, null);
set => CurvatureSetMethod.Invoke(Src, new object[] { value });
}

private static FastMethod DirectionGetMethod;
private static FastMethod DirectionSetMethod;
/// <summary>
/// このカーブの始点における方角を取得・設定します。
/// </summary>
public double Direction
{
get => DirectionGetMethod.Invoke(Src, null);
set => DirectionSetMethod.Invoke(Src, new object[] { value });
}
}
}
39 changes: 39 additions & 0 deletions Libs/BveTypes/ClassWrappers/Public/CurveList.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using TypeWrapping;

namespace BveTypes.ClassWrappers
{
/// <summary>
/// 自軌道のカーブのリストを表します。
/// </summary>
public class CurveList : MapObjectList
{
[InitializeClassWrapper]
private static void Initialize(BveTypeSet bveTypes)
{
ClassMemberSet members = bveTypes.GetClassInfoOf<CurveList>();
}

/// <summary>
/// オリジナル オブジェクトから <see cref="CurveList"/> クラスの新しいインスタンスを初期化します。
/// </summary>
/// <param name="src">ラップするオリジナル オブジェクト。</param>
protected CurveList(IList src) : base(src)
{
}

/// <summary>
/// オリジナル オブジェクトからラッパーのインスタンスを生成します。
/// </summary>
/// <param name="src">ラップするオリジナル オブジェクト。</param>
/// <returns>オリジナル オブジェクトをラップした <see cref="CurveList"/> クラスのインスタンス。</returns>
[CreateClassWrapperFromSource]
public static new CurveList FromSource(object src) => src is null ? null : new CurveList((IList)src);
}
}
77 changes: 77 additions & 0 deletions Libs/BveTypes/ClassWrappers/Public/MyTrack.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using SlimDX;

using FastMember;
using TypeWrapping;

namespace BveTypes.ClassWrappers
{
/// <summary>
/// 自軌道を表します。
/// </summary>
public class MyTrack : ClassWrapperBase
{
[InitializeClassWrapper]
private static void Initialize(BveTypeSet bveTypes)
{
ClassMemberSet members = bveTypes.GetClassInfoOf<MyTrack>();

CurvesGetMethod = members.GetSourcePropertyGetterOf(nameof(Curves));

CurvePostsGetMethod = members.GetSourcePropertyGetterOf(nameof(CurvePosts));

GetDirectionAtMethod = members.GetSourceMethodOf(nameof(GetDirectionAt));
GetPositionMethod = members.GetSourceMethodOf(nameof(GetPosition));
}

/// <summary>
/// オリジナル オブジェクトから <see cref="MyTrack"/> クラスの新しいインスタンスを初期化します。
/// </summary>
/// <param name="src">ラップするオリジナル オブジェクト。</param>
protected MyTrack(object src) : base(src)
{
}

/// <summary>
/// オリジナル オブジェクトからラッパーのインスタンスを生成します。
/// </summary>
/// <param name="src">ラップするオリジナル オブジェクト。</param>
/// <returns>オリジナル オブジェクトをラップした <see cref="MyTrack"/> クラスのインスタンス。</returns>
[CreateClassWrapperFromSource]
public static MyTrack FromSource(object src) => src is null ? null : new MyTrack(src);

private static FastMethod CurvesGetMethod;
/// <summary>
/// 緩和曲線および円曲線のリストを取得します。
/// </summary>
public CurveList Curves => CurveList.FromSource(CurvesGetMethod.Invoke(Src, null));

private static FastMethod CurvePostsGetMethod;
/// <summary>
/// 円曲線の開始距離程と半径のペアを表す <see cref="ValueNode{T}"/> (T は <see cref="double"/>) のリストを取得します。
/// </summary>
public MapObjectList CurvePosts => MapObjectList.FromSource(CurvePostsGetMethod.Invoke(Src, null));

private static FastMethod GetDirectionAtMethod;
/// <summary>
/// 指定した距離程において自軌道が向いている方角を求めます。
/// </summary>
/// <param name="location">方角を求める距離程 [m]。</param>
/// <returns>距離程 <paramref name="location"/> にて自軌道が向いている方角。</returns>
public double GetDirectionAt(int location) => GetDirectionAtMethod.Invoke(Src, new object[] { location });

private static FastMethod GetPositionMethod;
/// <summary>
/// 指定した距離程を基点とした、目標距離程における自軌道の位置ベクトル [m] の差を求めます。
/// </summary>
/// <param name="locationTo">目標距離程 [m]。</param>
/// <param name="locationFrom">基点とする距離程 [m]。</param>
/// <returns>距離程 <paramref name="locationFrom"/> を基点とした、距離程 <paramref name="locationTo"/> における自軌道の位置ベクトル。</returns>
public Vector3 GetPosition(double locationTo, double locationFrom) => GetPositionMethod.Invoke(Src, new object[] { locationTo, locationFrom });
}
}
8 changes: 8 additions & 0 deletions Libs/BveTypes/ClassWrappers/Public/Route.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ private static void Initialize(BveTypeSet bveTypes)
DrawLimitLocationGetMethod = members.GetSourcePropertyGetterOf(nameof(DrawLimitLocation));
DrawLimitLocationSetMethod = members.GetSourcePropertySetterOf(nameof(DrawLimitLocation));

MyTrackGetMethod = members.GetSourcePropertyGetterOf(nameof(MyTrack));

StructuresGetMethod = members.GetSourcePropertyGetterOf(nameof(Structures));
StructuresField = members.GetSourceFieldOf(nameof(Structures));

Expand Down Expand Up @@ -80,6 +82,12 @@ public double DrawLimitLocation
set => DrawLimitLocationSetMethod.Invoke(Src, new object[] { value });
}

private static FastMethod MyTrackGetMethod;
/// <summary>
/// 自軌道に関する情報を取得します。
/// </summary>
public MyTrack MyTrack => ClassWrappers.MyTrack.FromSource(MyTrackGetMethod.Invoke(Src, null));

private static FastMethod StructuresGetMethod;
private static FastField StructuresField;
/// <summary>
Expand Down
29 changes: 29 additions & 0 deletions Libs/BveTypes/WrapTypes/5.8.7554.391.xml
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,20 @@
<Method Wrapper="OnTick" WrapperParams="System.Object; System.EventArgs" Original="a" IsOriginalNonPublic="true"/>
</Class>

<Class Wrapper="Curve" Original="s">
<Property Wrapper="Curvature">
<Getter Original="a"/>
<Setter Original="a"/>
</Property>
<Property Wrapper="Direction">
<Getter Original="b"/>
<Setter Original="b"/>
</Property>
</Class>

<Class Wrapper="CurveList" Original="c6">
</Class>

<Class Wrapper="Direct3DProvider" Original="d9">
<Property Wrapper="Instance" IsWrapperStatic="true">
<Getter Original="d" IsOriginalStatic="true"/>
Expand Down Expand Up @@ -463,6 +477,18 @@
<Method Wrapper="Draw" WrapperParams="atsex:Direct3DProvider; System.Boolean" Original="a"/>
</Class>

<Class Wrapper="MyTrack" Original="b3">
<Property Wrapper="Curves">
<Getter Original="b"/>
</Property>
<Property Wrapper="CurvePosts">
<Getter Original="c"/>
</Property>

<Method Wrapper="GetDirectionAt" WrapperParams="System.Int32" Original="a"/>
<Method Wrapper="GetPosition" WrapperParams="System.Double; System.Double" Original="c"/>
</Class>

<Class Wrapper="NotchInfo" Original="e9">
<Property Wrapper="PowerNotchCount">
<Getter Original="d"/>
Expand Down Expand Up @@ -594,6 +620,9 @@
<Getter Original="e"/>
<Setter Original="a"/>
</Property>
<Property Wrapper="MyTrack">
<Getter Original="l"/>
</Property>
<Property Wrapper="Structures">
<Getter Original="y"/>
</Property>
Expand Down
29 changes: 29 additions & 0 deletions Libs/BveTypes/WrapTypes/6.0.7554.619.xml
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,20 @@
<Method Wrapper="OnTick" WrapperParams="System.Object; System.EventArgs" Original="a" IsOriginalNonPublic="true"/>
</Class>

<Class Wrapper="Curve" Original="s">
<Property Wrapper="Curvature">
<Getter Original="a"/>
<Setter Original="a"/>
</Property>
<Property Wrapper="Direction">
<Getter Original="b"/>
<Setter Original="b"/>
</Property>
</Class>

<Class Wrapper="CurveList" Original="c6">
</Class>

<Class Wrapper="Direct3DProvider" Original="d9">
<Property Wrapper="Instance" IsWrapperStatic="true">
<Getter Original="d" IsOriginalStatic="true"/>
Expand Down Expand Up @@ -463,6 +477,18 @@
<Method Wrapper="Draw" WrapperParams="atsex:Direct3DProvider; System.Boolean" Original="a"/>
</Class>

<Class Wrapper="MyTrack" Original="b3">
<Property Wrapper="Curves">
<Getter Original="b"/>
</Property>
<Property Wrapper="CurvePosts">
<Getter Original="c"/>
</Property>

<Method Wrapper="GetDirectionAt" WrapperParams="System.Int32" Original="a"/>
<Method Wrapper="GetPosition" WrapperParams="System.Double; System.Double" Original="c"/>
</Class>

<Class Wrapper="NotchInfo" Original="e9">
<Property Wrapper="PowerNotchCount">
<Getter Original="d"/>
Expand Down Expand Up @@ -594,6 +620,9 @@
<Getter Original="e"/>
<Setter Original="a"/>
</Property>
<Property Wrapper="MyTrack">
<Getter Original="l"/>
</Property>
<Property Wrapper="Structures">
<Getter Original="y"/>
</Property>
Expand Down

0 comments on commit 0398861

Please sign in to comment.