Philosophically, you want to try to only have things that should be run in Update running in Update. Update runs every frame, so normally you only want things that directly affect each frame of rendering in this phase. Like … I think a rapid light flickering FX logic could go here, based on delta.time, if you want a higher fidelity effect at faster frame rates. By putting it in Update, the effect can update every frame.
I want to underscore this. Update can happen 30 times a second at one point, 60 times a second at another, and even like 500 times per second or more when you are running simple things in the editor. It’s highly variable.
There’s also a FixedUpdate phase, which runs on a regular clock tick regardless of frame. This is normally used for physics, which is something that unfolds at a steady rate regardless of frame rate. Like, you don’t want the player to see projectiles speeding up and slowing down based on frame rate. You want them moving steadily and predictably, based on real world timing.
Your main game logic should probably also run on a regular tick, independent of the frame rate. Like, if you are running an AI, you probably want to have it run at a regular rate, but not necessarily as frequently as physics, which is many times per second. Code for deciding whose turn it is, things like damage to lights, and deciding general light state (is it live / dead), would be the sort of thing to happen under your game clock.
All of that may be more complicated than you probably want to address right now. But it’s the big picture, which you want to be cognizant of, and try to start lining up your code with that in mind.
So in your code above, you should ask yourself if you really need to be doing all of those things every frame, or if you need more state logic in there, so you do certain things only once, when the state changes.