A good workflow

Hello all!
I’ve posted a topic in the beginner forum, with some of my doubts about the general User Interface of TD, as a new user.
Now I’d like to ask about a general workflow, concerning small/medium/big projects.

I’m used to work with Unreal Engine and Unity, and I develop in C++, C#, JS and now I have to work in Python too :grimacing:
TD is a really good software, but I feel that can be very confusing to work with it for something that is more than a demo with some nice graphics.

I’ll try to explain: with every software that I’ve ever used you can write scripts (monobehaviour, static, etc) and can put them in their specific folders, refer to them by code (or just use them in the UI), and you can always manage them (for example with VSCode) simply clicking on it.

In TD as far as I know everything is collapsed in one single .TOP file, very small, and it would be great if at a certain point I would not need to modify some script, so you have to remember where it is located, opening several containers (bad memory, sorry), looking for the right one and what it refer to.

So, my question is: there are some general rules/tips, to manage this hybrid worklow (operators - scripts) so not to get crazy when a project become more and more huge and you may have many scripts nested in many containers, subContainers and subSubContainers and you have to manage them all?

Many thanks for your help and your suggestions!

Huge topic right there my friend…

A video has been released recently that (partially) covers this topic.

Especially from 38:20 onward imo when they discuss the topic in a broader sense.

Some of my guidelines are:
. Sketch first: come up with the overall logic of your project, sketch it on a piece of paper or digitally. This includes the hardware components, as well as the software flow and sections.
. Containers and base comps with meaningful names
. A lot of notes for yourself in the network (annotation comp) and in the python code itself

This is the tip of the iceberg bit I hope it helps to get you started!

1 Like

Many thanks @FaustoB for the link, I’ll watch it very carefully.
Many thanks for your suggestions too.
TD is a world on its own, and a newbie could spend hours to deeply understand its rules without a reference

I came to TD from a similar path as you. I worked in Flash, Web, and Unity projects. I mainly work on commercial projects via agencies with that type of creative work flow. I am less of the creative and more the developer role.

What works for me is creating a hierarchy content structure that you might do for a website. Then each main container/comp gets an extension class added to it. I always name my root container App and I heavily use the Global property for easy references in the projects. Then you put your core logic where you think it should go. So in the App main extension I will have functions like:

  • OnStart()
  • ResetExperience()
  • LoadContent()
  • GoToSection(section)

So to call those functions from anywhere in the project you would use op.App.ResetExperience() for example.

Then in each section of content I will have an extension that all share common functions like:

  • Load()
  • Reset()
  • Show()
  • Hide()

So if I a user clicks on a menu button to select a different section it would look something like:

op.App.GoToSection(“Stories”)


 #in the App extension
def GoToSection(self, section):
  if section == "Stories":
    op.Stories.Show()
    op.Map.Hide()

  if section == "Map":
    op.Stories.Hide()
    op.Map.Show()

So as you can see I take a more programmatic approach to using TD. All my logic for the most part is controlled in python not nodes. I do use a lot of chop>chopexec for button and timer interactions that then call my the code in the extensions. I also do a lot of programmatic animation using my own Tweener component/class that comes from my experience in flash and web.

I also recorded a few tutorials on my basic workflow if you want to check them out.

3 Likes