import type { Vec2 } from '../core/types'; export interface WorldStreamingConfig { chunkSize: number; loadRadius: number; unloadRadius: number; preloadRadius: number; maxLoadedChunks: number; loadPriority: 'distance' | 'direction' | 'combined'; transitionBlend: number; } export declare const DEFAULT_STREAMING: WorldStreamingConfig; export interface WorldChunk { x: number; y: number; state: 'unloaded' | 'loading' | 'loaded' | 'active' | 'unloading'; entities: string[]; terrain?: ChunkTerrain; lastAccess: number; priority: number; } export interface ChunkTerrain { heightmap: Float32Array; biome: string; decorations: TerrainDecoration[]; } export interface TerrainDecoration { type: string; position: Vec2; scale: number; rotation: number; variant: number; } export declare function getChunkCoord(worldPos: Vec2, chunkSize: number): { cx: number; cy: number; }; export declare function getChunksInRadius(centerChunk: { cx: number; cy: number; }, radius: number): Array<{ cx: number; cy: number; }>; export declare function chunkKey(cx: number, cy: number): string; export interface TerrainGenConfig { seed: number; octaves: number; frequency: number; amplitude: number; lacunarity: number; persistence: number; heightScale: number; erosionPasses: number; biomes: BiomeDef[]; waterLevel: number; } export interface BiomeDef { name: string; minHeight: number; maxHeight: number; minMoisture: number; maxMoisture: number; color: string; vegetation: VegetationRule[]; tileType: string; } export interface VegetationRule { type: string; density: number; minScale: number; maxScale: number; clusterSize: number; avoidRadius: number; } /** Simple value noise. */ export declare function valueNoise2D(x: number, y: number, seed: number): number; /** Fractal Brownian Motion. */ export declare function fbm(x: number, y: number, config: TerrainGenConfig): number; export declare function selectBiome(height: number, moisture: number, biomes: BiomeDef[]): BiomeDef | null; export declare const DEFAULT_BIOMES: BiomeDef[]; export type WeatherType = 'clear' | 'cloudy' | 'rain' | 'heavy-rain' | 'storm' | 'snow' | 'blizzard' | 'fog' | 'sandstorm'; export interface WeatherConfig { type: WeatherType; intensity: number; windDirection: number; windSpeed: number; temperature: number; humidity: number; visibility: number; lightingMultiplier: number; particleDensity: number; soundId?: string; transitionDuration: number; } export interface WeatherSchedule { entries: WeatherScheduleEntry[]; transitionDuration: number; randomVariation: number; } export interface WeatherScheduleEntry { startHour: number; duration: number; weather: WeatherType; probability: number; minIntensity: number; maxIntensity: number; } export declare const WEATHER_PRESETS: Record>; export declare function lerpWeather(a: WeatherConfig, b: WeatherConfig, t: number): WeatherConfig; export interface DayNightConfig { dayLengthSeconds: number; startHour: number; sunriseHour: number; sunsetHour: number; ambientDay: string; ambientNight: string; ambientSunrise: string; ambientSunset: string; sunIntensityDay: number; sunIntensityNight: number; moonPhase: boolean; starsAtNight: boolean; } export declare const DEFAULT_DAY_NIGHT: DayNightConfig; export type TimeOfDay = 'night' | 'dawn' | 'morning' | 'noon' | 'afternoon' | 'dusk'; export declare function getTimeOfDay(hour: number): TimeOfDay; export declare function getGameHour(realElapsedSeconds: number, config: DayNightConfig): number; export declare function getSunAngle(hour: number, config: DayNightConfig): number; export interface NPCSchedule { npcId: string; entries: ScheduleEntry[]; defaultActivity: string; defaultLocation: string; } export interface ScheduleEntry { startHour: number; endHour: number; activity: string; location: string; waypoints?: Vec2[]; priority: number; daysOfWeek?: number[]; conditions?: string[]; } export declare function getCurrentScheduleEntry(schedule: NPCSchedule, hour: number, dayOfWeek: number): ScheduleEntry | null; export type QuestState = 'unavailable' | 'available' | 'active' | 'completed' | 'failed' | 'turned-in'; export type ObjectiveType = 'kill' | 'collect' | 'deliver' | 'talk' | 'escort' | 'explore' | 'interact' | 'survive' | 'custom'; export interface QuestDef { id: string; title: string; description: string; category: 'main' | 'side' | 'daily' | 'repeatable' | 'hidden'; level: number; prerequisites: string[]; objectives: QuestObjective[]; rewards: QuestReward[]; timeLimit?: number; failConditions?: string[]; dialogStart?: string; dialogComplete?: string; chain?: string; repeatable: boolean; autoComplete: boolean; } export interface QuestObjective { id: string; type: ObjectiveType; description: string; targetId?: string; targetCount: number; currentCount: number; optional: boolean; hidden: boolean; location?: Vec2; radius?: number; } export interface QuestReward { type: 'xp' | 'gold' | 'item' | 'reputation' | 'unlock' | 'skill-point'; amount: number; itemId?: string; factionId?: string; } export interface QuestJournal { activeQuests: QuestInstance[]; completedQuests: string[]; failedQuests: string[]; trackedQuestId?: string; } export interface QuestInstance { questId: string; state: QuestState; objectives: QuestObjective[]; startTime: number; completedTime?: number; } export declare function canStartQuest(questDef: QuestDef, journal: QuestJournal): boolean; export declare function startQuest(questDef: QuestDef, journal: QuestJournal): QuestInstance; export declare function updateObjective(instance: QuestInstance, objectiveId: string, incrementBy?: number): boolean; export declare function isQuestComplete(instance: QuestInstance): boolean; export declare function completeQuest(instance: QuestInstance, journal: QuestJournal): void;