UNPKG

vtf-js

Version:

A javascript IO library for the Valve Texture Format.

90 lines (89 loc) 3.88 kB
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; }