@@ -4,7 +4,6 @@ import com.github.ilovegamecoding.intellijcodexp.listeners.CodeXPListener
4
4
import com.github.ilovegamecoding.intellijcodexp.model.CodeXPChallenge
5
5
import com.intellij.openapi.application.ApplicationManager
6
6
import com.intellij.openapi.components.*
7
- import com.intellij.openapi.diagnostic.thisLogger
8
7
import com.intellij.util.messages.MessageBus
9
8
import com.intellij.util.messages.MessageBusConnection
10
9
@@ -33,10 +32,6 @@ class CodeXPService : PersistentStateComponent<CodeXPService.CodeXPState>, CodeX
33
32
BUILD (5 ),
34
33
RUN (10 ),
35
34
DEBUG (20 ),
36
- COMMIT (8 ),
37
- PUSH (20 ),
38
- MERGE (10 ),
39
- PULL (5 ),
40
35
ACTION (5 );
41
36
}
42
37
@@ -67,7 +62,7 @@ class CodeXPService : PersistentStateComponent<CodeXPService.CodeXPState>, CodeX
67
62
/* *
68
63
* Challenges that not yet been completed.
69
64
*/
70
- var challenges : MutableMap <Event , MutableList < CodeXPChallenge > > = mutableMapOf(),
65
+ var challenges : MutableMap <Event , CodeXPChallenge > = mutableMapOf(),
71
66
72
67
/* *
73
68
* Challenges that have been completed.
@@ -116,10 +111,108 @@ class CodeXPService : PersistentStateComponent<CodeXPService.CodeXPState>, CodeX
116
111
CodeXPChallenge (
117
112
event = Event .TYPING ,
118
113
name = " Typing Challenge" ,
119
- description = " Just type. We will give you XP for it." ,
114
+ description = " Typing [goal] times." ,
115
+ progress = 0 ,
116
+ goal = 100 ,
117
+ goalIncrement = 100 ,
118
+ rewardXP = 100 ,
119
+ rewardXPIncrement = 200
120
+ )
121
+ )
122
+ addChallenge(
123
+ CodeXPChallenge (
124
+ event = Event .PASTE ,
125
+ name = " Paste Challenge" ,
126
+ description = " Paste [goal] times." ,
127
+ progress = 0 ,
128
+ goal = 10 ,
129
+ goalIncrement = 10 ,
130
+ rewardXP = 100 ,
131
+ rewardXPIncrement = 150
132
+ )
133
+ )
134
+ addChallenge(
135
+ CodeXPChallenge (
136
+ event = Event .BACKSPACE ,
137
+ name = " Backspace Challenge" ,
138
+ description = " Press the backspace key [goal] times." ,
139
+ progress = 0 ,
140
+ goal = 50 ,
141
+ goalIncrement = 50 ,
142
+ rewardXP = 100 ,
143
+ rewardXPIncrement = 150
144
+ )
145
+ )
146
+ addChallenge(
147
+ CodeXPChallenge (
148
+ event = Event .TAB ,
149
+ name = " Tab Challenge" ,
150
+ description = " Press the tab key [goal] times." ,
151
+ progress = 0 ,
152
+ goal = 50 ,
153
+ goalIncrement = 50 ,
154
+ rewardXP = 100 ,
155
+ rewardXPIncrement = 150
156
+ )
157
+ )
158
+ addChallenge(
159
+ CodeXPChallenge (
160
+ event = Event .SAVE ,
161
+ name = " Save Challenge" ,
162
+ description = " Save [goal] times." ,
163
+ progress = 0 ,
164
+ goal = 10 ,
165
+ goalIncrement = 10 ,
166
+ rewardXP = 300 ,
167
+ rewardXPIncrement = 400
168
+ )
169
+ )
170
+ addChallenge(
171
+ CodeXPChallenge (
172
+ event = Event .BUILD ,
173
+ name = " Build Challenge" ,
174
+ description = " Build [goal] times." ,
120
175
progress = 0 ,
121
176
goal = 10 ,
177
+ goalIncrement = 10 ,
178
+ rewardXP = 150 ,
179
+ rewardXPIncrement = 200
180
+ )
181
+ )
182
+ addChallenge(
183
+ CodeXPChallenge (
184
+ event = Event .RUN ,
185
+ name = " Run Challenge" ,
186
+ description = " Run [goal] times." ,
187
+ progress = 0 ,
188
+ goal = 10 ,
189
+ goalIncrement = 10 ,
190
+ rewardXP = 200 ,
191
+ rewardXPIncrement = 250
192
+ )
193
+ )
194
+ addChallenge(
195
+ CodeXPChallenge (
196
+ event = Event .DEBUG ,
197
+ name = " Debug Challenge" ,
198
+ description = " Debug [goal] times." ,
199
+ progress = 0 ,
200
+ goal = 10 ,
201
+ goalIncrement = 10 ,
202
+ rewardXP = 300 ,
203
+ rewardXPIncrement = 400
204
+ )
205
+ )
206
+ addChallenge(
207
+ CodeXPChallenge (
208
+ event = Event .ACTION ,
209
+ name = " Action Challenge" ,
210
+ description = " Perform [goal] actions." ,
211
+ progress = 0 ,
212
+ goal = 20 ,
213
+ goalIncrement = 20 ,
122
214
rewardXP = 100 ,
215
+ rewardXPIncrement = 120
123
216
)
124
217
)
125
218
}
@@ -156,10 +249,7 @@ class CodeXPService : PersistentStateComponent<CodeXPService.CodeXPState>, CodeX
156
249
* @param challenge The challenge to add.
157
250
*/
158
251
fun addChallenge (challenge : CodeXPChallenge ) {
159
- if (codeXPState.challenges[challenge.event] == null ) {
160
- codeXPState.challenges[challenge.event] = mutableListOf ()
161
- }
162
- codeXPState.challenges[challenge.event]?.add(challenge)
252
+ codeXPState.challenges[challenge.event] = challenge
163
253
}
164
254
165
255
/* *
@@ -168,30 +258,44 @@ class CodeXPService : PersistentStateComponent<CodeXPService.CodeXPState>, CodeX
168
258
* @param event The event to check for challenges
169
259
*/
170
260
fun checkChallenge (event : Event ) {
171
- codeXPState.challenges[event]?.let { challenges -> // If there are challenges for the event
172
- // Create a list of completed challenges
173
- val completedChallenges = mutableListOf<CodeXPChallenge >()
174
-
175
- for (challenge in challenges) {
176
- // Increment the challenge progress
177
- challenge.progress + = 1
178
-
179
- if (challenge.progress >= challenge.goal) { // If the challenge is completed
180
- thisLogger().warn(" Challenge completed: ${challenge.name} " )
261
+ codeXPState.challenges[event]?.let { challenge ->
262
+ challenge.progress + = 1
181
263
182
- // Add the challenge to the completedChallenges list
183
- completedChallenges.add(challenge)
184
-
185
- // Add the reward XP to the user's XP
186
- codeXPState.xp + = challenge.rewardXP
187
- }
264
+ if (challenge.progress >= challenge.goal) {
265
+ codeXPState.xp + = challenge.rewardXP
266
+ replaceChallengeWithNew(challenge, event)
188
267
}
268
+ }
269
+ }
189
270
190
- // Remove completed challenges
191
- challenges.removeAll(completedChallenges)
271
+ /* *
272
+ * Replace a completed challenge with a new challenge with an increased goal.
273
+ *
274
+ * @param completedChallenge The completed challenge.
275
+ * @param event The type of the completed challenge.
276
+ */
277
+ private fun replaceChallengeWithNew (completedChallenge : CodeXPChallenge , event : Event ) {
278
+ codeXPState.completedChallenges.add(completedChallenge)
279
+ codeXPState.challenges[event] = createNextChallenge(
280
+ completedChallenge
281
+ )
282
+ }
192
283
193
- // Add the completed challenges to the completedChallenges list
194
- codeXPState.completedChallenges.addAll(completedChallenges)
195
- }
284
+ /* *
285
+ * Create a new challenge with an increased goal.
286
+ *
287
+ * @param completedChallenge The completed challenge.
288
+ */
289
+ private fun createNextChallenge (completedChallenge : CodeXPChallenge ): CodeXPChallenge {
290
+ return CodeXPChallenge (
291
+ event = completedChallenge.event,
292
+ name = completedChallenge.name,
293
+ description = completedChallenge.description,
294
+ rewardXP = completedChallenge.rewardXP + completedChallenge.rewardXPIncrement,
295
+ rewardXPIncrement = completedChallenge.rewardXPIncrement,
296
+ progress = 0 ,
297
+ goal = completedChallenge.goal + completedChallenge.goalIncrement,
298
+ goalIncrement = completedChallenge.goalIncrement
299
+ )
196
300
}
197
301
}
0 commit comments