Exemplo n.º 1
0
    def on_call(self, data: dict, args: dict, methods: BotMethods) -> None:
        num = args["номер существа"]
        user_id = data["from_id"]
        peer_id = data["peer_id"]
        entity_manager = World.current_world.get_manager()
        try:
            from src.simulation.components import UserId, Position
            from src.simulation.systems import RenderSystem
            from src.simulation.math import Vector
            from src.ecs.entities import EntityNotFoundError
            from src.core.application import Application, WIDTH, HEIGHT
            from pygame.image import save

            try:
                entity = entity_manager.get_entity(num)
                pos = entity_manager.get_component(entity, Position).value
                if entity_manager.get_component(entity,
                                                UserId).value != str(user_id):
                    raise EntityNotFoundError()
                render_system = World.current_world.get_system(RenderSystem)
                render_system.camera_position = pos - Vector(
                    WIDTH / 2, HEIGHT / 2)
                render_surface = Application.get_render_surface()

                def command():
                    save(render_surface, "temp.jpg")
                    methods.send_photo(peer_id, "temp.jpg")

                Application.add_post_render_command(
                    lambda: entity_manager.add_command(command))
            except:
                methods.send_message(peer_id, "Существо не найдено.")
        except:
            methods.send_message(peer_id, "Что-то пошло не так.")
Exemplo n.º 2
0
 def on_create(self) -> None:
     from src.core.application import Application
     self.__render_surface = Application.get_render_surface()
     self.__render_system = World.current_world.get_or_create_system(RenderSystem)
     self.__sprites = pygame.sprite.Group()
     self.__font = pygame.font.Font(None, NAME_FONT_SIZE)
     self.filter = self.entity_manager.create_filter(required=(Position, EntityName), additional=(DeadTag,))
Exemplo n.º 3
0
 def on_create(self) -> None:
     from src.core.application import Application
     self.filter = self.entity_manager.create_filter(required=(Position,),
                                                     additional=(MoveSpeed, Hunger, Strength, Health, Priority))
     self.__render_system = World.current_world.get_or_create_system(RenderSystem)
     self.__font = pygame.font.Font(None, 30)
     self.__render_surface = Application.get_render_surface()
     self.__locked_entity = None
Exemplo n.º 4
0
    def __init__(self):
        from src.simulation.utils import create_circle
        from src.core.application import Application
        self.__sprite = create_circle(round(WORLD_SIZE + 5), (0, 0, 0), (200, 10, 10), 10)
        self.__sprite.image.set_colorkey((0, 0, 0))
        self.__group = pygame.sprite.GroupSingle()
        self.__group.add(self.__sprite)

        self.__render_surface = Application.get_render_surface()
        self.__render_system = World.current_world.get_or_create_system(RenderSystem)
Exemplo n.º 5
0
def main() -> int:
    sys.excepthook = my_excepthook
    app = Application(sys.argv)
    return app.exec_()
Exemplo n.º 6
0
from src.core.application import Application
import src.sql.data as db_session
import src.vk_bot.client
import src.sql.core

# Если 1, то бот будет всем участникам сообщества писать при включении и отключении.
BROADCAST_MESSAGES = 0

if __name__ == "__main__":

    # Инициализация приложения.
    app = Application()

    # Инициализация vk бота. С этого момента он отвечает на команды.
    src.vk_bot.client.init()

    # Файл базы данных. Можно указать другое имя файла для другой симуляции.
    src.sql.core.init("entities.sqlite")

    # Загрузка из базы данных.
    db_session.create_entities_from_database()

    # Главный цикл.
    # Должен запускаться после всех инициализаций.
    # profile=True - будет подсчитано время работы некоторых функций в папку profiling.
    # clear_log=False - при True все предыдушие файлы в папке profiling будут удалены.
    app.run(profile=True, clear_log=False)

    # Сохранение всех существ в базу данных.
    db_session.save_to_database()
    db_session.close()
Exemplo n.º 7
0
 def on_call(self, data: dict, args: dict, methods: BotMethods) -> None:
     from src.core.application import Application
     if Application.set_paused(False):
         methods.broadcast_message("Симуляция возобновлена.")
Exemplo n.º 8
0
 def on_create(self):
     from src.core.application import Application
     self.__render_surface = Application.get_render_surface()
     self.filter = self.entity_manager.create_filter(required=(RenderSprite, Position),
                                                     without=(DeadTag,))