-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path__init__.py
133 lines (115 loc) · 4.06 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
"""
Code source original de Noah Boos.
Ce fichier fait partie du code source d'AnkiXP.
Original source code from Noah Boos.
This file is part of the AnkiXP source code.
GitHub Repo : https://github.com/NoahBoos/AnkiXP.
"""
# import the main window object (mw) from aqt
from aqt import mw
# import the "show info" tool from utils.py
from aqt.utils import showInfo
# import all of the Qt GUI library
from aqt.qt import *
from anki import hooks
from aqt import gui_hooks
# Système de sauvegarde
import json
configPath = mw.addonManager.addonsFolder() + "\AnkiXP\config.json"
def SaveConfig(data):
# Accède le fichier "config.json" en écriture seule, le stock dans "f".
# Écris le fichier "config.json".
with open(configPath, 'w') as f:
# Conversion de "data" en objet JSON et le stock dans "f".
return json.dump(data, f, indent=4)
def LoadConfig():
# Accède le fichier "config.json" en lecture seule, le stock dans "f".
# Lis le fichier "config.json".
with open(configPath, 'r') as f:
# Retourne le contenu du fichier.
return json.load(f)
# Initialisation des variables avec les données de l'utilisateur
def GatherConfigData():
retrievedData = LoadConfig()
return retrievedData
configData = GatherConfigData()
# Variables
playerLevel = configData['playerLevel']
playerCurrentXP = configData['playerCurrentXP']
playerRequiredXP = configData['playerRequiredXP']
# Variables liées aux gains d'expériences.
expForEasy = configData['expForEasy']
expForMedium = configData['expForMedium']
expForHard = configData['expForHard']
expForMissed = configData['expForMissed']
# Schéma de sauvegarde JSON
savingPattern = {
"playerLevel": playerLevel,
"playerCurrentXP": playerCurrentXP,
"playerRequiredXP": playerRequiredXP,
"expForEasy": expForEasy,
"expForMedium": expForMedium,
"expForHard": expForHard,
"expForMissed": expForMissed
}
def UpdateSavingPattern():
global savingPattern
savingPattern = {
"playerLevel": playerLevel,
"playerCurrentXP": playerCurrentXP,
"playerRequiredXP": playerRequiredXP,
"expForEasy": expForEasy,
"expForMedium": expForMedium,
"expForHard": expForHard,
"expForMissed": expForMissed
}
# Sauvegarde les données lors de la fermeture de l'application
# Gain d'expérience
def GainXPOnReviewResults(reviewer, card, ease):
global playerCurrentXP
global savingPattern
# Carte facile
if ease == 4:
playerCurrentXP = playerCurrentXP + expForEasy
# Carte moyenne
elif ease == 3:
playerCurrentXP = playerCurrentXP + expForMedium
# Carte complexe
elif ease == 2:
playerCurrentXP = playerCurrentXP + expForHard
# Carte non appris
elif ease == 1:
playerCurrentXP = playerCurrentXP + expForMissed
else:
playerCurrentXP = playerCurrentXP + 0
# Vérifie si le joueur peut monter de niveau
LevelingUp()
# Actualise le paterne de sauvegarde.
UpdateSavingPattern()
# Sauvegarde des données en utilisant un paterne de sauvegarde
SaveConfig(savingPattern)
# Hooking de la fonction plus haute à "reviewer_did_answer_card".
gui_hooks.reviewer_did_answer_card.append(GainXPOnReviewResults)
# Gain de niveau
def LevelingUp():
global playerLevel
global playerCurrentXP
global playerRequiredXP
global expForEasy
global expForMedium
global expForHard
if playerCurrentXP >= playerRequiredXP:
while playerCurrentXP >= playerRequiredXP:
playerLevel = playerLevel + 1
playerCurrentXP = playerCurrentXP - playerRequiredXP
playerRequiredXP = playerLevel * 50
expForEasy = expForEasy + 0.15
expForMedium = expForMedium + 0.125
expForHard = expForHard + 0.10
# Affiche l'expérience du joueur ainsi que son niveau.
def ShowXP() -> None:
showInfo("Niveau : " + str(playerLevel) + "\nXP : " + str(playerCurrentXP) + "/" + str(playerRequiredXP))
action = QAction("Mon profil", mw)
qconnect(action.triggered, ShowXP)
mw.form.menubar.addAction(action)
mw.form.menubar.addAction(action)