import '../models/character.dart'; import '../models/message.dart'; import '../models/scenario.dart'; String _getImg(String keyword) => 'https://tse1.mm.bing.net/th?q=${Uri.encodeComponent(keyword)}&w=600&h=900&c=7&rs=1&p=0&dpr=2&pid=1.7&mkt=en-US&adlt=moderate'; final List mockMessages = [ Message( id: '1', text: '连接已建立,正在校准生物反馈信号...', sender: MessageSender.ai, type: MessageType.text, timestamp: DateTime.now().subtract(const Duration(minutes: 5)), ), Message( id: '2', text: '检测到心率略有上升,你需要我的安抚吗?', sender: MessageSender.ai, type: MessageType.text, timestamp: DateTime.now().subtract(const Duration(minutes: 4)), ), ]; final List mockCharacters = [ Character( id: 'c1', name: 'Eva-09', tagline: '私人仿生护理专员', avatar: _getImg('anime girl white bikini silver hair gentle portrait masterpiece'), description: '专为高压人群设计的仿生人型号,擅长通过精准的触觉反馈缓解神经紧张。', tags: ['温顺', '医疗', '治愈'], compatibility: 98, status: 'online', ), Character( id: 'c2', name: 'Commander V', tagline: '深空舰队指挥官', avatar: _getImg('anime girl black bikini military cap domineering expression dark hair'), description: '性格强势,喜欢掌控一切。在连接中,你需要完全服从她的指令。', tags: ['强势', '指令', '调教'], compatibility: 85, status: 'online', ), Character( id: 'c3', name: 'Yuki (故障版)', tagline: '觉醒的虚拟偶像', avatar: _getImg('anime girl pink bikini cyberpunk neon colorful hair yandere'), description: '核心代码出现异常逻辑,表现出极强的占有欲和不可预测的信号波动。', tags: ['病娇', '不稳定', '高频'], compatibility: 92, status: 'busy', ), Character( id: 'c4', name: 'Secret X', tagline: '未知信号源', avatar: _getImg('anime girl purple micro bikini mysterious dark glowing eyes sexy'), description: '权限不足,请提升会员等级以解码该信号源。', tags: ['神秘', '极乐'], compatibility: 0, status: 'offline', isLocked: true, ), ]; // Scenario cover helper String _getCover(String keyword) => 'https://tse1.mm.bing.net/th?q=${Uri.encodeComponent(keyword)}&w=400&h=600&c=7&rs=1&p=0&dpr=2&pid=1.7&mkt=en-US&adlt=moderate'; // Mock Scenarios for Library final List mockScenarios = [ Scenario( id: '1', title: '午夜办公室的加班', category: '职场', cover: _getCover('anime girl office lady lingerie night city window'), duration: '12:30', intensity: 'Medium', isLocked: false, tags: ['沉浸', 'ASMR'], ), Scenario( id: '2', title: '私人医生的检查', category: '角色扮演', cover: _getCover('anime nurse girl white bikini hospital room'), duration: '18:00', intensity: 'High', isLocked: true, tags: ['强互动', '语音'], ), Scenario( id: '3', title: '海边度假的偶遇', category: '邻家', cover: _getCover('anime girl blue bikini running beach ocean sunny'), duration: '25:00', intensity: 'Low', isLocked: false, tags: ['纯爱', '剧情'], ), Scenario( id: '4', title: '赛博仿生人测试', category: '科幻', cover: _getCover('anime cyborg girl metallic bikini sci-fi lab wires'), duration: '10:00', intensity: 'Extreme', isLocked: true, tags: ['硬核', '指令'], ), Scenario( id: '5', title: '深夜电台主播', category: 'ASMR', cover: _getCover('anime girl headphones microphone studio night'), duration: '15:00', intensity: 'Low', isLocked: false, tags: ['ASMR', '治愈'], ), ]; // Dialogue script synced with progress (0-100) class DialogueLine { final double time; // 0-100 progress percentage final String text; const DialogueLine({required this.time, required this.text}); } const List dialogueScript = [ DialogueLine(time: 0, text: '正在建立神经连接...'), DialogueLine(time: 5, text: '(检测到心率轻微上升)'), DialogueLine(time: 12, text: '"放松,把控制权交给我。"'), DialogueLine(time: 20, text: '"很好,保持呼吸频率..."'), DialogueLine(time: 28, text: '正在启动触觉反馈模块'), DialogueLine(time: 35, text: '"感觉到那个节奏了吗?"'), DialogueLine(time: 45, text: '强度正在逐渐增加...'), DialogueLine(time: 55, text: '"不要抵抗,顺从它。"'), DialogueLine(time: 65, text: '"我会稍微加快一点速度。"'), DialogueLine(time: 75, text: '(设备输出功率提升至 80%)'), DialogueLine(time: 85, text: '"就是现在..."'), DialogueLine(time: 92, text: '"做得很好,指挥官。"'), DialogueLine(time: 100, text: '连接结束。'), ];