Skip to content
This repository has been archived by the owner on Mar 28, 2023. It is now read-only.

Commit

Permalink
Merge default documentation in the main branch (#4)
Browse files Browse the repository at this point in the history
* GitBook: No commit message

* GitBook: [#2] Actualizar la pagina sobre instalación

* GitBook: [#3] Corregir un error de traducción en el tutorial de instalación

* GitBook: [#4] añadir información sobre timeline

* GitBook: [#5] Añade información a EventManager

* GitBook: [#6] Añadir pagina de clase evento

* GitBook: [#7] Añadir informacion sobre el editor de secuencias

* GitBook: [#8] añadir información sobre el event manager

* GitBook: [#9] añadir informacion sobre la creacion de un evento

* update event docs

* amend last commit

* Actualizar referencias
  • Loading branch information
AnidemDex authored Nov 19, 2021
1 parent f4d665e commit 5fccf92
Show file tree
Hide file tree
Showing 23 changed files with 501 additions and 0 deletions.
Binary file added docs/.gitbook/assets/EventBehaviour.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/event_buttons_toolbar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/event_node.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/timeline.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/timeline_with_events.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/tutorial_enabling.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/tutorial_option_a.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/tutorial_option_a_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/tutorial_option_b.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
37 changes: 37 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
description: >-
Información sobre EventSystem. Un plugin que te ayudará a manejar eventos en
el juego.
---

# 🧐 Información

{% hint style="warning" %}
¡Hola, navegante de internet! En este momento estoy escribiendo intensamente largas lineas de documentación mientras lees estas lineas. Por favor, se paciente, trataré de tener toda la documentación lista lo mas pronto posible.
{% endhint %}

{% hint style="success" %}
Puedes unirte al servidor de [Discord ](https://discord.gg/83YgrKgSZX)para darnos tus opiniones, preguntar sobre algo o pedir que algo sea añadido. Tambien puedes hacer esto abriendo un nuevo hilo en [github issues.](https://github.com/AnidemDex/Godot-EventSystem/issues)
{% endhint %}

EventSystem (de vez en cuando llamado _sistema de eventos_ para la página en español) es un plugin de Godot que te ayudará a gestionar eventos secuenciales, fácil de implementar y totalmente extensible, permitiéndote ejecutar fragmentos de código en orden de acuerdo a las condiciones que le des.

Este plugin no hace mucho por su cuenta, pero promete ayudarte con la tarea de ayudarte a controlar eventos. Estos eventos debes hacerlos por tu cuenta. Algunas tareas que se hacen comúnmente en código fueron incluidos al plugin.

## 🎉¿Por donde empezar?

### Guías:

Aquí hay algunas guías que puedes seguir para empezar a utilizar el plugin sin mayor complicación:

{% content-ref url="getting-started/instalar-eventsystem.md" %}
[instalar-eventsystem.md](getting-started/installing-the-plugin.md)
{% endcontent-ref %}

{% content-ref url="getting-started/creando-un-evento.md" %}
[creando-un-evento.md](getting-started/creating-a-custom-event.md)
{% endcontent-ref %}

{% content-ref url="getting-started/usando-el-editor-de-eventos.md" %}
[usando-el-editor-de-eventos.md](getting-started/using-timelineeditor.md)
{% endcontent-ref %}
16 changes: 16 additions & 0 deletions docs/SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Table of contents

* [🧐 Información](README.md)

## ⚡ Getting Started

* [Instalar EventSystem](getting-started/installing-the-plugin.md)
* [Usando el Editor de Eventos](getting-started/using-timelineeditor.md)
* [Usando el nodo EventManager](getting-started/using-eventmanager.md)
* [Creando un evento](getting-started/creating-a-custom-event.md)

## 📓 Documentación <a href="docs" id="docs"></a>

* [EventManager](docs/class-event-manager.md)
* [Event](docs/class-event.md)
* [Timeline Resource](docs/class-timeline.md)
64 changes: 64 additions & 0 deletions docs/docs/class-event-manager.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
description: Clase base para el nodo gestor de eventos.
---

# EventManager

Hereda: Node

## Descripción <a href="description" id="description"></a>

EventManager es el nodo encargado de ejecutar timelines, así como de gestionar su avance o retroceso y las condiciones para avanzar o retroceder en la secuencia de eventos.

{% hint style="info" %}
Actualmente solo es posible ir hacia adelante en la secuencia de eventos. Añadir la capacidad de ir hacia adelante y hacia atrás en la secuencia es algo que solamente está contemplado.
{% endhint %}

## Propiedades <a href="properties" id="properties"></a>

| Tipo | Nombre | Valor por defecto |
| ----------------------------- | ----------------- | --------------------------------------------------- |
| NodePath | event\_node\_path | `NodePath(`<mark style="color:red;">`"."`</mark>`)` |
| bool | start\_on\_ready | <mark style="color:red;">`false`</mark> |
| [Timeline](class-timeline.md) | timeline | <mark style="color:red;">`null`</mark> |

## Métodos <a href="methods" id="methods"></a>

| Tipo | Nombre |
| ---- | --------------------- |
| void | start\_timeline() |
| void | go\_to\_next\_event() |

## Señales <a href="signals" id="signals"></a>

* custom\_signal(String data)
* event\_started(Event event)
* event\_finished(Event event)
* timeline\_started(Timeline timeline)
* timeline\_finished(Timeline timeline)

## Descripción de propiedades <a href="property_descriptions" id="property_descriptions"></a>

### NodePath event\_node\_path <a href="property_event_node_path" id="property_event_node_path"></a>

El nodo al que se le van a aplicar los eventos. Escoger el nodo es obligatorio, pues es la única referencia que tendrán los eventos para saber donde serán ejecutados.

### bool start\_on\_ready <a href="property_start_on_ready" id="property_start_on_ready"></a>

Si es `true` , el nodo llamará [`start_timeline`](class-event-manager.md#void-start\_timeline-timeline-timeline\_resource-timeline) en cuanto esté listo en el árbol de la escena.

### [Timeline](class-event-manager.md#timeline-timeline) timeline <a href="property_timeline" id="property_timeline"></a>

La secuencia que usará el nodo cuando [`start_timeline`](class-event-manager.md#void-start\_timeline-timeline-timeline\_resource-timeline) sea llamado.

## Descripción de métodos <a href="method_descriptions" id="method_descriptions"></a>

### void start\_timeline(Timeline timeline\_resource=timeline) <a href="method_start_timeline" id="method_start_timeline"></a>

Inicia la secuencia. Este método debe ser llamado para empezar el proceso normal del EventManager.

Si se pasa un `timeline_resource`, la propiedad [`timeline`](class-event-manager.md#timeline-timeline) será asignado a este valor.

### void go\_to\_next\_event() <a href="method_go_to_next_event" id="method_go_to_next_event"></a>

Avanza al siguiente evento.
120 changes: 120 additions & 0 deletions docs/docs/class-event.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
---
description: Clase base para todos los eventos
---

# Event

Hereda: Resource

## Descripción <a href="description" id="description"></a>

Todos los eventos que puede contener un Timeline y pueden ser ejecutados por EventManager dependen de esta clase.

## Propiedades <a href="properties" id="properties"></a>

| Tipo | Nombre | Valor por defecto |
| ------------ | ----------------- | ----------------- |
| bool | continue\_at\_end | true |
| Node | event\_node | null |
| EventManager | event\_manager | null |

## Métodos <a href="methods" id="methods"></a>

| Tipo | Nombre |
| ---- | ----------- |
| void | \_execute() |
| void | execute() |
| void | finish() |

## Señales <a href="signals" id="signals"></a>

* event\_started(event\_resource)
* event\_finished(event\_resource)

## Descripción de propiedades <a href="property_descriptions" id="property_descriptions"></a>

### bool continue\_at\_end <a href="property_continue_at_end" id="property_continue_at_end"></a>

Si es verdadero, el EventManager que ejecuta este evento ejecutará el siguiente evento en el momento en que este evento termine.

### Node event\_node <a href="property_event_node" id="property_event_node"></a>

El nodo al cual le será aplicado el evento. Todas las variables que modifique el evento serán relativos a este nodo.

### EventManager event\_manager <a href="property_event_manager" id="property_event_manager"></a>

El nodo EventManager que administra este evento. El nodo es asignado automaticamente.

## Propiedades del evento

{% hint style="info" %}
Las siguientes son propiedades que se usan con el editor de eventos.

Cambiar su valor en juego no afecta su funcionamiento.
{% endhint %}

Si quieres crear eventos personalizados, debes cambiar sus valores en su constructor `_init()`

### Texture event\_icon

El icono de el evento mostrado en el editor.

### Color event\_color

El color del evento usado en el editor.

### String event\_name

El nombre del evento mostrado en el editor.

### String event\_preview

Una cadena de texto que se mostrará junto al nombre del evento en el editor.

Puedes poner propiedades del evento entre los caracteres { y } para mostrarlas en el editor.

Si escribes:

```coffeescript
event_preview_string = "{resource_name}"
```

La vista previa mostrada será el nombre del recurso en lugar de `{resource_name}`.

### String event\_hint

Representa la descripción del evento. Es buena idea mantener esta descripción corta.

### String event\_category

Representa la categoría a la que pertenece este evento.

## Descripción de métodos

### void \_execute() <a href="method_descriptions" id="method_descriptions"></a>

Es llamado cuando se ejecuta el evento.

Este método debe ser sobrescrito si se planea crear un evento personalizado.

No debe ser llamado directamente.

### void execute() <a href="method_execute" id="method_execute"></a>

Ejecuta el evento.

Este método no debe ser sobrescrito si se planea crear un evento personalizado.

### void finish() <a href="method_finish" id="method_finish"></a>

Debe ser llamado al completar el evento para indicar que el evento ha finalizado.

## Propiedades opcionales

Propiedades usadas como pistas para el editor de eventos

\<property>\_ignore

branch\_disabled

custom\_event\_node
77 changes: 77 additions & 0 deletions docs/docs/class-timeline.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
description: Clase base para todos los recursos Timeline
---

# Timeline Resource

**Hereda:** Resource

## Descripción <a href="description" id="description"></a>

Un timeline es un contenedor de datos sobre los eventos.

Este recurso solo se encarga de mantener una referencia ordenada a los eventos registrados en ella, así como una fila temporal de eventos que aun no han sido usados.&#x20;

Algo similar a una lista con eventos, pero con pasos extra y una pizca de paprika.

## Propiedades <a href="properties" id="properties"></a>

| Tipo | Nombre | Valor por defecto |
| ----------------------- | ------------------------------------------------------ | -------------------------------------- |
| [Event](class-event.md) | [last\_event](class-timeline.md#property\_last\_event) | <mark style="color:red;">`null`</mark> |
| [Event](class-event.md) | [next\_event](class-timeline.md#property\_next\_event) | <mark style="color:red;">`null`</mark> |

## Métodos <a href="methods" id="methods"></a>

| Tipo | Nombre |
| ----------------------- | --------------------------------------------------------------------------------------------------------- |
| void | [initialize](class-timeline.md#method\_initialize)( ) |
| void | [add\_event ](class-timeline.md#method\_add\_event)( [Event ](class-event.md)event, int at\_position=-1 ) |
| void | [erase\_event](class-timeline.md#method\_erase\_event)( [Event ](class-event.md)event ) |
| void | [remove\_event ](class-timeline.md#method\_remove\_event)( int position ) |
| Array | [get\_events](class-timeline.md#method\_get\_events)( ) |
| [Event](class-event.md) | [get\_next\_event](class-timeline.md#method\_get\_next\_event)( ) |
| bool | [can\_loop](class-timeline.md#method\_can\_loop)( ) |
| [Event](class-event.md) | [get\_previous\_event](class-timeline.md#method\_get\_previous\_event)( ) |

## Descripción de las propiedades <a href="property_descriptions" id="property_descriptions"></a>

### [Event ](class-event.md)last\_event <a href="property_last_event" id="property_last_event"></a>

El ultimo evento usado según la fila temporal.

### [Event ](class-event.md)next\_event <a href="property_next_event" id="property_next_event"></a>

El siguiente evento a usar según la fila temporal. (Es el candidato mas probable a ser usado cuando se hace la llamada a `get_next_event()`.&#x20;

## Descripción de los métodos <a href="method_descriptions" id="method_descriptions"></a>

### void initialize() <a href="method_initialize" id="method_initialize"></a>

Inicia la fila temporal de eventos. La fila es usada por los métodos [`get_next_event`](class-timeline.md#event-get\_next\_event) y [`get_previous_event`](class-timeline.md#undefined). Si estás implementando tu propio gestor de eventos, es una buena llamar a esta función primero antes de tratar con el timeline directamente.

### void add\_event(Event event, int at\_position=-1) <a href="method_add_event" id="method_add_event"></a>

Añade el evento `event` en a la lista de eventos en la posición escogida. El valor por defecto -1 indica que será añadido al final de la lista.

### void erase\_event(Event event) <a href="method_erase_event" id="method_erase_event"></a>

Elimina un evento de la lista de eventos. Similar al uso de la función `Array.erase()`

### void remove\_event(int position) <a href="method_remove_event" id="method_remove_event"></a>

Elimina un evento de la lista de eventos en la posición `position`. Similar al uso de la función `Array.remove()`.

### Array get\_events() <a href="method_get_events" id="method_get_events"></a>

Devuelve la lista interna de los eventos registrados en el recurso. La lista retornada es una copia, por lo que modificaciones a la misma no afectarán a la lista original.&#x20;

Modificaciones a los eventos internos de la lista si afectarán a los eventos originales.

### [Event ](class-event.md)get\_next\_event() <a href="method_get_next_event" id="method_get_next_event"></a>

Devuelve el siguiente evento en cola o null en caso de que no haya ninguno. El metodo [initilize](class-timeline.md#void-initialize) debe llamarse una sola vez antes de usar esta función

### bool can\_loop() <a href="method_can_loop" id="method_can_loop"></a>

### [Event ](class-event.md)get\_previous\_event() <a href="method_get_previous_event" id="method_get_previous_event"></a>
79 changes: 79 additions & 0 deletions docs/getting-started/creating-a-custom-event.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Creando un evento

Los eventos son los fragmentos de código que el EventManager ejecutará, contenidos en una secuencia (Timeline).

Por defecto el plugin incluye algunos eventos que corresponden a tareas realizadas comúnmente en código: hacer un comentario, una comprobación booleana, establecer una variable a cierto valor, entre otros.

Puedes crear y añadir tus propios eventos a este sistema sin mayor problema, lo que te da la capacidad de ejecutar tus propios fragmentos de código bajo tus propias reglas.

{% hint style="info" %}
Hasta el momento se me ha ocurrido la idea de crear un núcleo de ritmo, una interacción de batalla estilo Pokémon y un [sistema de dialogo](https://app.gitbook.com/o/ANe5SjHDLnAFjCnVwR4d/s/-MaUroYBpPsgfLKIUmns/) usando este plugin. ¡Tu puedes replicar esto y mas!
{% endhint %}

## Estructura de un evento

![](../.gitbook/assets/EventBehaviour.png)

Aquí puedes ver la estructura de como es (mas o menos) la lógica empleada tras la ejecución de un evento:

1. EventManager inicia la secuencia.&#x20;
2. EventManager ejecuta un evento.
3. El evento emite la señal `event_started`.
4. El evento llama a su función `execute()`.
5. EventManager espera la señal `event_finished` para saber que debe continuar con el siguiente evento.

El proceso se repite hasta que no hay más eventos en la secuencia.

## Crea un script

El script será el corazón de tu evento. Lo que pongas en él será exactamente lo que se ejecutará en el juego.

Los eventos personalizados son un script que extienden [`Event`](../docs/class-event.md) y sobreescriben la función [`_execute()`](../docs/class-event.md#void-\_execute), indicando que acabaron llamando a la función [`finish()`](../docs/class-event.md#void-finish).

### Ejemplo

Creemos un evento que imprima "¡Hola a todos!" (el clásico _hola mundo_):

{% code title="res://evento_ejemplo.gd" %}
```gdscript
# El script debe heredar de Event o cualquier subclase que
# herede de la misma.
extends Event
# you can give it a class_name if you want
# Sobreescribe el metodo _execute()
# Será llamado cuando EventManager llegue a este evento.
func _execute() -> void:
# Aqui irá el cuerpo de nuestro evento.
# Lo que sea que quieras que pase, definelo en esta función
print("¡Hola a todos!")
# Notify that your event is done and can continue to
# the next event.
finish()
```
{% endcode %}

Para usar tu recién creado evento (por medio de código) solo debes hacer esto:

```gdscript
# Crea una secuencia
var timeline := Timeline.new()
# o usa una que ya habias creado
timeline = load("res://path/to/timeline.tres") as DialogTimelineResource
# Carga el script de tu evento
var event_script := load("res://evento_ejemplo.gd")
# Y crea una nueva instancia de tu evento
var event := event_script.new() as Event
# Ahora añade tu evento al timeline
timeline.add_event(event)
# Finalmente, inicia la secuencia de timeline
# Asumiendo que "event_manager" es un nodo EventManager
# en la escena
event_manager.start_timeline(timeline)
```
Loading

0 comments on commit 5fccf92

Please sign in to comment.