vtf-js
Version:
A javascript IO library for the Valve Texture Format.
90 lines (89 loc) • 3.88 kB
TypeScript
import { DataBuffer } from './buffer.js';
import { VFileHeader } from '../vtf.js';
/** A map of header tags and their corresponding decoders. Using {@link registerResourceType} to register new tags is recommended! */
export declare const VResourceTypes: {
[key: number]: VResourceStatic;
};
/** Registers a resource to be used when the specified tag is encountered. */
export declare function registerResourceType(resource: VResourceStatic, tag: number): void;
/** A collection of common resource header tags as BE 24-bit integers. */
export declare enum VHeaderTags {
TAG_LEGACY_BODY = 3145728,
TAG_LEGACY_THUMB = 65536,
TAG_SHEET = 1048576,
TAG_AXC = 4282435,// AXC
TAG_HOTSPOT = 2818048
}
/** Implements a resource header. This serves as a container to provide to {@link VResourceStatic} when decoding. */
export declare class VHeader {
readonly tag: number;
readonly flags: number;
readonly start: number;
length?: number | undefined;
constructor(tag: number, flags: number, start: number, length?: number | undefined);
/** Returns true if the `0x2` flag is unset. */
hasData(): boolean;
}
/** Defines a resource decoder. */
export interface VResourceStatic {
decode(header: VHeader, view: DataBuffer | undefined, info: VFileHeader): Promise<VResource> | VResource;
}
/** Defines a generic resource entry. All resources are required to implement this interface! */
export interface VResource {
/** The tag of this resource. Accessed by `Vtf` to encode the resource header. */
tag: number;
/** The flags of this resource. Accessed by `Vtf` to encode the resource header. */
flags: number;
/** Returns whether this resource should be considered a "legacy" resource with no predefined length. */
isLegacy(): boolean;
/** Encode the body of this resource into an ArrayBuffer. */
encode(info: VFileHeader): Promise<ArrayBuffer | undefined> | ArrayBuffer | undefined;
}
/** Implements a generic resource entry. This can be subclassed to quickly implement {@link VResource}. */
export declare class VBaseResource implements VResource {
readonly tag: number;
readonly flags: number;
raw?: DataBuffer | undefined;
constructor(tag: number, flags: number, raw?: DataBuffer | undefined);
isLegacy(): boolean;
static decode(header: VHeader, view: DataBuffer | undefined, info: VFileHeader): Promise<VBaseResource> | VBaseResource;
encode(info: VFileHeader): Promise<ArrayBuffer | undefined> | ArrayBuffer | undefined;
}
export interface SheetFrame {
coords: Float32Array[];
duration: number;
}
export interface SheetSequence {
clamp: boolean;
duration: number;
frames: SheetFrame[];
}
export declare class VSheetResource extends VBaseResource {
sequences: SheetSequence[];
constructor(flags: number, sequences: SheetSequence[]);
static decode(header: VHeader, view: DataBuffer, info: VFileHeader): VSheetResource;
encode(info: VFileHeader): ArrayBuffer;
}
/** Defines flags which can be used to modify the behavior of Hotspot regions. */
export declare const enum HotSpotRectFlags {
AllowRotation = 1,
AllowReflection = 2,
AltGroup = 4
}
/** Defines a Hotspot rect in pixel space. */
export interface HotspotRect {
flags: number;
min_x: number;
min_y: number;
max_x: number;
max_y: number;
}
/** The Hotspot data resource. See {@link https://wiki.stratasource.org/modding/overview/vtf-hotspot-resource this page} for more information. */
export declare class VHotspotResource extends VBaseResource {
version: number;
editorFlags: number;
rects: HotspotRect[];
constructor(flags: number, version: number, editorFlags: number, rects: HotspotRect[]);
static decode(header: VHeader, view: DataBuffer, info: VFileHeader): VHotspotResource;
encode(info: VFileHeader): ArrayBuffer;
}