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();
}

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert