/// <summary> /// Checks if the command is a player command and calls appropriate methods. Returns false if unsuccessful. /// </summary> /// <param name="command"></param> /// <param name="input"></param> /// <returns>Returns true if successful</returns> private bool parsePlayerCommands(string command, string input) { bool successFlag = true; switch (command) { case "inv": case "inventar": case "i": player.openInventory(); break; case "denke": case "denk": case "look": case "gedanken": case "denk nach": if (input.Split(' ').Length != 1) { successFlag = false; break; } roomTracker.printCurrentLookText(); break; case "gehe zu": case "gehe": case "go": case null: case "": roomTracker.changeRoomViaRoomConnection(input); break; case "hilfe": case "help": textPrompt.printText(defaultValues.HelpText); //returns to current Room textPrompt.printText(". \n"); roomTracker.forceChangeRoom(roomTracker.getCurrentRoom()); break; // Fluff/secret commands case "die": case "stirb": textPrompt.printText("\"SCHLAGANFALL\"\n Gehirnschlag, Hirnschlag\n eine plötzlich eintretende, meist mit Bewußtlosigkeit und Lähmungen einhergende Ausschaltung von mehr oder minder großen Hirnteilen. S. trifft meist ein durc Bersten eines Hirngefäßes (Gehirnblutung) infolge arterioskletischer Schädigung seiner Wand."); textPrompt.printText("\nDas Dorf steht unberührt.\nAlles in allem ein grünes Tal."); textPrompt.killPlayer(); break; // bei Eingabe ohne vorausgehenden Befehl versucht das Spiel einen Raum zu betreten z.B. "Ja" default: //roomTracker.changeRoomViaRoomConnection(input); successFlag = false; break; } return(successFlag); }
/// <summary> /// Checks if the command is a player command and calls appropriate methods. Returns false if unsuccessful. /// </summary> /// <param name="command"></param> /// <param name="input"></param> /// <returns>Returns true if successful</returns> private bool parsePlayerCommands(string command, string input) { bool successFlag = true; switch (command) { case "inv": case "inventory": case "i": player.openInventory(); break; case "look": if (input.Split(' ').Length != 1) { successFlag = false; break; } roomTracker.printCurrentLookText(); break; case "move": case "go": roomTracker.changeRoomViaRoomConnection(input); break; case "help": textPrompt.printText(defaultValues.HelpText); break; // Fluff/secret commands case "die": textPrompt.printText("\"Eh, guess I'll die\". You suffocate yourself to death. Not sure why you'd want to do that."); textPrompt.killPlayer(); break; default: successFlag = false; break; } return(successFlag); }
/// <summary> /// Execute one action. /// </summary> /// <param name="obj">The parent object</param> /// <param name="action">The action to execute</param> public void executeOneAction(Object obj, RoomObject.EditorVariables action) { // executeActions happens twice. Once to execute the actions normally, and once to execute delayed actions. // This method happens the first time, to add the actions marked as delayed to delayedActions. if (checkDelayed) { if (action.isDelayed) { delayedActions.Add(action); return; } } RoomObject.ActionCategory category = action.actionCategory; // Execute player actions if (category == RoomObject.ActionCategory.PlayerActions) { RoomObject.PlayerAction playerAction = action.playerAction; RoomObject targetObject = action.varsToChange.targetObject; switch (playerAction) { case RoomObject.PlayerAction.KillPlayer: textPrompt.killPlayer(); // The delay for printText is so the flavor text is printed first before death/win text. StartCoroutine(textPrompt.printTextAfterDelay(defaultValues.deathText, 0.1f)); break; case RoomObject.PlayerAction.WinGame: textPrompt.winGame(); // The delay for printText is so the flavor text is printed first before death/win text. StartCoroutine(textPrompt.printTextAfterDelay(defaultValues.winText, 0.1f)); break; case RoomObject.PlayerAction.AddToInventory: player.addItemToInventory(targetObject); break; case RoomObject.PlayerAction.RemoveFromInventory: player.removeItemFromInventory(targetObject); break; case RoomObject.PlayerAction.EquipItem: player.equipItem(targetObject); break; case RoomObject.PlayerAction.RemoveEquippedItem: player.removeEquippedItem(targetObject); break; default: Debug.Log($"Unknown PlayerAction enum at {obj.name}: you forgot to add what to do in ActionHandler!"); break; } } else if (category == RoomObject.ActionCategory.ObjectActions) { RoomObject.ObjectAction objectAction = action.objectAction; RoomObject targetObject = action.varsToChange.targetObject; if (targetObject == null) { Debug.Log($"{obj.name}: There's an object that wasn't set in an action"); return; } // Execute object actions switch (objectAction) { case RoomObject.ObjectAction.DestroyObject: player.removeItemFromInventory(targetObject); player.removeEquippedItem(targetObject); roomTracker.getCurrentRoom().removeRoomObject(targetObject); break; case RoomObject.ObjectAction.SetIsEdible: targetObject.runtimeIsEdible = action.varsToChange.isEdible; break; case RoomObject.ObjectAction.SetIsDrinkable: targetObject.runtimeIsDrinkable = action.varsToChange.isDrinkable; break; case RoomObject.ObjectAction.SetIsTalkable: targetObject.runtimeIsTalkable = action.varsToChange.isTalkable; break; case RoomObject.ObjectAction.SetIsKillable: targetObject.runtimeIsKillable = action.varsToChange.isKillable; break; case RoomObject.ObjectAction.SetIsBreakable: targetObject.runtimeIsBreakable = action.varsToChange.isBreakable; break; case RoomObject.ObjectAction.SetIsSittable: targetObject.runtimeIsSittable = action.varsToChange.isSittable; break; case RoomObject.ObjectAction.SetIsUsable: targetObject.runtimeIsUsable = action.varsToChange.isUsable; break; case RoomObject.ObjectAction.SetIsPickupable: targetObject.runtimeIsPickupable = action.varsToChange.isPickupable; break; case RoomObject.ObjectAction.SetIsWearable: targetObject.runtimeIsWearable = action.varsToChange.isWearable; break; case RoomObject.ObjectAction.SetIsOpenable: targetObject.runtimeIsOpenable = action.varsToChange.isOpenable; break; case RoomObject.ObjectAction.ChangeEdibleFlavorText: targetObject.runtimeEdibleFlavorText = action.varsToChange.edibleFlavorText; break; case RoomObject.ObjectAction.ChangeDrinkableFlavorText: targetObject.runtimeDrinkableFlavorText = action.varsToChange.drinkableFlavorText; break; case RoomObject.ObjectAction.ChangeKillableFlavorText: targetObject.runtimeKillableFlavorText = action.varsToChange.killableFlavorText; break; case RoomObject.ObjectAction.ChangeBreakableFlavorText: targetObject.runtimeBreakableFlavorText = action.varsToChange.breakableFlavorText; break; case RoomObject.ObjectAction.ChangePickupableFlavorText: targetObject.runtimePickupableFlavorText = action.varsToChange.pickupableFlavorText; break; case RoomObject.ObjectAction.ChangeSittableFlavorText: targetObject.runtimeSittableFlavorText = action.varsToChange.sittableFlavorText; break; case RoomObject.ObjectAction.ChangeTalkableFlavorText: targetObject.runtimeTalkableFlavorText = action.varsToChange.talkableFlavorText; break; case RoomObject.ObjectAction.ChangeUsableFlavorText: targetObject.runtimeUsableFlavorText = action.varsToChange.usableFlavorText; break; case RoomObject.ObjectAction.ChangeWearableFlavorText: targetObject.runtimeWearableFlavorText = action.varsToChange.wearableFlavorText; break; case RoomObject.ObjectAction.ChangeOpenableFlavorText: targetObject.runtimeOpenableFlavorText = action.varsToChange.openableFlavorText; break; case RoomObject.ObjectAction.ChangeLookAtFlavorText: targetObject.runtimeLookAtFlavorText = action.varsToChange.lookAtFlavorText; break; default: Debug.Log($"Unknown ObjectAction enum at {obj.name}: you forgot to add what to do in ActionHandler!"); break; } } else if (category == RoomObject.ActionCategory.RoomActions) { RoomObject.RoomAction roomAction = action.roomAction; Room targetRoom = action.varsToChange.targetRoom; switch (roomAction) { case RoomObject.RoomAction.AddObjectToRoom: if (action.varsToChange.targetObject.isInitialized == false) { action.varsToChange.targetObject.initializeRuntimeVariables(); } roomTracker.getCurrentRoom().addRoomObject(action.varsToChange.targetObject); break; case RoomObject.RoomAction.RemoveObjectFromRoom: roomTracker.getCurrentRoom().removeRoomObject(action.varsToChange.targetObject); break; case RoomObject.RoomAction.SwitchRooms: roomTracker.forceChangeRoom(action.varsToChange.targetRoom); break; case RoomObject.RoomAction.ChangeRoomEntryText: targetRoom.runtimeRoomEntryText = action.varsToChange.roomEntryText; break; case RoomObject.RoomAction.ChangeRoomLookText: targetRoom.runtimeLookText = action.varsToChange.roomLookText; break; case RoomObject.RoomAction.ActivateRoomConnection: setActiveRoomConnection(action.varsToChange.targetRoom, action.varsToChange.targetRoomConnection, true); break; case RoomObject.RoomAction.DisableRoomConnection: setActiveRoomConnection(action.varsToChange.targetRoom, action.varsToChange.targetRoomConnection, false); break; default: Debug.Log($"Unknown RoomAction enum at {obj.name}: you forgot to add what to do in ActionHandler!"); break; } } }