client/src/types.ts

235 lines
3.9 KiB
TypeScript

export type Notification = {
id?: string
title?: string
message?: string
}
export type AssetDataT = {
key: string
data: string
group: 'tiles' | 'objects' | 'sprites' | 'sprite_animations' | 'sound' | 'music' | 'ui' | 'font' | 'other'
updatedAt: Date
isAnimated?: boolean
frameCount?: number
frameWidth?: number
frameHeight?: number
}
export type Tile = {
id: string
name: string
tags: any | null
createdAt: Date
updatedAt: Date
}
export type Object = {
id: string
name: string
tags: any | null
originX: number
originY: number
isAnimated: boolean
frameSpeed: number
frameWidth: number
frameHeight: number
createdAt: Date
updatedAt: Date
ZoneObject: ZoneObject[]
}
export type Item = {
id: string
name: string
description: string | null
stackable: boolean
createdAt: Date
updatedAt: Date
characters: CharacterItem[]
}
export type Zone = {
id: number
name: string
width: number
height: number
tiles: any | null
pvp: boolean
zoneEffects: ZoneEffect[]
zoneEventTiles: ZoneEventTile[]
zoneObjects: ZoneObject[]
characters: Character[]
chats: Chat[]
createdAt: Date
updatedAt: Date
}
export type ZoneEffect = {
id: string
zoneId: number
zone: Zone
effect: string
strength: number
}
export type ZoneObject = {
id: string
zoneId: number
zone: Zone
objectId: string
object: Object
depth: number
isRotated: boolean
positionX: number
positionY: number
}
export enum ZoneEventTileType {
BLOCK = 'BLOCK',
TELEPORT = 'TELEPORT',
NPC = 'NPC',
ITEM = 'ITEM'
}
export type ZoneEventTile = {
id: string
zoneId: number
zone: Zone
type: ZoneEventTileType
positionX: number
positionY: number
teleport?: ZoneEventTileTeleport
}
export type ZoneEventTileTeleport = {
id: string
zoneEventTileId: string
zoneEventTile: ZoneEventTile
toZoneId: number
toZone: Zone
toPositionX: number
toPositionY: number
toRotation: number
}
export type User = {
id: number
username: string
password: string
characters: Character[]
}
export enum CharacterGender {
MALE = 'MALE',
FEMALE = 'FEMALE'
}
export enum CharacterRace {
HUMAN = 'HUMAN',
ELF = 'ELF',
DWARF = 'DWARF',
ORC = 'ORC',
GOBLIN = 'GOBLIN'
}
export type CharacterType = {
id: number
name: string
gender: CharacterGender
race: CharacterRace
isEnabledForCharCreation: boolean
characters: Character[]
spriteId?: string
sprite?: Sprite
createdAt: Date
updatedAt: Date
}
export type Character = {
id: number
userId: number
user: User
name: string
hitpoints: number
mana: number
level: number
experience: number
alignment: number
role: string
positionX: number
positionY: number
rotation: number
zoneId: number
zone: Zone
characterTypeId: number | null
characterType: CharacterType | null
chats: Chat[]
items: CharacterItem[]
}
export type ZoneCharacter = {
character: Character
isMoving?: boolean
}
export type ExtendedCharacter = Character & {
isMoving?: boolean
}
export type CharacterItem = {
id: number
characterId: number
character: Character
itemId: string
item: Item
quantity: number
}
export type Sprite = {
id: string
name: string
createdAt: Date
updatedAt: Date
spriteActions: SpriteAction[]
characterTypes: CharacterType[]
}
export type SpriteAction = {
id: string
spriteId: string
sprite: Sprite
action: string
sprites: string[]
originX: number
originY: number
isAnimated: boolean
isLooping: boolean
frameWidth: number
frameHeight: number
frameSpeed: number
}
export type Chat = {
id: number
characterId: number
character: Character
zoneId: number
zone: Zone
message: string
createdAt: Date
}
export type WorldSettings = {
date: Date
isRainEnabled: boolean
isFogEnabled: boolean
fogDensity: number
}
export type WeatherState = {
isRainEnabled: boolean
rainPercentage: number
isFogEnabled: boolean
fogDensity: number
}