summaryrefslogtreecommitdiff
blob: 85f91e42429c0bc6b50c787125fc4220b49e2641 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import sys
import argparse

import tonkadur

parser = argparse.ArgumentParser(
    description = (
        "Tonkadur Python Interpreter"
    )
)

parser.add_argument(
    '-f',
    '--file',
    dest='world_file',
    type = str,
    help = 'Wyrd JSON file to load.',
)

def display_rich_text (rich_text):
    str_content = ""

    if (not (rich_text['effect'] is None)):
        str_content += "{(" + str(rich_text['effect']) + ") "

    for c in rich_text['content']:
        if (isinstance(c, str)):
            str_content += c
        else:
            str_content += display_rich_text(c)

    if (not (rich_text['effect'] is None)):
        str_content = "}"
    return str_content

args = parser.parse_args()
state = tonkadur.Tonkadur(args.world_file)

try:
    while True:
        result = state.run()
        result_category = result['category']

        if (result_category == "end"):
            print("Program ended")
            break
        elif (result_category == "display"):
            print(display_rich_text(result['content']))
        elif (result_category == "assert"):
            print("Assert failed at line " + str(result['line']) + ":" + str(display_rich_text(result['message'])))
            print(str(state.memory))
        elif (result_category == "resolve_choices"):
            current_choice = 0;

            for choice in result['choices']:
                print(str(current_choice) + ". " + display_rich_text(choice[0]))
                current_choice += 1

            user_choice = input("Your choice? ")
            state.resolve_choice_to(int(user_choice))
        elif (result_category == "event"):
            print("Unhandled event:" + str(result))

except:
    print("failed.\n")
    print(str(state.memory))
    raise
print(str(state.memory))