Skip to content

Commit

Permalink
Add Aobj support
Browse files Browse the repository at this point in the history
  • Loading branch information
Darxoon committed Jun 18, 2024
1 parent 607cd05 commit fd0cd99
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 8 deletions.
1 change: 1 addition & 0 deletions src/elf/dataType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export enum DataType {
Npc,
Item,
Mobj,
Aobj,

// this is the end of the actual file types
TypeAmount,
Expand Down
34 changes: 26 additions & 8 deletions src/elf/fileTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,19 @@ type UnfilteredInstance<T extends number> = {
-readonly [p in keyof RawTypedef<T>]: StrToType<RawTypedef<T>[p] extends Property<infer U> ? U : RawTypedef<T>[p]>
}

export type Instance<T extends number> = Pick<
UnfilteredInstance<T>,
{[p in keyof UnfilteredInstance<T>]: UnfilteredInstance<T>[p] extends never ? never : p}[keyof UnfilteredInstance<T>]
> & UuidTagged
type GetMetadata<T extends number> = '__' extends keyof RawTypedef<T> ? RawTypedef<T>['__'] : {}
type GetParent<T extends number> = 'parent' extends keyof GetMetadata<T>
? GetMetadata<T>['parent'] extends number ? UnfilteredInstance<GetMetadata<T>['parent']>
: undefined
: undefined

type RemoveNever<T> = Pick<T, {[p in keyof T]: T[p] extends never ? never : p}[keyof T]>

export type Instance<T extends number> = (GetParent<T> extends undefined
? RemoveNever<UnfilteredInstance<T>>
: RemoveNever<GetParent<T> & UnfilteredInstance<T>>
) & UuidTagged
// this is fine :)

const defaultDescriptions: Typedef<string> = {
stage: "The stage that the {type} is on. It's the same for every {type} in the same file.",
Expand All @@ -90,7 +99,7 @@ type TypeDefinition = {
} & { __?: DataTypeMetadata }

interface DataTypeMetadata {
parent?: object // TODO: proper type definition when I need it
parent?: DataType

displayName?: string
dynamicDisplayName?: (obj: any) => string
Expand Down Expand Up @@ -298,6 +307,13 @@ const typedefs = {
field_0x150: "int",
field_0x154: "int",
},
[DataType.Aobj]: {
__: {
displayName: "Aobj",
// same as Mobj
parent: DataType.Mobj,
}
}
} as const satisfies {[dataType: number]: TypeDefinition}


Expand Down Expand Up @@ -337,11 +353,13 @@ export const FILE_TYPES = mapObject(typedefs, ([dataTypeString, typedef]) => [da
console.timeEnd('generating FILE_TYPES')

function generateTypedefFor(typedef: TypeDefinition): FileTypeRegistry {
let metadata: DataTypeMetadata = typedef.__ ?? {}
let metadata: DataTypeMetadata = {...typedef.__}

while (metadata.parent) {
typedef = {...metadata.parent, ...typedef}
metadata = typedef.__ ?? {}
let parent = typedefs[metadata.parent]
delete metadata.parent
typedef = {...parent, ...typedef}
metadata = {...parent.__, ...metadata}
}

const { displayName, dynamicDisplayName, dataDivision, identifyingField } = metadata
Expand Down
1 change: 1 addition & 0 deletions src/lib/editor/fileEditor/welcomeScreen/FileTree.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"data_Npc",
"data_Item",
"data_Mobj",
"data_Aobj",
]
const dispatch = createEventDispatcher()
Expand Down
2 changes: 2 additions & 0 deletions src/lib/modals/DataTypePrompt.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"data_Npc": DataType.Npc,
"data_Item": DataType.Item,
"data_Mobj": DataType.Mobj,
"data_Aobj": DataType.Aobj,
}
onMount(() => {
Expand Down Expand Up @@ -62,6 +63,7 @@
<option value="Npc">NPC Placement (data_Npc)</option>
<option value="Item">Item Placement (data_Item)</option>
<option value="Mobj">Mobj Placement (data_Mobj)</option>
<option value="Aobj">Aobj Placement (data_Aobj)</option>
</select>

<div class="checkbox" style="margin-top: 0.3rem;">
Expand Down

0 comments on commit fd0cd99

Please sign in to comment.