No it isn’t. Really. It’s just like writing any other game. As JRavey says, it’s all about event-driven programming.
Real-time games update the game’s state every frame, but you don’t have to do it that way.
It’s a common misconception that a game must be tied to the camera and the Update() / LateUpdate() cycles. You need to decouple the game logic from the updating process.
Think of a game as three separate components: the “Model” (which represents the gameplay logic), the “View” (which displays the game’s state) and the “Controller” (which handles interactions with the Model and the View. (This is better known as the “MVC” design pattern. It’s used heavily in traditional application design.)
The “View” logic can be nailed into the camera scripts.
The “Model” logic should probably live in its own master GameObject. It controls all the game’s state and includes the Finite State Machine scripts.
The “Controller” logic may be better off added to the Camera too, although some “Controller”-related scripts will probably need to live in the master GameObject to help communications between the two.
I’d resist trying to throw everything into the camera GameObject as it’ll just get very bogged down.
Also, if you’re unfamiliar with creating your own standalone classes, I strongly recommend reading up on how to do this. Most C# tutorials will be able to help here. (I don’t tend to use Javascript much, but that’s an option if you prefer.)
Briefly:
You need a game state variable that keeps track of whose turn it is to play. If every player is sharing the same computer, the logic that changes that state variable would also throw up a “Get Ready Player ” (where “X” is the number of the player whose turn it is to play.) If playing over a network, you just prevent players who aren’t playing their turn from interacting with the game’s pieces. (But do remember to allow them access to the menus.)
Once a player has made his move(s), they hit an “End Turn” button and the client updates the game model, then cycles the “CurrentPlayer” state variable to the next player in sequence so they can take their turn.
None of this is particularly difficult. The fact that the graphics are updating every frame is irrelevant. Players can still be allowed to look over the board, spin the camera, etc. As long as they’re not allowed to actually change anything relevant to the gameplay, that’s fine.