So right off the bat I might already have to redo a lot of this in order for a specific kind of countdown to work the way I need it do. Basically I’m building a dialogue system that functions as any regular QTE would. Personally I think they’re lazy more often than not, but as this is an FPS I think QTE dialogue is the way to go. I don’t want any lists with player input and audio attached I want actual gameplay driven dialogue which feels natural and intuitive. The good news is I mostly have it working. I’m fairly new to visual scripting and have been messing with unreal engine 4 on and off again for the last couple of months. A lot of this I’ve been teaching myself cause the questions I have usually aren’t covered in tutorials. At least for my immediate goals. This video is where I got most of my info on how to build QTEs: [TUTORIAL] Quick Time Events in Unreal Engine 4 [Eng] - YouTube
And while that was extremely helpful, it still left a lot for me to figure out on my own. 40 minutes is a lot of time to dedicate before even answering a question so I’ll just explain what I really need help with. I have 8 dialogue instances that I can pull up whenever I want and I can change how long they last, what text is shown on screen, what button needs to be pushed, all that good stuff. I created the macro shown below in 2 separate pictures for each of the dialogue instances so that every time I called upon a quick time event I would be able to change those settings without having to rebuild it’s behavior each time. Seems simple enough, even if it took me a little while to figure out what needs to be plugged in where when communicating between widgets, the first person character BP and the level BP. I currently have everything working perfectly except for the timer. Actually the timer itself works great and I even have it tied to progress bars shown on the player’s hud for each dialogue. Oh I also didn’t want to have to always call up all 8 dialogues whenever I wanted dialogue. So I can have between 1 and 8 dialogue options on screen at any given time. And it works surprisingly well to be honest. In the third picture it shows two dialogue instances being called upon with a box trigger overlap just to test it. And that works great, my character moves through the box and bam both dialogue options show up and the progress bar is linked to the timer which you can see is 10 seconds, but again it can be whatever I want it to be. If I need to I can show how the timer is set up in the widgets themselves, but really it’s just float variables that I change and update based on the event being called and then the time that’s set within the level blueprint.
My real problem is setting the dialogue options to invalid after one is selected. I created another state in my enumerators for an invalidate executable so that every option NOT selected disappears and you can’t push the button for it so there’s no overlap between dialogues and it knows which branch to go down. All of that works fine, the problem I’ve been having trouble with recently is the timer. If I set every dialogue option to 10 seconds, that’s how long it’ll stay on screen until firing the silence state which plays a different audio and will cause something to happen different from a success (when an input key is pressed). The trouble is that the timer seems to continue even after a key is pressed which causes the next dialogue option if there is one to still be in the invalid state. Now if I were to add a delay of 10 seconds (the same time value I put in for the original dialogue instances) it works just fine when I add another one after that. I’d rather not write a script based on crappy QTE timings. And I don’t want every dialogue option to be 5 seconds, heck with how much dialogue I plan on having I’d like to have it up to 20 seconds and you can see how that would be pretty annoying if every time I had a 20 second dialogue instance I had to wait another 20 seconds before setting up the next dialogue just to ensure it didn’t stay invalid. So to simplify original time in level blueprint must = delay before next dialogue otherwise the dialogue shows up just fine but then disappears after like a second and immediately plays the failure state or in this case the silence option. I’ve tried setting a time float variable in the level blueprint with a default time of 0.0 and then adding a timeline for every dialogue event because it looks like I can stop the timeline at the same time I invalidate a QTE. Hence the invalidate then executable. Maybe I’m just not that great with timelines and there’s something I’m not getting about how they function, but everything I’ve tried involving timelines going into the QTE Time input doesn’t play out right. It like constantly repeats the silence option and doesn’t even give me a chance to press a key for the QTE. It also doesn’t update my widget progress bar so I dunno what I’m missing there. I’ve looked around at how timers function and I don’t think I want to deal with Ticks cause it’s a heckuva lot of dialogue and I don’t think I need to be checking every second for every dialogue, at least that’s how I understand it. Currently whenever I call up a dialogue instance I have another float waiting for input it’s like 0.05 so it checks for player input 25 times a second or something like that, it’s in the dude’s video if you want to see for yourself. I’m fairly certain whatever needs to be added has to happen within the level blueprint so I can always change it just like everything else without adjusting the core macro behavior. If this is too much trouble to deal with in text I certainly wouldn’t mind an audio call or something to figure this out. Any help is appreciated, I hope that was all useful information so you can see what I’m trying to do and the very last problem I have doing it.