Source code for events.resource
# ../events/resource.py
"""Provides a way to create resource (.res) files using custom events."""
# =============================================================================
# >> IMPORTS
# =============================================================================
# Python Imports
# Collections
from collections import OrderedDict
# Source.Python Imports
# Events
from events import events_logger
from events.custom import CustomEvent
from events.manager import game_event_manager
# Paths
from paths import EVENT_PATH
# =============================================================================
# >> ALL DECLARATION
# =============================================================================
__all__ = ('ResourceFile',
)
# =============================================================================
# >> GLOBAL VARIABLES
# =============================================================================
# Get the sp.events.resource logger
events_resource_logger = events_logger.resource
# =============================================================================
# >> CLASSES
# =============================================================================
[docs]class ResourceFile(OrderedDict):
"""Class used to write and load custom event .res files."""
[docs] def __init__(self, filepath, *events):
"""Called on instatiation."""
# Create the OrderedDict instance
super().__init__()
# Does the given path end with the extension?
if filepath.endswith('.res'):
# Remove the extension
filepath = filepath[:~3]
# Store the filepath
self._filepath = filepath
# Loop through all given events
for event in events:
# Is the given class not a CustomEvent class?
if not issubclass(event, CustomEvent):
# Clear the dictionary
self.clear()
# Raise an error
raise TypeError(
'Event classes must be sub-classes of CustomEvent')
# Store the event with its variables in the dictionary
self[event.__name__.lower()] = event
@property
def filepath(self):
"""Return the path to the .res file."""
return self._filepath
@property
def fullpath(self):
"""Return the full path of the .res file."""
return EVENT_PATH / self.filepath + '.res'
[docs] def write(self):
"""Write the .res file to disk."""
# Does the director for the .res file exist?
if not self.fullpath.parent.isdir():
# Create the directory
self.fullpath.parent.makedirs()
# Open the .res file to write to it
with self.fullpath.open('w') as open_file:
# Write the .res file's name
open_file.write('"{0}"\n'.format(self.filepath))
# Create a group of events for the file
open_file.write('{\n')
# Loop through all events
for event in self:
# Write the event
open_file.write(' "{0}"\n'.format(event))
# Create a group of variables for the event
open_file.write(' {\n')
# Loop through the event's variables
for variable in self[event]._odict:
# Get the variable's instance
instance = self[event]._odict[variable]
# Get the variable's comment
comment = '\t// {0}'.format(
instance._comment) if instance._comment else ''
# Write the variable with its type and comment
open_file.write(' "{0}"\t"{1}"{2}\n'.format(
variable, instance.name, comment))
# End the group of variables
open_file.write(' }\n')
# End the group of events
open_file.write('}\n')
[docs] def load_events(self):
"""Load events from the .res file."""
game_event_manager.load_events_from_file(self.fullpath)