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<WeatherType, Partial<WeatherConfig>>;
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;
