-
- import sys
- import random
-
- from zc.units.zombies import ZombieFemale
- from zc.ai.pathfinder import *
- from zc.ai.empty import EmptyAi
- from zc.ai.zombie import ZombieAi
- from zc.logic.logicnode import LogicNode
- from zc.logic.text import Text, Textbuf
-
-
- class SecurityException(Exception):
- def __init__(self, *args, **kwargs):
- Exception.__init__(self, *args, **kwargs)
-
- # add more code, such as sending the exception over the network
- # so players can be warned if scum is trying something
-
-
- class ParserError(Exception):
- pass
-
-
- class MapLogic(LogicNode):
-
- Units = {
- "zombie_female":ZombieFemale,
- }
-
- AIs = {
- "zombie_female":ZombieAi,
- }
-
- Text = Text
-
- def __init__(self):
- LogicNode.__init__(self)
-
- self.game_values = {}
- self._js_event_wrapper = None
- self._triggers = {}
- self._game_in_progress = False
- self._panda = None
- self._map = None
-
- self.schedEv(self.on_game_second, d=1)
-
-
- def __del__(self):
- self._context.leave()
-
-
- def new_map_load(self, map_handle, render_window, map_data, _2d_render):
- import lib.PyV8 as PyV8
- from zc.js.game_class import JSGameClass
- from zc.js.event_wrapper import JSEventWrapper
-
- self._game_class = JSGameClass(self, map_handle)
- self._js_event_wrapper = JSEventWrapper
- self._context = PyV8.JSContext(self._game_class)
- self._game_class.set_context(self._context)
-
- self._panda = render_window
- self._panda2d = _2d_render
- self._map = map_data
-
- print self._panda2d
-
- base_script = map_handle.find_file(map_handle.get_basename() + ".js")
- if base_script:
- self._game_class.include_from_fileobj(base_script)
-
- # System values
- self.game_values["game_random"] = random.Random()
- self.game_values["static_random"] = random.Random() # this one will be server based, eventually
- self.game_values["used_names"] = []
-
- # Base values
- self.game_values["game_time"] = 0
- self.game_values["time_of_day"] = 0
- self.game_values["time_stopped"] = False
-
- self.game_values["units"] = []
- self.game_values["texts"] = []
- self.game_values["textbuf"] = Textbuf(self, self._panda, self._panda2d)
-
- self.game_values["misc_stuff"] = []
- self.game_values["controled_units"] = {
- "Player":[],
- "Neutral":[],
- "Opponent":[],
- }
-
- self._game_in_progress = True
- self.trigEv("on_map_init")
-
-
- def initialize_pathfinder(self, nodemap):
- start_pathfinder()
- self._pathfinder = pathfinder
- self._pathfinder.initialize(nodemap)
-
-
- def _resolve_event(self, event, *args, **kwargs):
- if self._js_event_wrapper:
- self._js_event_wrapper(self._game_class, event, *args)
- LogicNode._resolve_event(self, event, *args, **kwargs)
-
-
- def call_from_js(self, event, kwargs={}, args=()):
- self.trigEv(event, issuer="logic", *args, **kwargs)
-
-
- def on_tick(self, dt):
- try:
- if not self._game_in_progress:
- return
- except:
- return
- self.trigEv("on_game_tick")
-
-
- def on_game_second(self, dt):
- if not self._game_in_progress:
- return
-
- self.game_values["game_time"] += 1
-
- if not self.game_values["time_stopped"]:
- self.game_values["time_of_day"] += 1
- if self.game_values["time_of_day"] >= 1440:
- self.game_values["time_of_day"] = 0
- self.trigEv("on_time_midnight_passed")
- if ((self.game_values["time_of_day"] % 60) == 0) or (self.game_values["time_of_day"] == 0):
- self.trigEv("on_time_hour_started", self.game_values["time_of_day"])
-
- # additional time of the day mechanics
- self.trigEv("on_game_time_tick")
-