Wintermute – Entwicklung einer InGame Debug-Console
Die Befehle
Hier folgt eine Übersicht über die implementierten Befehle.
loadScene – Szene laden / wechseln
Den Befehl für das Laden oder Wechseln einer Scene haben wir auf der vorherigen Seite bereits aufgeführt. Nun nocheinmal der Vollständigkeit halber.
Aufruf: loadScene path_to_scene
Aufrufbeispiel: scene scenes\scene1.scene
on "loadScene"
{
if(checkParameter(this.commandParameter,1))
{
var logControl = this.GetControl("log");
logControl.Text = logControl.Text + "~nrun command Game.ChangeScene().";
var Parameter = this.commandParameter;
Game.ChangeScene(""+Parameter[1]+"");
Sleep(1000);
if(Scene.Filename == Parameter[1]) {
logControl.Text = logControl.Text + "~nScene changed.";
}
}
}
takeItem – Ein Item Inventory aufnehmen
Mit diesem Befehl wollen wir ermöglichen, dass man dem Actor über die Konsole ein Item ins Inventory hinzufügen kann.
Anwendungsfall: Test, wie sich eine Scenen / NPC / Objekt verhält, wenn der Actor einen bestimmten Gegenstand hat / nicht hat.
Aufruf: takeItem itemname
on "takeItem"
{
// example: takeItem itemHat
if(checkParameter(this.commandParameter,1))
{
var logControl = this.GetControl("log");
logControl.Text = logControl.Text + "~nrun command actor.TakeItem().";
var Parameter = this.commandParameter;
actor.TakeItem(""+Parameter[1]+"");
Sleep(500);
if(Game.HasItem(""+Parameter[1]+"")) {
logControl.Text = logControl.Text + "~nItem is now in the inventory.";
} else {
logControl.Text = logControl.Text + "~nError: Item could not be taken.";
}
}
}
dropItem – Ein Item aus dem Inventory entfernen
Mit diesem Befehl wollen wir ermöglichen, dass man dem Actor über die Konsole ein Item wieder aus dem Inventory entfernen kann.
Aufruf: dropItem itemname
on "dropItem"
{
if(checkParameter(this.commandParameter,1))
{
var logControl = this.GetControl("log");
logControl.Text = logControl.Text + "~nrun command Game.DropItem().";
var Parameter = this.commandParameter;
if(Game.HasItem(""+Parameter[1]+"") == false) {
logControl.Text = logControl.Text + "~nError: Item not found in the inventory.";
return;
}
Game.DropItem(""+Parameter[1]+"");
Sleep(500);
if(Game.HasItem(""+Parameter[1]+"") == false) {
logControl.Text = logControl.Text + "~nItem is removed from the inventory.";
} else {
logControl.Text = logControl.Text + "~nError: Item could not be removed.";
}
}
}
setActive – Ein Objekt in der Scene aktivieren / deaktivieren
Mit diesem Befehl wollen wir ermöglichen, dass man ein Objekt in einer Scene aktivieren / deaktivieren kann, d.h. sichtbar / unsichtbar machen.
Aufruf: setActive object state
Aufrufbeispiele:
setActive object 1
setActive object 0
on "setActive"
{
if(checkParameter(this.commandParameter,2))
{
var logControl = this.GetControl("log");
logControl.Text = logControl.Text + "~nrun command to set an object active / inactive.";
var Parameter = this.commandParameter;
var entity = Scene.GetNode(""+Parameter[1]+"");
if(entity != null) {
if(Parameter[2] == "1") {
entity.Active = true;
} else {
entity.Active = false;
}
} else {
logControl.Text = logControl.Text + "~nError: Object not found.";
}
}
}
playAnim – Abspielen einer Animation
Dieser Befehl spielt eine Animation eines Actors oder einer Entity ab.
Aufruf: actor_or_entity path_to_sprite
Aufrufbeispiele:
playAnim actorname actor\actorname\walk\walkLeft.sprite
playAnim object specialanim\anim.sprite
on "playAnim"
{
if(checkParameter(this.commandParameter,2))
{
var logControl = this.GetControl("log");
logControl.Text = logControl.Text + "~nrun command to set an object active / inactive.";
var Parameter = this.commandParameter;
var objectName = Parameter[1];
var filename = Parameter[2];
// if is the object a scene node
var entityOrActor = Scene.GetNode(""+objectName+"");
if(entityOrActor != null)
{
// play animation of the node
entityOrActor.PlayAnim(filename);
} else {
// try to get an actor reference
entityOrActor = Scene.GetFreeNode(""+objectName+"");
if(entityOrActor != null) {
// play animation of the node
entityOrActor.PlayAnim(filename);
} else {
// we cant get an actor by name
// so we try to play the animation on the main actor if the name corresponds
if(objectName == actor.Name) {
actor.PlayAnim(filename);
} else {
// the last fallback:
// create a temp node and play the animation
logControl.Text = logControl.Text + "~nError: Entity reference not found. Play anim on a temp entity.";
var entity = Scene.CreateEntity("tempEntity");
entity.X = 500;
entity.Y = 500;
entity.Active = true;
entity.PlayAnimAsync(filename);
Sleep(5000);
entity.Reset();
Scene.UnloadObject(entity);
}
}
}
}
}
skipActor – Den Actor in der Scene positionieren
Befehl mit dem man einen Actor frei in der Szene platzieren kann.
Aufruf: skipActor X Y
Aufrufbeispiel: skipActor 400 300
on "skipActor"
{
// example: skipActor 400 500
if(checkParameter(this.commandParameter,2))
{
var logControl = this.GetControl("log");
logControl.Text = logControl.Text + "~nrun command actor.SkipTo().";
var Parameter = this.commandParameter;
actor.SkipTo(Parameter[1], Parameter[2]);
}
}
loadActor – Actor laden / wechseln
Befehl mit dem ein neuer Actor geladen werden kann oder zu einem anderen Actor gewechselt werden kann.
Aufruf: loadActor actorname
on "loadActor"
{
if(checkParameter(this.commandParameter,1))
{
var logControl = this.GetControl("log");
logControl.Text = logControl.Text + "~nrun command game.LoadActor().";
var Parameter = this.commandParameter;
var name = Parameter[1];
var tmpActor = Game.getGameActorByName(name, false);
if(tmpActor == null) {
tmpActor = Game.LoadActor("actor\"+name+"\"+name+".actor");
gameActors.Push(tmpActor);
}
if(tmpActor == null) {
logControl.Text = logControl.Text + "~nError: actor not found.";
} else {
actor = tmpActor;
}
}
}
exit – Spiel beenden
on "exit"
{
Game.QuitGame();
}
