Referencing a BP class (Actor) in C++

Yes, and “as possible” is the key word. “Find me the list of player spawn points” is not something that maps well to event driven systems. It’s a good use case for “find actors of type in level.”
That being said – AI controllers each having permanent links or even ownership of puck objects, doesn’t feel like that. In the general case, you want AI controllers to have knowledge about things they perceive, which is event driven. But if the arena is small and all information known, that’s a worse fit. For example, when doing chess, likely the AI player will know of and have a direct pointer to each of the pieces on the board.

Are you not counting the Gameplay Ability System.
That is a really powerful system, that as one of its components have events that aren’t delegates.
It also has many other components. It requires significant effort to learn, but it is very powerful and can be very data-driven once you’re in it.

Fair enough. I’m definitely aware of GAS’s existence but not up on the details of the things it provides. Other than gameplay tags which are easily used without pulling anything else in.

I’d probably spawn all the pieces in a gamemode type object, and have AI input just provide the move for the piece to the gamemode, then the gamemode tell the pieces where to go.

How does the AI know which move to make?

I’d have the AI know the board state, just an array of the piece positions.

Duplicating state is a bad idea, because it gets out of sync.
Sometimes you can’t avoid it (in network prediction cases) but if you can share state, that’s almost always better.

… right… but you do need a list of the piece positions on the grid, to be able to know what you can do.

Personally, if I were to build a chess game, I would probably store the board state in… whatever the modern name of “Game Replication Info” is (at least, that’s what it was called in udk…) and have server functions in that for providing a move, which would pass that to the Game to actually move the chess pieces around the board. The pieces I’d implement as literal Pawns, and probably use a single AI Controller to move them around, so I’d basically get “free” movement handling and not have to roll up my own anything there.