LoafyLemon
914f03fa73
* Simplified and restructured plug events for Hermione * Fixed Snape's sprite flickering * Fixed requirements check for EventQueue class * Adjusted label names for item-related quests
91 lines
2.3 KiB
Plaintext
91 lines
2.3 KiB
Plaintext
|
|
init -1 python:
|
|
class EventQueue(object):
|
|
def __init__(self):
|
|
self.queue = []
|
|
self.freeze = False
|
|
|
|
def get_events(self, raw=False):
|
|
return self.queue if raw else [x for x in self.queue if x.wait < 1]
|
|
|
|
def freeze(self):
|
|
self.freeze = True
|
|
|
|
def unfreeze(self):
|
|
self.freeze = False
|
|
|
|
def delay(self, n):
|
|
for i in self.queue:
|
|
i.wait += n
|
|
|
|
def tick(self):
|
|
"""Causes time to pass."""
|
|
if self.freeze:
|
|
return
|
|
|
|
for i in self.queue:
|
|
i.wait -= 1
|
|
|
|
def start(self):
|
|
queue = self.queue
|
|
queue = filter(lambda x: (x.wait <= 0) and (x.daytime == game.daytime), queue)
|
|
queue.sort(key=lambda x: x.priority)
|
|
|
|
for ev in queue:
|
|
if not ev.requirements_met():
|
|
continue
|
|
|
|
ev.start()
|
|
|
|
if ev.label:
|
|
break
|
|
|
|
def is_in_queue(self, ev):
|
|
if isinstance(ev, str):
|
|
return any(i.id == ev for i in self.queue)
|
|
return ev in self.queue
|
|
|
|
class Event(object):
|
|
"""
|
|
Queue is universal for all instanced objects.
|
|
"""
|
|
|
|
def __init__(self, id, wait=0, priority=5, daytime=True, req=None, label=None, func=None):
|
|
self.queued = False
|
|
self.id = id
|
|
self.wait = wait
|
|
self.priority = priority
|
|
self.daytime = daytime
|
|
self.req = req
|
|
self.label = label
|
|
self.func = func
|
|
self.queue = eventqueue.queue
|
|
|
|
if not renpy.has_label(self.label):
|
|
raise Exception("Supplied label does not exist.")
|
|
|
|
def enqueue(self):
|
|
self.queued = True
|
|
|
|
if not self in self.queue:
|
|
self.queue.append(self)
|
|
|
|
def requirements_met(self):
|
|
if self.req:
|
|
return eval(self.req)
|
|
return True
|
|
|
|
def start(self):
|
|
if self in self.queue:
|
|
self.queue.remove(self)
|
|
|
|
if self.func:
|
|
self.func()
|
|
|
|
if self.label:
|
|
renpy.jump(self.label)
|
|
|
|
init offset = -5
|
|
|
|
default eventqueue = EventQueue()
|