Hey guys, other achievement systems that were available didn't suit my needs so I started making my own. I've run into an issue with one of my Window's lists though.
Long short, I am reading from an external JSON, everything works correctly, and I can pull information using "Khali.achievements.x", x replaced with .name, .id, etc. The menu opens, I can switch between selections, but I have 3 different games in one package. They load and are populated fine, but I need to update the achievement title, description, and icon which is above the selection window.
Here is the code:
Code:
Window_Achievements_Info.prototype.makeAchievementList = function () { this._list = []; for (var i = 1; i < Khali.achievements.length; i++) { if (Khali.achievements.game === game) { this.addAchievement(Khali.achievements); } } console.log(this._list); };
What it does: Checks for the game title to see if it matches, adds it to a separate list as an object.
When it works: Drawing the list of all of the achievement icons (it's setup like the old Xbox 360 achievement menu)
Where it doesn't work:
Code:
this.drawText(this._list[currentSelection - 1].game, x + this.iconPadding, y, this.contents.width, 'left');
If I add console.log(this._list), it will populate the array and show the appropriate information.
If I add console.log(this._list[0].game) immediately under this line, it will crash with error "Cannot read property 'game' of undefined.
I can understand it's trying to read a property that isn't defined. I don't understand how this._list populates the array with
Code:
0: game: "Game 1"
Why is it both defined, and undefined at the same time? How is that possible?
[edit]
It does exclusively work correctly when called from drawItem though.
Code:
Window_Achievements_Info.prototype.drawItem = function (index) { var rect = this.itemRect(index); this.drawFace(this._list[index].icon, 2, rect.x + this.textPadding(), rect.y + this.textPadding(), iconSizeMini, iconSizeMini); };
I can enter this.drawText(this._list[index].name here and it will populate, but as soon as I try to call that from refresh(), or anywhere else for that matter, it claims it's undefined.