Made capture collision editable

This commit is contained in:
Jelle
2022-12-04 13:48:45 +01:00
parent b569e6fcca
commit 6602a7fc21
2 changed files with 53 additions and 1 deletions

View File

@@ -16,6 +16,7 @@ public class PokeEditor8a : IDataEditor
public TableCache<PokeInfoList8a, PokeInfo8a> PokeResourceList { get; init; } = null!;
public TableCache<PokeResourceTable8a, PokeModelConfig8a> PokeResourceTable { get; init; } = null!;
public TableCache<EncounterMultiplierArchive8a, EncounterMultiplier8a> EncounterRateTable { get; init; } = null!;
public TableCache<PokeCaptureCollisionArchive8a, PokeCaptureCollision8a> CaptureCollisionTable { get; init; } = null!;
public void CancelEdits() { }
@@ -34,5 +35,6 @@ public void Save()
PokeResourceList.Save();
PokeResourceTable.Save();
EncounterRateTable.Save();
CaptureCollisionTable.Save();
}
}

View File

@@ -1,5 +1,7 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using FlatSharp.Attributes;
// ReSharper disable UnusedAutoPropertyAccessor.Global
@@ -17,6 +19,54 @@ public class PokeCaptureCollisionArchive8a : IFlatBufferArchive<PokeCaptureColli
public byte[] Write() => FlatBufferConverter.SerializeFrom(this);
[FlatBufferItem(00)] public PokeCaptureCollision8a[] Table { get; set; } = Array.Empty<PokeCaptureCollision8a>();
public PokeCaptureCollision8a GetEntry(ushort species, ushort form)
{
return Table.FirstOrDefault(x => x.Species == species && x.Form == form) ??
new PokeCaptureCollision8a { };
}
public bool HasEntry(ushort species, ushort form)
{
return Table.Any(x => x.Species == species && x.Form == form);
}
public PokeCaptureCollision8a AddEntry(ushort species, ushort form)
{
Debug.Assert(!HasEntry(species, form), "The encounter rate table already contains an entry for the same species and form!");
var entry = new PokeCaptureCollision8a
{
Species = species,
Form = form,
Colliders = new PokeCaptureCollider[]
{
new() {
Shape = "Capsule",
ShapeParameters = new float[]{ 0.5f, 0.2f, 0, 0, 0, 0, 0, 0 },
SocketName = "waist",
Type = "Normal",
},
new() {
Shape = "Capsule",
ShapeParameters = new float[]{ 0.5f, 0.2f, 0, 0, 0, 0, 0, 0 },
Type = "Pysics",
},
new() {
Shape = "Capsule",
ShapeParameters = new float[]{ 0.5f, 0.2f, 0, 0, 0, 0, 0, 0 },
SocketName = "origin",
Type = "Barrier",
},
}
};
Table = Table.Append(entry)
.OrderBy(x => x.Species)
.ThenBy(x => x.Form)
.ToArray();
return entry;
}
}
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))]
@@ -37,5 +87,5 @@ public class PokeCaptureCollider
[FlatBufferItem(04)] public float OffsetY { get; set; }
[FlatBufferItem(05)] public float OffsetZ { get; set; }
[FlatBufferItem(06)] public string Type { get; set; } = string.Empty;
[FlatBufferItem(07)] public string Field_07 { get; set; } = string.Empty;
[FlatBufferItem(07)] public string Field_07 { get; set; } = string.Empty; // Heatran has this on collider[1] (PM0485), some have it set to SemiLegendFlick. Something like a script tag maybe?
}