1335 lines
53 KiB
Dart
1335 lines
53 KiB
Dart
// lib/providers/game_state_provider.dart
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'dart:math';
|
|
import 'package:kzeduca_app/models/character.dart';
|
|
import 'package:kzeduca_app/models/attributes.dart';
|
|
import 'package:kzeduca_app/models/game_event.dart';
|
|
|
|
/// Um provedor de estado que gerencia o estado completo do jogo.
|
|
/// Ele usa a arquitetura Provider (ChangeNotifier) para notificar a UI
|
|
/// sobre mudanças no estado do jogo.
|
|
class GameStateProvider extends ChangeNotifier {
|
|
Character? _playerCharacter;
|
|
List<GameEvent> _availableEvents = [];
|
|
List<GameEvent> _unseenEvents = [];
|
|
int _currentDay = 1;
|
|
bool _isGameOver = false;
|
|
|
|
// Getters para aceder ao estado do jogo
|
|
Character? get playerCharacter => _playerCharacter;
|
|
List<GameEvent> get availableEvents => _availableEvents;
|
|
int get currentDay => _currentDay;
|
|
bool get isGameOver => _isGameOver;
|
|
|
|
/// Lista de todos os eventos possíveis no jogo.
|
|
// lib/providers/game_state_provider.dart
|
|
|
|
final List<GameEvent> _allPossibleEvents = [
|
|
// =======================================================================
|
|
// === EVENTOS PARA O CENÁRIO 'LUANDA' (ESTUDANTE, CHEFE DE FAMÍLIA) ===
|
|
// =======================================================================
|
|
|
|
GameEvent(
|
|
title: "Aumento da Renda",
|
|
description: "O proprietário subiu o preço da renda. Paga ou procura um lugar mais barato?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar o novo valor (-20.000 Kz)",
|
|
consequenceText: "O seu orçamento ficou mais apertado, mas a moradia está garantida.",
|
|
effect: Attributes(money: -20000.0),
|
|
),
|
|
Decision(
|
|
text: "Procurar outro lugar",
|
|
consequenceText: "Você gasta tempo e energia a procurar, mas pode economizar a longo prazo.",
|
|
effect: Attributes(health: -0.1, happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema de Saúde na Família",
|
|
description: "Um membro da família ficou doente e precisa de remédios caros. Você tem que ajudar.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar pelos remédios (-15.000 Kz)",
|
|
consequenceText: "A família ficou grata, mas a despesa foi pesada. A saúde da pessoa melhorou.",
|
|
effect: Attributes(money: -15000.0, happiness: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Procurar apoio do posto de saúde",
|
|
consequenceText: "Você conseguiu ajuda, mas o processo foi demorado e a pessoa demorou a melhorar.",
|
|
effect: Attributes(health: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Oportunidade de Trabalho",
|
|
description: "Há um trabalho de meio período na universidade. Pode ajudar a pagar as contas.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Aceitar o trabalho (+10.000 Kz)",
|
|
consequenceText: "Você ganhou mais dinheiro e experiência profissional, mas o tempo para a diversão diminuiu.",
|
|
effect: Attributes(money: 10000.0, professionalExperience: 0.1, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Recusar e focar nos estudos",
|
|
consequenceText: "Sua vida académica melhorou, mas o dinheiro continua apertado.",
|
|
effect: Attributes(education: 0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Convite para Casamento",
|
|
description: "Um parente distante convida para o seu casamento. O presente e a viagem serão caros.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Ir ao casamento (-10.000 Kz)",
|
|
consequenceText: "Você gastou dinheiro, mas a sua felicidade aumentou e a família ficou satisfeita.",
|
|
effect: Attributes(money: -10000.0, happiness: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Não ir e dar uma desculpa",
|
|
consequenceText: "Você economizou, mas a família ficou um pouco desapontada.",
|
|
effect: Attributes(happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Quebra de Geladeira",
|
|
description: "A sua geladeira quebrou e a comida pode estragar. Conserta ou compra uma nova?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Consertar a antiga (-5.000 Kz)",
|
|
consequenceText: "O conserto é mais barato, mas pode não durar muito.",
|
|
effect: Attributes(money: -5000.0),
|
|
),
|
|
Decision(
|
|
text: "Comprar uma nova (-30.000 Kz)",
|
|
consequenceText: "A nova geladeira é segura e eficiente, mas a despesa é grande.",
|
|
effect: Attributes(money: -30000.0, happiness: 0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema com a Água",
|
|
description: "A fatura da água chegou com um valor muito alto. Há um vazamento no prédio.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar a fatura completa (-10.000 Kz)",
|
|
consequenceText: "Você evitou o corte de água, mas pagou caro pelo problema.",
|
|
effect: Attributes(money: -10000.0),
|
|
),
|
|
Decision(
|
|
text: "Contestar a fatura",
|
|
consequenceText: "A fatura foi reavaliada, mas o processo foi demorado e estressante.",
|
|
effect: Attributes(happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Concurso de Estudos",
|
|
description: "Um concurso académico oferece um prémio em dinheiro. Participa para ganhar ou foca nas tarefas do dia a dia?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Participar do concurso (+10.000 Kz)",
|
|
consequenceText: "Você ganhou o concurso, melhorando as suas finanças e reputação académica.",
|
|
effect: Attributes(money: 10000.0, education: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Focar em outras responsabilidades",
|
|
consequenceText: "Você não ganhou dinheiro extra, mas conseguiu lidar com o resto do seu trabalho e tarefas.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Convite de Negócio",
|
|
description: "Um amigo te convida para se juntar a ele em um pequeno negócio. Você vai arriscar?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Investir 5.000 Kz para começar",
|
|
consequenceText: "O investimento foi um sucesso, e o seu dinheiro aumentou.",
|
|
effect: Attributes(money: 5000.0, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Não arriscar. Não tem tempo.",
|
|
consequenceText: "Você não perdeu dinheiro, mas a oportunidade foi perdida.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Festa de Aniversário",
|
|
description: "A sua festa de aniversário está a chegar. Vai fazer uma festa grande ou uma celebração pequena?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Fazer uma festa grande (-20.000 Kz)",
|
|
consequenceText: "A festa foi ótima e a sua felicidade aumentou, mas o seu dinheiro diminuiu.",
|
|
effect: Attributes(money: -20000.0, happiness: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Fazer uma celebração pequena",
|
|
consequenceText: "Você economizou, mas a celebração não foi tão divertida quanto o planeado.",
|
|
effect: Attributes(happiness: 0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Dívida Inesperada",
|
|
description: "Você recebeu uma notificação de uma dívida antiga que tinha esquecido. Você precisa pagar agora.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar a dívida (-10.000 Kz)",
|
|
consequenceText: "Você pagou, aliviando o stress, mas o seu dinheiro foi afetado.",
|
|
effect: Attributes(money: -10000.0, happiness: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Tentar negociar um plano de pagamento",
|
|
consequenceText: "A negociação foi bem sucedida, e você conseguiu pagar menos, mas o processo foi longo.",
|
|
effect: Attributes(money: -5000.0, health: -0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Aumento nos Preços",
|
|
description: "O preço dos produtos no mercado subiu. Você precisa lidar com a inflação.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Comprar em quantidade (-5.000 Kz)",
|
|
consequenceText: "Você gastou mais agora, mas economizará a longo prazo.",
|
|
effect: Attributes(money: -5000.0),
|
|
),
|
|
Decision(
|
|
text: "Comprar apenas o essencial",
|
|
consequenceText: "Você economizou, mas pode ter que comprar mais produtos no futuro por um preço mais alto.",
|
|
effect: Attributes(money: 0.0),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Venda de Carro",
|
|
description: "O seu carro está velho e está a dar muitos problemas. Vende ou conserta?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Vender o carro (+20.000 Kz)",
|
|
consequenceText: "Você ganhou um dinheiro extra, mas agora terá que usar transporte público.",
|
|
effect: Attributes(money: 20000.0, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Consertar o carro (-15.000 Kz)",
|
|
consequenceText: "O carro está a funcionar, mas o conserto foi caro e pode dar problemas novamente.",
|
|
effect: Attributes(money: -15000.0),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Despesa de Transporte",
|
|
description: "O preço dos bilhetes de táxi subiu devido à inflação. Como vai lidar com isso?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar o preço total (-500 Kz)",
|
|
consequenceText: "Você pagou, mas o seu orçamento ficou mais apertado.",
|
|
effect: Attributes(money: -500.0),
|
|
),
|
|
Decision(
|
|
text: "Caminhar para economizar",
|
|
consequenceText: "Você economizou dinheiro, mas a sua saúde e felicidade diminuíram.",
|
|
effect: Attributes(money: 0.0, happiness: -0.2, health: -0.2),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Oportunidade de Negócio",
|
|
description: "Um amigo sugere que você comece um pequeno negócio online para vender roupas. Vai arriscar?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Investir 5.000 Kz para começar (+5.000 Kz de potencial)",
|
|
consequenceText: "Você investiu. Há um potencial de lucro, mas também de perda. A experiência aumentou.",
|
|
effect: Attributes(money: -5000.0, professionalExperience: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Não arriscar. Não tem tempo.",
|
|
consequenceText: "Você não arriscou. A sua situação financeira e experiência profissional não mudaram.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Livros e Materiais de Estudo",
|
|
description: "A bibliografia do curso é cara. Compra tudo ou procura versões digitais?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Comprar os livros originais (-10.000 Kz)",
|
|
consequenceText: "Os livros são caros, mas o seu desempenho académico pode melhorar.",
|
|
effect: Attributes(money: -10000.0, education: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Procurar versões digitais gratuitas",
|
|
consequenceText: "Você economizou, mas a pesquisa tomou tempo e a qualidade pode ser inferior.",
|
|
effect: Attributes(happiness: -0.05, education: -0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Convite para Festa",
|
|
description: "Um colega convida para uma festa. Vai socializar ou ficar em casa a estudar?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Ir à festa (-2.000 Kz)",
|
|
consequenceText: "Você divertiu-se e fez novas amizades, mas gastou dinheiro.",
|
|
effect: Attributes(money: -2000.0, happiness: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Ficar em casa e estudar",
|
|
consequenceText: "Você não gastou dinheiro e dedicou-se aos estudos, mas sentiu-se um pouco solitário.",
|
|
effect: Attributes(happiness: -0.1, education: 0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema de Saúde",
|
|
description: "Você está com uma gripe. Vai ao médico ou trata-se em casa?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Ir à clínica privada (-8.000 Kz)",
|
|
consequenceText: "A clínica privada é cara, mas a recuperação é mais rápida.",
|
|
effect: Attributes(money: -8000.0, health: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Tratar em casa com chás e descanso",
|
|
consequenceText: "Você economizou, mas a recuperação será mais lenta e a saúde fica em risco.",
|
|
effect: Attributes(health: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Reparo no Computador",
|
|
description: "O seu computador estragou e você precisa dele para fazer o trabalho da faculdade.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Levar à assistência técnica (-15.000 Kz)",
|
|
consequenceText: "O computador foi reparado rapidamente, mas pesou no orçamento.",
|
|
effect: Attributes(money: -15000.0, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Tentar reparar por conta própria",
|
|
consequenceText: "Você economizou dinheiro, mas a tentativa de reparo falhou, perdendo mais tempo.",
|
|
effect: Attributes(happiness: -0.15, health: -0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Bolsa de Estudo",
|
|
description: "Você se qualificou para uma bolsa de estudo. Ela oferece um valor fixo mensal.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Aceitar a bolsa (+10.000 Kz)",
|
|
consequenceText: "A bolsa aliviou a sua carga financeira, mas agora você precisa manter notas altas para não a perder.",
|
|
effect: Attributes(money: 10000.0, education: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Recusar a bolsa",
|
|
consequenceText: "Você recusa a bolsa por não querer se sentir pressionado. Sua situação financeira e felicidade não mudam.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Desconto na Renda",
|
|
description: "O proprietário do seu quarto oferece um desconto se você pagar 3 meses adiantado.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar adiantado (-45.000 Kz)",
|
|
consequenceText: "Você conseguiu um bom desconto e não terá que se preocupar com a renda por algum tempo.",
|
|
effect: Attributes(money: -45000.0, happiness: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Pagar mensalmente",
|
|
consequenceText: "Você mantém a flexibilidade, mas não aproveita o desconto.",
|
|
effect: Attributes(money: -15000.0),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Venda de Livros Usados",
|
|
description: "Você tem livros do semestre anterior que pode vender para outros estudantes.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Vender os livros (+5.000 Kz)",
|
|
consequenceText: "Você vendeu os livros, ganhando um dinheiro extra e desocupando espaço.",
|
|
effect: Attributes(money: 5000.0, happiness: 0.05),
|
|
),
|
|
Decision(
|
|
text: "Guardar os livros",
|
|
consequenceText: "Você mantém os livros para consulta futura, mas perde a oportunidade de dinheiro extra.",
|
|
effect: Attributes(education: 0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Projeto de Grupo",
|
|
description: "Seu grupo para o projeto final não está a colaborar. Você pode fazer tudo sozinho ou tentar motivá-los.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Fazer tudo sozinho",
|
|
consequenceText: "Você garantiu uma nota alta, mas o stress afetou sua saúde e felicidade.",
|
|
effect: Attributes(education: 0.2, health: -0.1, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Tentar motivá-los",
|
|
consequenceText: "A colaboração melhorou, e vocês entregaram um bom projeto. Sua experiência de trabalho em equipa aumentou.",
|
|
effect: Attributes(education: 0.1, professionalExperience: 0.1, happiness: 0.05),
|
|
),
|
|
],
|
|
),
|
|
|
|
// =======================================================================
|
|
// === EVENTOS PARA O CENÁRIO 'BENGUELA' (EMPREENDEDOR, ARTISTA) ===
|
|
// =======================================================================
|
|
|
|
GameEvent(
|
|
title: "Problema com Fornecedor",
|
|
description: "O seu fornecedor de matéria-prima está atrasado. Isso pode atrasar a produção e irritar os clientes.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar mais por uma entrega expressa (-10.000 Kz)",
|
|
consequenceText: "A entrega foi rápida e você evitou o problema, mas a margem de lucro diminuiu.",
|
|
effect: Attributes(money: -10000.0),
|
|
),
|
|
Decision(
|
|
text: "Explicar a situação aos clientes e negociar",
|
|
consequenceText: "Alguns clientes entenderam, outros cancelaram os pedidos. Sua reputação ficou um pouco abalada.",
|
|
effect: Attributes(money: 500.0, happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Oportunidade de Mercado",
|
|
description: "Uma nova feira de negócios foi anunciada na cidade. Participar pode atrair novos clientes.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Alugar um stand (-20.000 Kz)",
|
|
consequenceText: "O investimento foi alto, mas você fez muitos contatos e conseguiu novas vendas.",
|
|
effect: Attributes(money: -20000.0, happiness: 0.2, professionalExperience: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Não participar",
|
|
consequenceText: "Você economizou dinheiro, mas perdeu uma grande oportunidade de networking e crescimento.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Contratação de Funcionário",
|
|
description: "A demanda pelo seu produto está a crescer. Você precisa de ajuda para dar conta do recado.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Contratar um funcionário em part-time (-5.000 Kz/semana)",
|
|
consequenceText: "O funcionário aumenta a sua capacidade de produção, mas o salário é uma despesa fixa.",
|
|
effect: Attributes(money: -5000.0, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Continuar a fazer tudo sozinho",
|
|
consequenceText: "Você não tem despesas extras, mas a carga de trabalho está a afetar a sua saúde e felicidade.",
|
|
effect: Attributes(happiness: -0.15, health: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema com o Pagamento",
|
|
description: "Um cliente fez uma grande encomenda, mas o pagamento está atrasado. O que você faz?",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Enviar um lembrete educado",
|
|
consequenceText: "O cliente pagou no dia seguinte, e a relação permaneceu boa.",
|
|
effect: Attributes(money: 10000.0),
|
|
),
|
|
Decision(
|
|
text: "Cobrar de forma agressiva",
|
|
consequenceText: "O cliente pagou, mas nunca mais comprou de você. Sua reputação no mercado foi danificada.",
|
|
effect: Attributes(money: 10000.0, happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Investimento em Publicidade",
|
|
description: "Você pode investir 10.000 Kz em publicidade online para o seu negócio.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Fazer o investimento (-10.000 Kz)",
|
|
consequenceText: "O investimento gerou muitas novas vendas e aumentou o seu alcance.",
|
|
effect: Attributes(money: -10000.0, happiness: 0.1, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Não investir",
|
|
consequenceText: "Você economizou dinheiro, mas perdeu a oportunidade de crescer o seu negócio.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Inspeção Fiscal",
|
|
description: "Uma inspeção fiscal inesperada pode revelar irregularidades e resultar em multas.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Apresentar a documentação completa",
|
|
consequenceText: "Você estava em ordem, e a inspeção foi rápida. A sua experiência profissional em burocracia aumentou.",
|
|
effect: Attributes(professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Pagar uma pequena propina para simplificar (-5.000 Kz)",
|
|
consequenceText: "Você evitou problemas imediatos, mas a sua felicidade e integridade diminuíram.",
|
|
effect: Attributes(money: -5000.0, happiness: -0.2),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Concorrência Desleal",
|
|
description: "Um concorrente está a vender o mesmo produto a um preço irrealista para roubar seus clientes.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Reduzir o seu preço também",
|
|
consequenceText: "Você manteve seus clientes, mas a margem de lucro diminuiu, afetando o seu dinheiro.",
|
|
effect: Attributes(money: -5000.0),
|
|
),
|
|
Decision(
|
|
text: "Focar na qualidade do seu produto",
|
|
consequenceText: "Seus clientes fiéis valorizaram a qualidade, mas você perdeu alguns novos clientes para a concorrência. A sua reputação de qualidade aumentou.",
|
|
effect: Attributes(professionalExperience: 0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema de Logística",
|
|
description: "A entrega de um grande pedido para uma cidade vizinha teve um problema. Você precisa resolver isso.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Contratar uma nova transportadora (-15.000 Kz)",
|
|
consequenceText: "O problema foi resolvido rapidamente, mas custou mais dinheiro do que o esperado.",
|
|
effect: Attributes(money: -15000.0),
|
|
),
|
|
Decision(
|
|
text: "Levar o pedido pessoalmente",
|
|
consequenceText: "Você economizou dinheiro, mas a viagem foi longa e cansativa, afetando sua saúde e felicidade.",
|
|
effect: Attributes(health: -0.1, happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Expansão do Negócio",
|
|
description: "Você tem a oportunidade de abrir uma nova filial em outra área de Benguela.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Arriscar e expandir (-50.000 Kz)",
|
|
consequenceText: "A nova filial teve um bom começo, aumentando o seu alcance e potencial de lucro.",
|
|
effect: Attributes(money: -50000.0, professionalExperience: 0.2, happiness: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Manter-se como está",
|
|
consequenceText: "Você permaneceu seguro, mas a oportunidade de crescimento foi perdida.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Reparo de Equipamento",
|
|
description: "Uma das suas máquinas de produção quebrou e precisa de um conserto caro.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Consertar imediatamente (-20.000 Kz)",
|
|
consequenceText: "A produção voltou ao normal rapidamente, mas o conserto pesou no seu dinheiro.",
|
|
effect: Attributes(money: -20000.0),
|
|
),
|
|
Decision(
|
|
text: "Tentar consertar sozinho",
|
|
consequenceText: "Você conseguiu consertar, economizando dinheiro, mas a máquina ainda não está a 100%.",
|
|
effect: Attributes(professionalExperience: 0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Galeria de Arte",
|
|
description: "Uma galeria de arte local convida-o para exibir o seu trabalho. Há uma taxa de entrada, mas a exposição pode atrair compradores.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar a taxa e expor (-10.000 Kz)",
|
|
consequenceText: "A exposição gerou boas vendas e aumentou a sua reputação.",
|
|
effect: Attributes(money: 20000.0, happiness: 0.1, professionalExperience: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Recusar a exposição",
|
|
consequenceText: "Você economizou, mas perdeu a oportunidade de mostrar a sua arte.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Comissão de Pintura",
|
|
description: "Um cliente importante encomenda uma pintura. O prazo é apertado, mas o pagamento é generoso.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Aceitar a comissão (+30.000 Kz)",
|
|
consequenceText: "Você entregou a pintura a tempo, ganhando muito dinheiro, mas ficou exausto.",
|
|
effect: Attributes(money: 30000.0, health: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Recusar a comissão",
|
|
consequenceText: "Você não se sobrecarregou, mas perdeu uma grande oportunidade financeira.",
|
|
effect: Attributes(happiness: 0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Oficina de Escultura",
|
|
description: "Uma oportunidade para fazer uma oficina de escultura para iniciantes surgiu. Isso pode te dar um dinheiro extra e experiência de ensino.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Fazer a oficina (+5.000 Kz)",
|
|
consequenceText: "A oficina foi um sucesso, você ganhou um dinheiro extra e a felicidade dos alunos te fez muito feliz.",
|
|
effect: Attributes(money: 5000.0, happiness: 0.15, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Não fazer a oficina",
|
|
consequenceText: "Você optou por não ensinar, focando na sua própria arte. Sua situação não mudou.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Crise Criativa",
|
|
description: "Você está sem inspiração e não consegue criar nada novo. A pressão para produzir está a aumentar.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Tirar um tempo para si e viajar (-2.000 Kz)",
|
|
consequenceText: "A viagem revigorou a sua mente, mas pesou no seu bolso.",
|
|
effect: Attributes(money: -2000.0, happiness: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Forçar-se a trabalhar",
|
|
consequenceText: "Você se esforçou, mas o resultado foi um trabalho sem paixão, que afetou sua felicidade e experiência.",
|
|
effect: Attributes(happiness: -0.1, professionalExperience: -0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Venda de Materiais de Arte",
|
|
description: "Há um evento de vendas de materiais de arte na cidade. É uma chance de comprar materiais de alta qualidade com desconto.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Comprar os materiais (-8.000 Kz)",
|
|
consequenceText: "Você investiu em melhores materiais, o que pode melhorar a qualidade de sua arte.",
|
|
effect: Attributes(money: -8000.0, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Não comprar",
|
|
consequenceText: "Você economizou, mas perdeu a chance de melhorar suas ferramentas de trabalho.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema com Equipamento de Arte",
|
|
description: "Seu aerógrafo quebrou. Consertar custa dinheiro, mas é essencial para suas obras.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Consertar o equipamento (-12.000 Kz)",
|
|
consequenceText: "Você consertou o equipamento e pode voltar a criar.",
|
|
effect: Attributes(money: -12000.0),
|
|
),
|
|
Decision(
|
|
text: "Tentar uma nova técnica sem ele",
|
|
consequenceText: "Você explorou uma nova forma de arte e se sentiu inspirado. Sua felicidade e experiência aumentaram.",
|
|
effect: Attributes(happiness: 0.15, professionalExperience: 0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Networking com Outros Artistas",
|
|
description: "Um encontro de artistas locais está a acontecer. É uma oportunidade para trocar ideias e fazer contatos.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Ir ao encontro (-3.000 Kz)",
|
|
consequenceText: "Você fez novos amigos e encontrou inspiração. Sua felicidade e experiência profissional aumentaram.",
|
|
effect: Attributes(money: -3000.0, happiness: 0.1, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Ficar em casa e trabalhar",
|
|
consequenceText: "Você aproveitou o tempo para focar nas suas obras, mas perdeu a oportunidade de networking.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Desconto em Materiais",
|
|
description: "Uma loja de materiais de arte está com uma promoção de 'pague 2, leve 3'.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Aproveitar a oferta (-5.000 Kz)",
|
|
consequenceText: "Você investiu em materiais para o futuro, o que lhe dá uma sensação de segurança.",
|
|
effect: Attributes(money: -5000.0, happiness: 0.05),
|
|
),
|
|
Decision(
|
|
text: "Não comprar",
|
|
consequenceText: "Você economizou, mas pode ter que comprar os mesmos materiais por um preço mais alto no futuro.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Concurso de Arte",
|
|
description: "Um concurso nacional de arte foi anunciado. Ganhar pode te dar fama e dinheiro.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Participar do concurso",
|
|
consequenceText: "Você se dedicou ao concurso e ganhou um prémio. Sua fama e dinheiro aumentaram.",
|
|
effect: Attributes(money: 10000.0, professionalExperience: 0.2, happiness: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Não participar",
|
|
consequenceText: "Você evitou o stress da competição, mas perdeu uma grande oportunidade.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Vandalismo de Obra",
|
|
description: "Uma das suas obras de arte de rua foi vandalizada. Isso te deixa triste e com raiva.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Restaurar a obra (-3.000 Kz)",
|
|
consequenceText: "A obra está como nova, mas você gastou dinheiro e a sua felicidade diminuiu.",
|
|
effect: Attributes(money: -3000.0, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Deixar como está",
|
|
consequenceText: "Você decidiu não gastar dinheiro, mas a tristeza e a raiva permanecem.",
|
|
effect: Attributes(happiness: -0.2),
|
|
),
|
|
],
|
|
),
|
|
|
|
// =======================================================================
|
|
// === EVENTOS PARA O CENÁRIO 'HUAMBO' (PROFISSIONAL, JORNALISTA, PROFESSOR) ===
|
|
// =======================================================================
|
|
|
|
GameEvent(
|
|
title: "Curso Profissional",
|
|
description: "Sua empresa oferece um curso de especialização que pode alavancar sua carreira. O custo é alto, mas a empresa cobre metade.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar a sua parte e fazer o curso (-15.000 Kz)",
|
|
consequenceText: "O curso te tornou um profissional mais qualificado e abriu portas para uma promoção.",
|
|
effect: Attributes(money: -15000.0, professionalExperience: 0.3),
|
|
),
|
|
Decision(
|
|
text: "Recusar a oferta",
|
|
consequenceText: "Você evitou a despesa, mas pode perder oportunidades de crescimento na empresa.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Viagem de Negócios",
|
|
description: "Você é convidado para uma conferência em Luanda. A viagem é importante para networking.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Aceitar e viajar (-25.000 Kz)",
|
|
consequenceText: "A viagem foi um sucesso, você fez contatos valiosos e ganhou reputação na sua área.",
|
|
effect: Attributes(money: -25000.0, professionalExperience: 0.2, happiness: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Ficar para economizar",
|
|
consequenceText: "Você economizou, mas perdeu uma grande oportunidade de networking.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Investimento em Ações",
|
|
description: "Um colega sugere que você invista em ações de uma empresa promissora na bolsa de valores.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Investir 50.000 Kz",
|
|
consequenceText: "Você investiu e a empresa se valorizou, gerando um bom lucro.",
|
|
effect: Attributes(money: -50000.0, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Não investir",
|
|
consequenceText: "Você manteve seu dinheiro seguro, mas perdeu uma oportunidade de crescimento financeiro.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Despesa Imprevista",
|
|
description: "O seu carro precisa de um conserto caro e urgente.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar o conserto integralmente (-30.000 Kz)",
|
|
consequenceText: "O carro foi consertado, mas o seu orçamento ficou muito apertado.",
|
|
effect: Attributes(money: -30000.0),
|
|
),
|
|
Decision(
|
|
text: "Pedir um empréstimo rápido no banco",
|
|
consequenceText: "Você conseguiu o dinheiro, mas terá que pagar juros, o que afeta suas finanças a longo prazo.",
|
|
effect: Attributes(money: -32000.0, happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Ajuda a um Colega",
|
|
description: "Um colega de trabalho pede ajuda com um projeto importante. Ajudar pode te dar um bom reconhecimento, mas também tomará seu tempo.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Ajudar o colega",
|
|
consequenceText: "Você ajudou o colega, e o seu chefe notou o seu espírito de equipa. A sua reputação no trabalho melhorou.",
|
|
effect: Attributes(happiness: 0.1, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Dizer que está muito ocupado",
|
|
consequenceText: "Você não perdeu tempo, mas a oportunidade de mostrar suas habilidades e trabalho em equipa foi perdida.",
|
|
effect: Attributes(happiness: -0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Plano de Aposentadoria",
|
|
description: "Você pode começar a investir em um plano de aposentadoria para garantir seu futuro. Isso exige um investimento inicial.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Investir agora (-10.000 Kz)",
|
|
consequenceText: "Você se sente mais seguro com seu futuro financeiro e a felicidade aumenta.",
|
|
effect: Attributes(money: -10000.0, happiness: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Deixar para depois",
|
|
consequenceText: "Você mantém seu dinheiro no presente, mas a sua insegurança aumenta.",
|
|
effect: Attributes(happiness: -0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema no Computador do Escritório",
|
|
description: "O seu computador está com um vírus. Você pode pedir ajuda ao suporte técnico ou tentar resolver sozinho para mostrar iniciativa.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Chamar o suporte técnico",
|
|
consequenceText: "O problema foi resolvido, e você pode voltar ao trabalho sem perder tempo.",
|
|
effect: Attributes(),
|
|
),
|
|
Decision(
|
|
text: "Resolver sozinho",
|
|
consequenceText: "Você passou muito tempo a tentar resolver o problema, mas no final conseguiu. Seu esforço foi reconhecido, mas a sua felicidade diminuiu.",
|
|
effect: Attributes(happiness: -0.1, professionalExperience: 0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Seminário de Liderança",
|
|
description: "Um seminário de liderança está a acontecer na sua empresa. É uma ótima chance para se desenvolver.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Participar do seminário",
|
|
consequenceText: "Você aprendeu novas habilidades e se tornou um candidato mais forte para posições de liderança.",
|
|
effect: Attributes(education: 0.1, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Não participar",
|
|
consequenceText: "Você perdeu a oportunidade de aprender, mas teve mais tempo livre.",
|
|
effect: Attributes(happiness: 0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Férias no Interior",
|
|
description: "Você está com a oportunidade de tirar uns dias de folga para descansar. Você vai aceitar ou continuar a trabalhar?",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Tirar férias (-5.000 Kz)",
|
|
consequenceText: "O descanso melhorou a sua saúde e felicidade, mas gastou dinheiro.",
|
|
effect: Attributes(money: -5000.0, health: 0.2, happiness: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Continuar a trabalhar",
|
|
consequenceText: "Você não gastou dinheiro, mas o cansaço acumulado afetou a sua saúde.",
|
|
effect: Attributes(health: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Networking Empresarial",
|
|
description: "Um evento de networking com profissionais de alto nível está a acontecer. A entrada é cara, mas pode ser um bom investimento.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Comprar o bilhete (-10.000 Kz)",
|
|
consequenceText: "Você conheceu pessoas importantes e fez um contato que pode levar a um novo emprego.",
|
|
effect: Attributes(money: -10000.0, professionalExperience: 0.15),
|
|
),
|
|
Decision(
|
|
text: "Não ir",
|
|
consequenceText: "Você economizou, mas perdeu uma oportunidade valiosa de expandir sua rede de contatos.",
|
|
effect: Attributes(),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Reportagem Exclusiva",
|
|
description: "Você conseguiu uma fonte anónima com informações cruciais sobre um caso de corrupção. A publicação pode ser perigosa.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Publicar a reportagem",
|
|
consequenceText: "A reportagem foi um sucesso, rendendo-lhe um prémio de jornalismo e um aumento, mas sua saúde foi afetada pelo stress.",
|
|
effect: Attributes(money: 20000.0, professionalExperience: 0.3, health: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Não publicar",
|
|
consequenceText: "Você decidiu não arriscar, preservando sua segurança e saúde, mas perdeu uma grande oportunidade de carreira.",
|
|
effect: Attributes(happiness: 0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Entrevista com Político",
|
|
description: "Um político influente concordou em dar-lhe uma entrevista. É uma grande oportunidade para a sua carreira.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Preparar a entrevista com cuidado",
|
|
consequenceText: "A entrevista foi impecável, aumentando sua reputação e seu profissionalismo.",
|
|
effect: Attributes(professionalExperience: 0.15, happiness: 0.05),
|
|
),
|
|
Decision(
|
|
text: "Improvisar",
|
|
consequenceText: "Você não se preparou o suficiente, e a entrevista foi um desastre. Sua reputação ficou manchada.",
|
|
effect: Attributes(happiness: -0.1, professionalExperience: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema com os Alunos",
|
|
description: "Um grupo de alunos está a ter problemas de comportamento. Você precisa lidar com a situação.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Confrontar os alunos",
|
|
consequenceText: "A situação foi resolvida, e a sua experiência profissional aumentou, mas o stress afetou a sua saúde.",
|
|
effect: Attributes(professionalExperience: 0.1, health: -0.05),
|
|
),
|
|
Decision(
|
|
text: "Ignorar o problema",
|
|
consequenceText: "O problema de comportamento continua, e a sua reputação como professor foi afetada.",
|
|
effect: Attributes(happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Oportunidade de Ensino",
|
|
description: "Uma universidade oferece a oportunidade de dar aulas para um curso avançado. O salário é bom, mas o tempo para a diversão diminui.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Aceitar a oferta (+15.000 Kz)",
|
|
consequenceText: "O seu salário e experiência profissional aumentaram, mas o seu tempo livre diminuiu.",
|
|
effect: Attributes(money: 15000.0, professionalExperience: 0.2, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Recusar a oferta",
|
|
consequenceText: "Você manteve o seu tempo livre, mas perdeu a oportunidade de crescer na sua carreira.",
|
|
effect: Attributes(happiness: 0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema com o Empregador",
|
|
description: "O seu chefe está a ser injusto. Você precisa lidar com a situação.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Confrontar o chefe",
|
|
consequenceText: "A situação foi resolvida, e a sua reputação no trabalho melhorou, mas o stress afetou a sua saúde.",
|
|
effect: Attributes(professionalExperience: 0.1, health: -0.05),
|
|
),
|
|
Decision(
|
|
text: "Ignorar o problema",
|
|
consequenceText: "O problema continua e a sua felicidade e a sua saúde diminuíram.",
|
|
effect: Attributes(happiness: -0.1, health: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema com o Jornal",
|
|
description: "O jornal em que você trabalha está a ter problemas financeiros. Você pode ser despedido a qualquer momento.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Procurar outro emprego",
|
|
consequenceText: "Você conseguiu um novo emprego, mas o salário é mais baixo.",
|
|
effect: Attributes(money: -5000.0, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Continuar a trabalhar e esperar o melhor",
|
|
consequenceText: "Você não perdeu o emprego, mas a sua insegurança aumentou e a sua felicidade diminuiu.",
|
|
effect: Attributes(happiness: -0.2),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Crise na Família",
|
|
description: "Houve uma discussão séria entre membros da sua família. Você precisa intervir.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Tentar mediar a discussão",
|
|
consequenceText: "A discussão foi resolvida, e a sua felicidade aumentou, mas o stress afetou a sua saúde.",
|
|
effect: Attributes(happiness: 0.1, health: -0.05),
|
|
),
|
|
Decision(
|
|
text: "Não intervir",
|
|
consequenceText: "A discussão continua e a sua felicidade e a da família diminuíram.",
|
|
effect: Attributes(happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema com a Vizinhança",
|
|
description: "Os seus vizinhos estão a fazer muito barulho. Você precisa lidar com a situação.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pedir para pararem",
|
|
consequenceText: "Eles pararam, e a sua felicidade aumentou, mas a relação com os vizinhos foi afetada.",
|
|
effect: Attributes(happiness: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Chamar a polícia",
|
|
consequenceText: "A polícia interveio, mas a sua relação com os vizinhos foi severamente afetada.",
|
|
effect: Attributes(happiness: -0.05),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Problema no Visto de Trabalho",
|
|
description: "Você está a ter problemas com o seu visto de trabalho. Isso pode afetar o seu emprego.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Contratar um advogado (-10.000 Kz)",
|
|
consequenceText: "O advogado ajudou a resolver o problema, mas a sua felicidade e dinheiro foram afetados.",
|
|
effect: Attributes(money: -10000.0, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Tentar resolver sozinho",
|
|
consequenceText: "O problema não foi resolvido, e o seu visto de trabalho foi cancelado. Você perdeu o emprego.",
|
|
effect: Attributes(money: -5000.0, happiness: -0.2, professionalExperience: -0.1),
|
|
),
|
|
],
|
|
),
|
|
GameEvent(
|
|
title: "Oportunidade de Ensino",
|
|
description: "Uma universidade oferece a oportunidade de dar aulas para um curso avançado. O salário é bom, mas o tempo para a diversão diminui.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Aceitar a oferta (+15.000 Kz)",
|
|
consequenceText: "O seu salário e experiência profissional aumentaram, mas o seu tempo livre diminuiu.",
|
|
effect: Attributes(money: 15000.0, professionalExperience: 0.2, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Recusar a oferta",
|
|
consequenceText: "Você manteve o seu tempo livre, mas perdeu a oportunidade de crescer na sua carreira.",
|
|
effect: Attributes(happiness: 0.05),
|
|
),
|
|
],
|
|
),
|
|
];
|
|
|
|
/// Gera os eventos iniciais com base no tipo de personagem.
|
|
List<GameEvent> _generateInitialEvents(CharacterType type) {
|
|
switch (type) {
|
|
case CharacterType.estudante:
|
|
return [
|
|
GameEvent(
|
|
title: "Mensalidade da Universidade",
|
|
description: "A mensalidade do próximo mês está a aproximar-se. O que vai fazer?",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar a mensalidade integralmente (-25.000 Kz)",
|
|
consequenceText: "Você pagou a mensalidade. Sua educação está garantida, mas o dinheiro está apertado.",
|
|
effect: Attributes(money: -25000.0, happiness: -0.1),
|
|
),
|
|
Decision(
|
|
text: "Trabalhar em part-time para pagar (+10.000 Kz)",
|
|
consequenceText: "Você conseguiu um part-time para pagar, mas o seu stress e saúde diminuíram.",
|
|
effect: Attributes(money: 10000.0, happiness: -0.2, health: -0.2, professionalExperience: 0.1),
|
|
),
|
|
],
|
|
),
|
|
];
|
|
case CharacterType.empreendedor:
|
|
return [
|
|
GameEvent(
|
|
title: "Crédito para Iniciar o Negócio",
|
|
description: "Você precisa de um capital inicial para dar vida à sua ideia de negócio.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pegar um crédito no banco (-10.000 Kz de juros)",
|
|
consequenceText: "Você conseguiu o dinheiro para começar, mas terá que pagar juros a longo prazo.",
|
|
effect: Attributes(money: 50000.0, happiness: 0.1, professionalExperience: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Pedir dinheiro à família",
|
|
consequenceText: "Você conseguiu o dinheiro sem juros, mas a pressão sobre a família aumenta.",
|
|
effect: Attributes(money: 50000.0, happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
];
|
|
case CharacterType.profissional:
|
|
return [
|
|
GameEvent(
|
|
title: "Promoção no Trabalho",
|
|
description: "Você recebeu uma oferta de promoção. Ela aumenta o seu salário, mas também a sua responsabilidade e o stress.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Aceitar a promoção (+20.000 Kz)",
|
|
consequenceText: "A promoção aumentou o seu salário e experiência, mas o stress afetou a sua saúde.",
|
|
effect: Attributes(money: 20000.0, happiness: -0.1, health: -0.1, professionalExperience: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Recusar a promoção",
|
|
consequenceText: "Você recusa para manter a sua paz de espírito. Sua situação financeira não mudou.",
|
|
effect: Attributes(happiness: 0.1),
|
|
),
|
|
],
|
|
),
|
|
];
|
|
case CharacterType.artista:
|
|
return [
|
|
GameEvent(
|
|
title: "Primeira Venda de Arte",
|
|
description: "Um turista gostou da sua arte de rua e quer comprar uma das suas pinturas.",
|
|
scenario: "Benguela",
|
|
decisions: [
|
|
Decision(
|
|
text: "Vender a pintura (+8.000 Kz)",
|
|
consequenceText: "A venda foi um grande incentivo e você sente que a sua arte tem valor.",
|
|
effect: Attributes(money: 8000.0, happiness: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Não vender, é um trabalho pessoal",
|
|
consequenceText: "Você decide manter a pintura, pois ela tem um valor sentimental. Você não ganha dinheiro, mas a sua felicidade aumenta.",
|
|
effect: Attributes(happiness: 0.1),
|
|
),
|
|
],
|
|
),
|
|
];
|
|
case CharacterType.jornalista:
|
|
return [
|
|
GameEvent(
|
|
title: "Missão em Viana",
|
|
description: "Seu editor pede para você cobrir uma história sensível em Viana. Isso pode ser um grande passo para a sua carreira, mas também é arriscado.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Aceitar a missão",
|
|
consequenceText: "A reportagem foi um sucesso e você se tornou um nome conhecido na redação.",
|
|
effect: Attributes(money: 5000.0, professionalExperience: 0.2),
|
|
),
|
|
Decision(
|
|
text: "Recusar a missão",
|
|
consequenceText: "Você evita o risco, mas perde uma oportunidade de destaque na sua área.",
|
|
effect: Attributes(happiness: 0.05),
|
|
),
|
|
],
|
|
),
|
|
];
|
|
case CharacterType.professor:
|
|
return [
|
|
GameEvent(
|
|
title: "Preparação para a Aula",
|
|
description: "Você precisa preparar a sua próxima aula, que é sobre um assunto novo. É um grande desafio, mas a recompensa pode ser grande.",
|
|
scenario: "Huambo",
|
|
decisions: [
|
|
Decision(
|
|
text: "Estudar o assunto em profundidade",
|
|
consequenceText: "Você preparou uma aula incrível, e os seus alunos ficaram muito satisfeitos. A sua reputação aumentou.",
|
|
effect: Attributes(education: 0.1, professionalExperience: 0.1, happiness: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Usar um material antigo",
|
|
consequenceText: "A aula foi monótona, e a sua reputação como professor foi afetada. A sua felicidade diminuiu.",
|
|
effect: Attributes(happiness: -0.1),
|
|
),
|
|
],
|
|
),
|
|
];
|
|
case CharacterType.chefeDeFamilia:
|
|
return [
|
|
GameEvent(
|
|
title: "Despesas do Mês",
|
|
description: "Chegou o fim do mês e você precisa pagar as contas. O dinheiro está a apertar.",
|
|
scenario: "Luanda",
|
|
decisions: [
|
|
Decision(
|
|
text: "Pagar as contas prioritárias (-30.000 Kz)",
|
|
consequenceText: "As contas foram pagas, mas o seu dinheiro ficou muito apertado. A família está segura.",
|
|
effect: Attributes(money: -30000.0, happiness: 0.1),
|
|
),
|
|
Decision(
|
|
text: "Pedir um adiantamento no trabalho",
|
|
consequenceText: "Você conseguiu um adiantamento, mas o seu salário do próximo mês será menor.",
|
|
effect: Attributes(money: 10000.0, happiness: -0.1, professionalExperience: -0.05),
|
|
),
|
|
],
|
|
),
|
|
];
|
|
default:
|
|
return [];
|
|
}
|
|
}
|
|
|
|
/// Inicia um novo jogo com um personagem específico.
|
|
void startNewGame(CharacterType type) {
|
|
_playerCharacter = Character.predefined(type);
|
|
_currentDay = 1;
|
|
_isGameOver = false;
|
|
|
|
// AQUI É A LÓGICA CORRIGIDA
|
|
if (_playerCharacter != null) {
|
|
// Filtra todos os eventos para o cenário do personagem
|
|
_unseenEvents = _allPossibleEvents
|
|
.where((event) => event.scenario == _playerCharacter!.scenario)
|
|
.toList();
|
|
|
|
// Pega o evento inicial para este tipo de personagem
|
|
final initialEvents = _generateInitialEvents(type);
|
|
_availableEvents = initialEvents;
|
|
|
|
// Garante que o evento inicial não seja sorteado novamente
|
|
for (var initialEvent in initialEvents) {
|
|
_unseenEvents.removeWhere((event) => event.title == initialEvent.title);
|
|
}
|
|
} else {
|
|
_unseenEvents = [];
|
|
_availableEvents = [];
|
|
}
|
|
|
|
notifyListeners();
|
|
}
|
|
|
|
/// Processa a decisão do jogador sobre um evento.
|
|
void processDecision(GameEvent event, Decision decision) {
|
|
if (_playerCharacter == null || _isGameOver) return;
|
|
|
|
// Aplica os efeitos da decisão
|
|
_playerCharacter!.attributes.add(decision.effect);
|
|
_playerCharacter!.attributes.happiness = _playerCharacter!.attributes.happiness.clamp(0.0, 1.0);
|
|
_playerCharacter!.attributes.health = _playerCharacter!.attributes.health.clamp(0.0, 1.0);
|
|
|
|
_availableEvents.remove(event);
|
|
|
|
_checkGameOver();
|
|
notifyListeners();
|
|
}
|
|
|
|
/// Avança o jogo para o próximo dia.
|
|
void nextDay() {
|
|
if (_isGameOver) return;
|
|
|
|
_currentDay++;
|
|
generateNewEvent();
|
|
|
|
_checkGameOver();
|
|
notifyListeners();
|
|
}
|
|
|
|
/// Gera um novo evento aleatório a partir dos eventos não vistos.
|
|
void generateNewEvent() {
|
|
if (_playerCharacter == null || _unseenEvents.isEmpty) return;
|
|
|
|
final random = Random();
|
|
final newEventIndex = random.nextInt(_unseenEvents.length);
|
|
final newEvent = _unseenEvents[newEventIndex];
|
|
|
|
_unseenEvents.removeAt(newEventIndex);
|
|
_availableEvents.add(newEvent);
|
|
notifyListeners();
|
|
}
|
|
|
|
/// Verifica se as condições de fim de jogo foram atingidas.
|
|
void _checkGameOver() {
|
|
if (_playerCharacter == null) return;
|
|
|
|
if (_playerCharacter!.attributes.money <= 0.0 ||
|
|
_playerCharacter!.attributes.health <= 0.0 ||
|
|
_playerCharacter!.attributes.happiness <= 0.0) {
|
|
_isGameOver = true;
|
|
}
|
|
}
|
|
|
|
/// Reinicia o jogo para o estado inicial.
|
|
void restartGame() {
|
|
_playerCharacter = null;
|
|
_availableEvents = [];
|
|
_unseenEvents = [];
|
|
_currentDay = 1;
|
|
_isGameOver = false;
|
|
notifyListeners();
|
|
}
|
|
} |