Skip to content

Commit

Permalink
[stable] animated dialogue text
Browse files Browse the repository at this point in the history
  • Loading branch information
sakharovaan committed Nov 8, 2021
1 parent 1566226 commit a64aada
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 16 deletions.
24 changes: 13 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,29 @@
1. + Чтобы Катру можно было перемещать по левому клику
2. + Чтобы правый клик открывал бы меню (как делать коллбеки на эти пункты?)
3. Собирать меню (системное/дебаговое) по правому клику на основе плагинов и коллбеков
4. Сделать окно диалога (которые собирается на основе плагинов), он будет единый для диалога по дабл-клик и для фраз
5. То есть Катра может начинать диалоги с вариантами ответов и ветвлением
6. Двойной клик по Катре -- диалог с пунктами меню (которые собирается на основе плагинов)
7. В диалоге текст показывается с анимацией посимвольно
8. + Анимация (мигание)
4. + Сделать базовое окно диалога для текста
5. Сделать окно диалога (которые собирается на основе плагинов), он будет единый для диалога по дабл-клик
6. То есть Катра может начинать диалоги с вариантами ответов и ветвлением
7. Двойной клик по Катре -- диалог с пунктами меню (которые собирается на основе плагинов)
8. + В диалоге текст показывается с анимацией посимвольно
9. + Анимация (мигание)

Сделать систему плагинов
1. + Какой-нибудь стандартный формат для API
2. + Плагины на питоне, каждый цикл пробегать по всем методам on_tick в плагинах
3. Сделать on_boot/on_close, который исполняется один раз
3. Сделать on_boot/on_close, который исполняется один раз. on_boot это не init, в init техника, в on_boot поведение
4. + Может использовать какой-то сторонний планировщик?

Сделать поведение
1. + Движок для наложения слоёв
2. + Слои накладываются с анимацией (периодичность)
3. + Наложенные слои -- теггировать по именам (файл с конфигурацией эмоций)
4. Сделать файл с рандомными фразами и возможностью внедрять теги с эмоциями (forced) и %username, делать перенос строки
5. Сделать рандомными части диалогов. То есть строчка одна, но она может комбинироваться.
6. "Сейчас %(hour12), %(username). Очень важно поддерживать режим." - говорить сколько сейчас время
7. normalboottalk -- приветствовать в зависимости от времени дня, прощаться - желать хороших снов
8. + Убрать (пока нет системы настроения) mouth с тэгом bad из рандомной ротации
4. Сделать файл с рандомными фразами и возможностью внедрять теги с эмоциями (forced) и %username,
5. +делать перенос строки
6. Сделать рандомными части диалогов. То есть строчка одна, но она может комбинироваться.
7. "Сейчас %(hour12), %(username). Очень важно поддерживать режим." - говорить сколько сейчас время
8. normalboottalk -- приветствовать в зависимости от времени дня, прощаться - желать хороших снов
9. + Убрать (пока нет системы настроения) mouth с тэгом bad из рандомной ротации

Технические штуки
1. Сделать папку с плагинами, сделать категории плагинов, сделать наследование (конфиг, self.w)
Expand Down
2 changes: 1 addition & 1 deletion blink_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def __init__(self, window, _ghostconfig):
self.blink_close_min = self._config['timings']['blink']['closed']['min']
self.blink_close_max = self._config['timings']['blink']['closed']['max']

window.app.after(10, self.tick())
window.app.after(10, self.tick)

def tick(self):
if self.blinked:
Expand Down
24 changes: 23 additions & 1 deletion dialogue_plugin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import yaml
import tkinter as tk
import random

import logging

class DialoguePlugin:
def __init__(self, window, _ghostconfig):
Expand All @@ -12,6 +12,28 @@ def __init__(self, window, _ghostconfig):
self._config = yaml.safe_load(f.read())

self.grip = None
self._text_to_render = iter("Привет, я Катра! Спасибо, что теперь я могу говорить!")
self._rendered_text = ""
self._textid = None
self._textspeed = self._config['dialogue']['text']['speed']

def _render_text_init(self):
self._textid = self.w.grip.create_text(self._config['dialogue']['offset'] + self._config['dialogue']['text']['offset']['xleft'],
self._config['dialogue']['text']['offset']['y'],
text=self._rendered_text,
anchor=tk.NW,
width=self._config['dialogue']['width'] - self._config['dialogue']['text']['offset']['xright'],
fill='black', font=(self._config['dialogue']['text']['font'],
self._config['dialogue']['text']['size']))
self.w.app.after(self._textspeed, self._render_text_tick)

def _render_text_tick(self):
newletter = next(self._text_to_render, None)
if newletter is not None:
self._rendered_text += newletter
logging.debug("Rendering " + self._rendered_text)
self.w.grip.itemconfig(self._textid, text=self._rendered_text)
self.w.app.after(self._textspeed, self._render_text_tick)

def _render_back(self):
h_cursor = 0
Expand Down
4 changes: 2 additions & 2 deletions expression_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ def __init__(self, window, _ghostconfig):
self.random_change_max = self._config['timings']['change_random_expression']['max']
self.random_change_min = self._config['timings']['change_random_expression']['min']
self._random_expression_init()
window.app.after(10, self.random_tick())
window.app.after(10, self.forced_tick())
window.app.after(10, self.random_tick)
window.app.after(10, self.forced_tick)

def _random_expression_init(self):
self.w.grip.create_image(self._config['ghost']['width'], 0, image=self.w.image.getimg('direct_v_cat', 'closed'), anchor='nw', tags=("image_closed",))
Expand Down
8 changes: 8 additions & 0 deletions ghost.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,11 @@ dialogue:
file: 'static/dialogue/middle.png'
- name: top
file: 'static/dialogue/top.png'
text:
offset:
xleft: 20
xright: 50
y: 10
font: Consolas
size: 15
speed: 20
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def __init__(self, *args, **kwargs):
self.menu.add_command(label="Next expression", command=self.ep.random_tick)
self.menu.add_command(label="Show dialogue", command=self.dp._render_back)
self.menu.add_command(label="Hide dialogue", command=self.dp._hide_back)
self.menu.add_command(label="Reload", command=lambda: self.menu_callback("4"))
self.menu.add_command(label="Render text", command=self.dp._render_text_init)
self.menu.add_checkbutton(label="add_checkbutton")
self.menu.add_separator()
self.menu.add_command(label="Exit", command=lambda: self.menu_callback("exit"))
Expand Down

0 comments on commit a64aada

Please sign in to comment.