# 3.General Class Setup

Classes in this project are intended to be very reactive and interchangeable due to the wide range of game template examples.

All of the example games use logic derived in the base classes which have been placed into the **CommonAssets** folder. This also applies to any other assets such as meshes, sounds or textures that are used in more than a single game example.

![](/files/Dhz30a8wRGFUDduXHnpJ)

This is to ensure that all of the classes that interact with each other and are the base requirements for a game to run are left in this folder and not removed from the project.

This then allows you to safely remove any of the template types that you know you won’t be used without worrying about any dependency issues.

One important thing to note in most classes is that the **Start With Tick Enabled** has been set to false by default.

![](/files/ssMn7afMwdR1ptUs8UOz)

This is to try to maintain performance and also force development approaches to consider whether the class needs the Tick function at all.

Most classes are therefore highly reactive and make use of Interface classes to handle much of the communication between classes to try and keep the class dependencies on each other to a minimum.

If you do need to re-enable the tick event for a given class, you can do so by going to the **Class Defaults** section and setting it back to enabled from here.

![](/files/9g946N83cMHC882sBUk1)

Another concept that doesn’t seem to be covered very often when Blueprinting and is much more common in coding languages such as C# and C++ is **class secure variables**.

To avoid variables being accidentally changed outside of the class they’re implemented in, the project has many of the variables set to **private**.

![](/files/JZU239lSK7Tp2s6r0Jtc)

This means that in many cases even if you have valid reference to a class inside of another, you won’t be able to get or set these **private** variables.

Instead if you need to **get** or **set** variables between classes there are a number of examples to reference using **Interfaces** to implement **getter** and **setter** functions.

![](/files/vz9tCb6zfvgTTccq4ruP)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dev-enabled.gitbook.io/endless-runner-creator/3.general-class-setup.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
