Simple Bullet Shadowing Surfer
- Both Diamond and Gilgalad use bullet shadows but IIRC Gilgalad's code was optimized for speed and made it harder to understand.
- If you plan on using bullet shadows with bins(Slightly less effective), both DrussGT and WhiteFang use it.
- DrussGT calculates all the shadows before hand while WhiteFang calculates them when the bullet overlaps the wave(Easier to implement and shorter code).
- BTW, anybody setting wave dangers as done below?
Position danger = (bulletPassed ? 0: chanceOfBulletCollision) * dangerWithoutShadows
Edit: fix a mistake
This is not correct, although I've made the same mistake the first time thinking about this.
The catch point is that, even if your bullet passed safely, you know the intersection must contain no bullet, so the shadow of the bullet still exists
- Sorry, I fixed the code.
- My point was: Wouldn't it be smarter to deduct (100 - x) percent of the danger if the chance of the bullet colliding is x percent.
This is incorrect, because bullet shadow has nothing to do with whether bullets collide or not — it’s all about information. You know perfectly you won’t get hit in the shadow, so danger is 0. You still get hit by the part outside of shadow in the incoming wave though.
- Let's say we have wave1(distanceTraveled 300) and wave2(distanceTraveled 100).
- I shoot a bullet and it is calculated that it will intersect with wave2 at the x point so I set the danger to 0.
- The bullet collides with the bullet that is on wave1 and the spot on wave2 isn't safe anymore.
PositionDanger = bulletPassedWave == true ? 0 : normalDanger
Yes, bullet shadows can be deleted, when the bullet casting shadow is destroyed before intersection happens.
However, I don’t think modeling this helps anything, since 1. we are already recalculating shadows when collision happens 2. the chance of actual collision is always low for normal battles. 3. You don’t know that chance exactly, an estimation may decrease performance actually.
To accurately model the chance of bullet getting destroyed before intersection happens, you should consider more than a flat probability — since once a bullet passes all other waves except target wave, the only chance bullet collision happening is with the target wave.
I don’t think this added complexity should outperform traditional way that updates shadows when collisions actually happen.