Alles scheiße.
Ich hab keinen Bock mich mit dem Graphic scheiß auseinanderzusetzen aber ein paar Vorschläge hab ich ja schon.
1) Geb deinen states Namen. Bei 4 States kann man sich das gerade noch merken aber das werden noch viel mehr (zB. Karte wird gerade geladen, im Kampf, im Inventar, Spielstand speichern, ...)
2) Einfach generell weniger Magic Values. ObjectProc_Prototype ist nicht gerade selbsterklärend.
3) Es macht nicht so viel Sinn eine Funktion namens "XYZ_Protoype" zu schreiben. Du kannst doch einfach direkt zuweisen oder nicht?
4) Ich hab mir mal die textboxes.js genauer angeguckt.
4.1) Wofür ist dialogue_counter? Warum speicherst du nicht dadrin welcher Teil des momentanen Dialoges gerade ausgegeben werden soll? Du musst zugeben dass dialogue[dialogue_counter][0] schon offensichtlicher ist.
4.2) Was machst du denn wenn du mal mehr als einen Dialog hast? Du musst ja diese Fälle betrachten:
a) Im momentanen Dialog noch nicht fertig -> Ausgeben und nächste Zeilen finden
b) Mit momentanen Dialog fertig -> nächsten finden
c) Am Anfang ersten Dialog setzen
Momentan ersetzt du einfach die dialogue variable (also würd ich sie currentDialogue nennen) aber wo speicherst du denn alle Dialoge?
Ich würde es zu einer Klasse machen, z.B. so
Code:
/** * Dialogue class
* \param speaker Who speaks
* \param text Array of tuple(FirstLine, SecondLine)
*/
var Dialogue = function (speaker, text) {
this.speaker = speaker;
this.text = text;
this.currentText = 0;
};
/**
* Returns the current line of text and gets the next line
* \return false if there is no more text or an array with the keys "speaker" and "text"
*/
Dialogue.prototype.next = function() {
if(this.currentText >= this.text.length)
return false;
var t = this.text[this.currentText];
this.currentText++;
return {speaker: this.speaker, text: t};
}
var currentDialogue = new Dialogue('Alice', [['Zeile 1', 'Zeile 2'], ['1', 'aaaaa']]);
Und benutzt würde es dann iwie so:
Code:
/*
This File is Processing Keyboard Inputs
*/
Cygine.ProcKeys = function(evt)
{
// If the engine isn't running no key does anything
if(Cygine.state < 3)
return;
// Action key?
if(evt.key === Cygine.KeyLayout.resume || evt.key === Cygine.KeyLayout.cancel) {
var d = currentDialogue.next();
if(d === false) {
currentDialogue = new Dialogue('Game', [['Fehler', 'An dieser Stelle gibt es keinen Dialog']]);
d = currentDialogue.next();
}
// fixme: Display dialogue here
alert(d.speaker + ' says ' + d.text);
}
// Movement with arrow keys?
else if(evt.key >= 37 && evt.key <= 40) {
// if next to NPC
// currentDialogue = new Dialogue('NPC', [['Hey', 'bla bla bla']]);
}
}