annotate scripts/npc-test @ 249:30ae3c681507

Doors and stuff.
author Jeremy Thurgood <firxen@gmail.com>
date Thu, 07 Apr 2011 22:20:58 +0200
parents 8dee25fd070d
children 9e6ff3eb63d6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
153
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env python
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2 "Skaapsteker npc tester"
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
3
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
4 import os.path
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
5 import sys
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
6 import optparse
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
7 from pprint import pprint
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
8
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
9 sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
10
196
a4c4e2f34162 Remove DummyWorld since npc-test now uses the real world.
Simon Cross <hodgestar@gmail.com>
parents: 195
diff changeset
11 from skaapsteker.dialogue import DSM, DsmEvent
195
445a28f4b38e Fix npc tester.
Simon Cross <hodgestar@gmail.com>
parents: 153
diff changeset
12 from skaapsteker.gamestate import GameState
153
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
13
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
14
227
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
15 def run(npc_name, game_json):
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
16 game = GameState(game_json)
222
2cbeeef5867c Fix npc tester (again).
Simon Cross <hodgestar@gmail.com>
parents: 196
diff changeset
17 npc = getattr(game.world.npcs, npc_name)
2cbeeef5867c Fix npc tester (again).
Simon Cross <hodgestar@gmail.com>
parents: 196
diff changeset
18 dsm = DSM(npc_name, game.world, npc.dsm, npc.state)
153
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
19
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
20 print "States:"
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
21 print "-------"
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
22 pprint(dsm.states.keys())
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
23 print
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
24
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
25 while True:
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
26 state = dsm.get_state()
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
27 print "%s:" % dsm.state, state.text
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
28 print "--"
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
29 for i, choice in state.choices:
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
30 print "%d: %s" % (i, choice)
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
31 print "L: Leave"
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
32 print "--"
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
33
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
34 key = raw_input("Choice? ")
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
35 key = key.strip().upper()
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
36 if key == "L":
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
37 break
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
38 elif key.isdigit():
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
39 dsm.choice(int(key))
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
40
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
41 print "--"
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
42
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
43
227
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
44 def test_all(game_json):
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
45 game = GameState(game_json)
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
46
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
47 print "Testing NPCs"
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
48 print "============"
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
49 for npc_name in game.world.npcs:
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
50 print "Checking", npc_name, "...",
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
51 npc = getattr(game.world.npcs, npc_name)
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
52 dsm = DSM(npc_name, game.world, npc.dsm, npc.state)
234
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
53 print " Loaded %s." % (npc.dsm)
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
54
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
55 my_locals = { "world": dsm.world, "state": dsm.states, "npcs": dsm.world.npcs }
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
56 my_locals.update(DsmEvent().items)
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
57 for state_name, state in dsm.states.items():
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
58 print " Testing triggers for state %s" % state_name
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
59 for trigger in state.triggers:
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
60 eval(trigger._matches, {}, my_locals.copy())
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
61 eval(trigger._next_state, {}, my_locals.copy())
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
62 print " Test on_entry and on_exit for state %s" % state_name
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
63 state.enter(my_locals)
a661b6621ec4 Add testing of triggers and entry / exit functions.
Simon Cross <hodgestar@gmail.com>
parents: 227
diff changeset
64 state.leave(my_locals)
227
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
65 print "ok"
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
66 print
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
67
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
68 print "Testing Sprites"
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
69 print "==============="
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
70 for level in game.world.levels:
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
71 print "Checking", level, "...",
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
72 game.create_sprites(level)
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
73 print "ok"
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
74 print
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
75
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
76
153
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
77 def main():
227
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
78 parser = optparse.OptionParser(usage="%prog [options] <npc name>")
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
79 parser.add_option("--all", action="store_true", default=False,
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
80 dest="test_all", help="test all NPCs in game")
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
81 parser.add_option("--game", default="game.json",
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
82 dest="game", help="game .json file to use")
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
83
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
84 opts, args = parser.parse_args()
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
85
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
86 if opts.test_all:
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
87 test_all(opts.game)
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
88 return
13b912f40a10 Add --all option for testing NPCs and sprite creation.
Simon Cross <hodgestar@gmail.com>
parents: 222
diff changeset
89
153
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
90 if len(args) != 1:
249
30ae3c681507 Doors and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 246
diff changeset
91 parser.error("Must provide an npc json file")
246
8dee25fd070d Fix some npc-test and dialogue bugs.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
92 run(args[0], opts.game)
153
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
93
704d23022f09 Start of dialogue tree / NPC state machine support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
94 if __name__ == '__main__':
195
445a28f4b38e Fix npc tester.
Simon Cross <hodgestar@gmail.com>
parents: 153
diff changeset
95 main()