spacepaste

  1.  
  2. import cocos
  3. import pyglet
  4. import lib.constants as c
  5. from lib.common import parse_file
  6. class BaseCutscene(cocos.layer.Layer):
  7. """Base class for all cutscenes done in the nvl style."""
  8. is_event_handler = True
  9. def __init__(self, files, scenes, hypervisor, logic, director, handle, name):
  10. """Parameters:
  11. hypervisor = game class
  12. logic = logic class
  13. handle = file handler
  14. scenes = scenes to be executed
  15. """
  16. super(BaseCutscene, self ).__init__()
  17. self.hypervisor = hypervisor
  18. self.director = director
  19. self.handle = handle
  20. self.name = name
  21. self.files = files
  22. self.scenes = scenes
  23. self.done = False
  24. self.cprogress = 0
  25. if len(self.scenes) == "":
  26. raise RuntimeError("Empty scene not supported.")
  27. if len(self.files) > 0:
  28. # Changing paths so it will work on all systems
  29. for item in self.files:
  30. self.files[item] = parse_file(self.files[item])
  31. # commands
  32. self.map = {
  33. "scene ":self.scene
  34. }
  35. # transitions
  36. self.transitions = {
  37. "fade": cocos.actions.interval_actions.FadeIn(1),
  38. "fade_long": cocos.actions.interval_actions.FadeIn(2),
  39. }
  40. self.waiting = False
  41. self.waiting_actions = None
  42. self.return_point = None
  43. self.return_args = None
  44. self.current_state = None
  45. self.skipping = False
  46. self.text = ""
  47. self.back_log = []
  48. self.background = None
  49. self.sprite_left = None
  50. self.sprite_right = None
  51. self.sprite_center = None
  52. self.frame = None
  53. # add to events
  54. self.schedule(self.run_script)
  55. def passed(self):
  56. return "next"
  57. def scene(self, arguments):
  58. raw_input()
  59. args = arguments.split(" ")
  60. trans = None
  61. if len(arguments) > 1:
  62. # we check for transitions
  63. for transition in self.transitions:
  64. if args[-1] == transition:
  65. trans = args.pop()
  66. break
  67. img_name = ""
  68. for part in args:
  69. img_name += part + " "
  70. print repr(img_name), len(img_name)
  71. img_name = img_name[:len(img_name)-1]
  72. print repr(img_name)
  73. print args
  74. if img_name not in self.files.keys():
  75. raise RuntimeError("Unknown image: %s" %img_name)
  76. img_object = self.handle.request("file", self.files[img_name], self.name)
  77. img = pyglet.image.load(self.files[img_name], file=img_object)
  78. if self.frame is not None:
  79. self.frame.do(cocos.actions.instant_actions.Hide())
  80. nb = cocos.sprite.Sprite(img, position=(0, 0))
  81. self.add(nb)
  82. self.waiting_actions = nb
  83. self.return_args = (nb,)
  84. self.return_point = self.scene_cont
  85. if (not self.skipping) and (trans is not None):
  86. nb.do(self.transitions[trans])
  87. def scene_cont(self, nb):
  88. if self.background is None:
  89. self.remove(nb)
  90. self.background = nb
  91. self.add(self.background)
  92. else:
  93. self.remove(nb)
  94. self.background.kill()
  95. self.background = None
  96. self.background = nb
  97. self.add(self.background)
  98. if self.frame is not None:
  99. self.frame.do(cocos.actions.instant_actions.Show())
  100. raw_input()
  101. def moot(self, *args, **kwargs):
  102. """/dev/null of calls"""
  103. pass
  104. def run_script(self, *args, **kwargs):
  105. if self.waiting:
  106. return
  107. elif self.waiting_actions is not None:
  108. if self.waiting_actions.are_actions_running():
  109. print "doing", self.waiting_actions, self.waiting_actions.actions
  110. return
  111. else:
  112. self.waiting_actions = None
  113. if len(self.return_args) > 0:
  114. self.return_point(*self.return_args)
  115. else:
  116. self.return_point()
  117. self.return_args = None
  118. self.return_point = None
  119. else:
  120. if self.cprogress > len(self.scenes) - 1:
  121. self.done = True
  122. return
  123. # we grab new line from script
  124. line = self.scenes[self.cprogress]
  125. self.cprogress += 1
  126. for key in self.map:
  127. isacommand = False
  128. if line.startswith(key):
  129. isacommand = True
  130. self.map[key](line[len(key):])
  131. if not isacommand:
  132. raise RuntimeError("Syntax Error, unsupported command: %s" %line)
  133.