github / src / game.py @ 13e86181
1 |
# Copyright (c) 2016, LE GOFF Vincent
|
---|---|
2 |
# All rights reserved.
|
3 |
|
4 |
# Redistribution and use in source and binary forms, with or without
|
5 |
# modification, are permitted provided that the following conditions are met:
|
6 |
|
7 |
# * Redistributions of source code must retain the above copyright notice, this
|
8 |
# list of conditions and the following disclaimer.
|
9 |
|
10 |
# * Redistributions in binary form must reproduce the above copyright notice,
|
11 |
# this list of conditions and the following disclaimer in the documentation
|
12 |
# and/or other materials provided with the distribution.
|
13 |
|
14 |
# * Neither the name of ytranslate nor the names of its
|
15 |
# contributors may be used to endorse or promote products derived from
|
16 |
# this software without specific prior written permission.
|
17 |
|
18 |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19 |
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20 |
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21 |
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
22 |
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23 |
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24 |
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25 |
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26 |
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27 |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28 |
|
29 |
"""This file contains the GameEngine class."""
|
30 |
|
31 |
from enum import Enum |
32 |
|
33 |
from client import GUIClient |
34 |
from config import Settings |
35 |
|
36 |
class Level(Enum): |
37 |
|
38 |
"""Enumeration for a feature level.
|
39 |
|
40 |
Features at the top level have the value "engine". They will be
|
41 |
common across all worlds and characters. Features are often defined
|
42 |
at the world level (common across characters) or at the character
|
43 |
level (specific to this character).
|
44 |
|
45 |
For instance, look at the macros, triggers and aliases.
|
46 |
|
47 |
"""
|
48 |
|
49 |
engine = 1
|
50 |
world = 2
|
51 |
character = 3
|
52 |
category = 4
|
53 |
|
54 |
|
55 |
class GameEngine: |
56 |
|
57 |
"""A class representing the game engine.
|
58 |
|
59 |
An instance of this class is to be created each time the program
|
60 |
runs. It doesn't handle thegraphical user interface, but centralizes
|
61 |
about anything else: the main configuration, world configuration
|
62 |
of different games, aliases, macros, triggers and so on. The
|
63 |
GUI has a direct access to the engine and can therefore access it.
|
64 |
|
65 |
"""
|
66 |
|
67 |
def __init__(self): |
68 |
self.settings = Settings(self) |
69 |
self.worlds = {}
|
70 |
self.default_world = None |
71 |
self.level = Level.engine
|
72 |
|
73 |
def load(self): |
74 |
"""Load the configuration."""
|
75 |
self.settings.load()
|
76 |
self.TTS_on = self.settings["options.TTS.on"] |
77 |
self.TTS_outside = self.settings["options.TTS.outside"] |
78 |
|
79 |
# For each world, set the game engine
|
80 |
for world in self.worlds.values(): |
81 |
world.engine = self
|
82 |
|
83 |
def open(self, host, port, world): |
84 |
"""Connect to the specified host and port.
|
85 |
|
86 |
This method creates and returns a 'GUIClient' class initialized
|
87 |
with the specified information.
|
88 |
|
89 |
"""
|
90 |
client = GUIClient(host, port, engine=self, world=world)
|
91 |
world.client = client |
92 |
world.sharp_engine = client.sharp_engine |
93 |
return client
|