You could always try the route where the position of a unit is based off of a ratio of time.
If I send a unit from Point A to Point B,
Point A would have a timestamp the moment the move command is given.
Point B would have an ETA timestamp based off of the type of terrain and the unit’s speed
Then the true ETA to the destination would be: (Current Timestamp - Point A Timestamp) / (Point B Timestamp - Point A Timestamp) - along the League from A to B.
Because this gives you a simple ratio from 0.0 to 1.0 (0.0 meaning you’re still at Point A, to 1.0 meaning you’re at Point B, and anywhere between is on the path between A and B) you can easily calculate “collisions” by setting up a rule of close proximity (give it a margin of error for overlaps and passes) && living on the same path.
Let’s say we have wiggle room of 0.1 along the path… A mortal unit going from A to B is 0.4 along the path… An Immortal unit along the same path but from B to A is now 0.5 (0.6 would be right on top of the mortal unit), but because they are 1. on the same path, and 2 (within our margin of error / ‘wiggle’ room) we now say, hey guys! let’s fight!
From there you can even calculate a midpoint between the two and say this will be the battlefield point, and look for any units 0.1 of the units and throw them into the mix, lock it in. have a fight within the hour, roll the results. etc.
Again, just an idea.
For a game that wants to be super time sensitive where I set an alarm for 3:30 AM just to move units about, the same sort of precision for when and where units are would be a welcome feature. (Otherwise, I should just set my alarms for 30 minutes later, knowing that they may or may not be where I expect them to be and just hope for the best. (Which doesn’t play as well with the OCD addiction of Blight.))
Anyway, I just felt like rattling off some super fun math time. That’s all. Just rambling over here.