09-07-2017, 06:05 PM
Tu ne touches pas aux formules du jeu, mais uniquement à l'unité de temps: partout où le temps réel apparait, tu le convertis en temps de jeu. Dans cette conversion, tu placeras ton accélération (*7 ou *8).
Par exemple, supposons que ta formule actuelle soit:
RessourcesMaintenant = RessourcesAvant + ProductionHoraire * (DateRéelle - DatePrécédenteProduction)
Tu remplaces toutes les dates réelles par la date de jeu:
RessourcesMaintenant = RessourcesAvant + ProductionParHeureDeJeu * (DateRéelle_ConvertieEnDateJeu - DatePrécédenteProduction_ConvertieEnDateJeu)
Ta ProductionParHeureDeJeu est égale à la ProductionHoraire, autrement dit, tu ne touches pas aux données du jeu actuel. Tout ce qu'il te faut maintenant c'est poser la fonction F convertissant la date réelle en date de jeu:
RessourcesMaintenant = RessourcesAvant + ProductionParHeureDeJeu * (F(DateRéelle) - F(DatePrécédenteProduction))
Avec, par exemple, F(Tréel) = 60*(Tréel - Tréel0) + Tjeu0 pour avoir "1 minute réelle = 1 heure dans le jeu", et la correspondance "2017-07-09 (date réelle) → 2000-01-01 (date de jeu de départ)". En d'autres mots, la date du 1er Janvier 2000 dans le jeu correspondra à la date d'aujourd'hui.
D'où
F(Tréel) = 60*(Tréel - 2017-07-09) + 2000-01-01
RessourcesMaintenant = RessourcesAvant + ProductionParHeureDeJeu * (F(DateRéelle) - F(DatePrécédenteProduction))
On pourrait simplifier, mais franchement, c'est mal venu: la fonction de calcul matchant la date in game et la date réelle ne pourrait alors pas être complexifée. Par exemple, si tu veux un jour accélérer ou ralentir le temps, alors il faudra altérer cette fonction F(), tout en t'assurant de ne pas créer des "sautes de temps" ou des "retours vers le passé".
Note enfin que les calculs avec des dates littérales comme cela peuvent être chiant à mener: tu peux faire exactement pareil avec des timestamp, qui auront l'avantage d'être juste de bêtes entiers (ou réels), plus simples à manipuler.
Par exemple, supposons que ta formule actuelle soit:
RessourcesMaintenant = RessourcesAvant + ProductionHoraire * (DateRéelle - DatePrécédenteProduction)
Tu remplaces toutes les dates réelles par la date de jeu:
RessourcesMaintenant = RessourcesAvant + ProductionParHeureDeJeu * (DateRéelle_ConvertieEnDateJeu - DatePrécédenteProduction_ConvertieEnDateJeu)
Ta ProductionParHeureDeJeu est égale à la ProductionHoraire, autrement dit, tu ne touches pas aux données du jeu actuel. Tout ce qu'il te faut maintenant c'est poser la fonction F convertissant la date réelle en date de jeu:
RessourcesMaintenant = RessourcesAvant + ProductionParHeureDeJeu * (F(DateRéelle) - F(DatePrécédenteProduction))
Avec, par exemple, F(Tréel) = 60*(Tréel - Tréel0) + Tjeu0 pour avoir "1 minute réelle = 1 heure dans le jeu", et la correspondance "2017-07-09 (date réelle) → 2000-01-01 (date de jeu de départ)". En d'autres mots, la date du 1er Janvier 2000 dans le jeu correspondra à la date d'aujourd'hui.
D'où
F(Tréel) = 60*(Tréel - 2017-07-09) + 2000-01-01
RessourcesMaintenant = RessourcesAvant + ProductionParHeureDeJeu * (F(DateRéelle) - F(DatePrécédenteProduction))
On pourrait simplifier, mais franchement, c'est mal venu: la fonction de calcul matchant la date in game et la date réelle ne pourrait alors pas être complexifée. Par exemple, si tu veux un jour accélérer ou ralentir le temps, alors il faudra altérer cette fonction F(), tout en t'assurant de ne pas créer des "sautes de temps" ou des "retours vers le passé".
Note enfin que les calculs avec des dates littérales comme cela peuvent être chiant à mener: tu peux faire exactement pareil avec des timestamp, qui auront l'avantage d'être juste de bêtes entiers (ou réels), plus simples à manipuler.