Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bfe1be0145 |
@@ -0,0 +1,3 @@
|
|||||||
|
<component name="ProjectDictionaryState">
|
||||||
|
<dictionary name="project" />
|
||||||
|
</component>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Babushka.scripts.CSharp.mock;
|
||||||
|
|
||||||
|
public static class DialogicStarter
|
||||||
|
{
|
||||||
|
public static async Task Dialog(string dialog)
|
||||||
|
{
|
||||||
|
// implement
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetValue(string key, int value)
|
||||||
|
{
|
||||||
|
// implement
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
namespace Babushka.scripts.CSharp.mock;
|
||||||
|
|
||||||
|
public static class ObjectLookup
|
||||||
|
{
|
||||||
|
// Referenzen werden bei startup gesetzt
|
||||||
|
|
||||||
|
// Quests
|
||||||
|
public static PotatoQuest potatoQuest;
|
||||||
|
|
||||||
|
// NPCs
|
||||||
|
public static YeliNpc yeliNpc;
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
using Babushka.scripts.CSharp.Common.Inventory;
|
||||||
|
using Babushka.scripts.CSharp.GameEntity.Entities;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace Babushka.scripts.CSharp.mock;
|
||||||
|
|
||||||
|
public partial class PotatoQuest:Node
|
||||||
|
{
|
||||||
|
// Yeli will 5 kartoffeln haben.
|
||||||
|
// Man kann Yeli auch erstmal weniger geben.
|
||||||
|
// Yeli sagt dir dann, wie viele kartoffeln noch fehlen.
|
||||||
|
|
||||||
|
public enum State
|
||||||
|
{
|
||||||
|
Unavailable, // bevor die quest verfügbar ist
|
||||||
|
YeliRequest, // Yeli fragt nach kartoffeln
|
||||||
|
BringPotato, // Vesna soll kartoffeln bringen
|
||||||
|
Done // kartoffeln abgegeben
|
||||||
|
}
|
||||||
|
|
||||||
|
public State state = State.Unavailable;
|
||||||
|
public int potatoesWanted = 5;
|
||||||
|
public int potatoesBrought = 0;
|
||||||
|
public ItemResource itemBlueprint; // potato item
|
||||||
|
|
||||||
|
public void Activate() // wird von woanders aufgerufen
|
||||||
|
{
|
||||||
|
if (state == State.Unavailable)
|
||||||
|
state = State.YeliRequest;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dpl5xeuiu7cwg
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
using System;
|
||||||
|
using Babushka.scripts.CSharp.Common.Inventory;
|
||||||
|
using Babushka.scripts.CSharp.Common.NPC;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace Babushka.scripts.CSharp.mock;
|
||||||
|
|
||||||
|
// Dieses script enthält ALLE möglichen dialogoptionen die Yeli in der gesamten Demo hat.
|
||||||
|
// Das script ist dafür verantwortlich den richtigen Dialog zu starten.
|
||||||
|
public partial class YeliDialog : Node
|
||||||
|
{
|
||||||
|
public async void StartDialog() // kann zu jedem zeitpunkt vom spieler getriggert werden
|
||||||
|
{
|
||||||
|
var potato = ObjectLookup.potatoQuest;
|
||||||
|
var yeli = ObjectLookup.yeliNpc;
|
||||||
|
var inventory = InventoryManager.Instance.playerInventory!;
|
||||||
|
|
||||||
|
if (yeli.isSleeping) // wenn yeli schläft kann keine quest von ihr angenommen werden, auch wenn die quest verfügbar ist
|
||||||
|
{
|
||||||
|
await DialogicStarter.Dialog("YeliSleep"); // "ZZZ"
|
||||||
|
}
|
||||||
|
else if (potato.state == PotatoQuest.State.YeliRequest)
|
||||||
|
{
|
||||||
|
await DialogicStarter.Dialog("YeliAskForPotato"); // "Can you bring me 5 potatoes?"
|
||||||
|
potato.state = PotatoQuest.State.BringPotato;
|
||||||
|
}
|
||||||
|
else if (potato.state == PotatoQuest.State.BringPotato)
|
||||||
|
{
|
||||||
|
var potatoesTodo = potato.potatoesWanted - potato.potatoesBrought;
|
||||||
|
var potatoesAvailable = inventory.TotalItemsOfBlueprint(potato.itemBlueprint);
|
||||||
|
var takePotatoes = Math.Min(potatoesTodo, potatoesAvailable);
|
||||||
|
|
||||||
|
inventory.TryRemoveAllItems(new ItemInstance
|
||||||
|
{ blueprint = potato.itemBlueprint, amount = takePotatoes }); // should not fail
|
||||||
|
potato.potatoesWanted -= takePotatoes;
|
||||||
|
|
||||||
|
potatoesTodo = potato.potatoesWanted - potato.potatoesBrought;
|
||||||
|
|
||||||
|
var isComplete = potatoesTodo <= 0;
|
||||||
|
var wasSomeDelivered = takePotatoes > 0;
|
||||||
|
|
||||||
|
if (isComplete)
|
||||||
|
{
|
||||||
|
await DialogicStarter.Dialog("YeliPotatoThankYou"); // "thanks for bringing me all the potatoes"
|
||||||
|
potato.state = PotatoQuest.State.Done;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DialogicStarter.SetValue("potatoes", potatoesTodo); // setzt die Dialogic variable
|
||||||
|
|
||||||
|
if (wasSomeDelivered)
|
||||||
|
{
|
||||||
|
await DialogicStarter.Dialog("YeliPotatoThanksButMore"); // "thank you but i need {potatoes} more potatoes"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await DialogicStarter.Dialog("YeliPotatoMore"); // "I still need {potatoes} more potatoes"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await DialogicStarter.Dialog("YeliDefault"); // "I'm happy to have you around" oder so
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://ssob0ssvbskx
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using Babushka.scripts.CSharp.GameEntity.Entities;
|
||||||
|
|
||||||
|
namespace Babushka.scripts.CSharp.mock;
|
||||||
|
|
||||||
|
public partial class YeliNpc : Entity
|
||||||
|
{
|
||||||
|
public bool isSleeping = false;
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user