package main const ( BULLET_LINEAR = iota ) const ( STAGE_WIDTH float64 = 90.0 STAGE_HEIGHT float64 = 160.0 BULLET_KILL_BUFFER_WIDTH float64 = 16.0 ) type Bullet struct { Class int SpawnTime int64 SpawnX float64 SpawnY float64 Parameters []float64 } func (b Bullet) GetCurrentPos(tick int64) (float64, float64) { switch b.Class { case BULLET_LINEAR: return b.SpawnX + (b.Parameters[0] * float64(tick-b.SpawnTime)), b.SpawnY + (b.Parameters[1] * float64(tick-b.SpawnTime)) default: return b.SpawnX, b.SpawnY } } func (b Bullet) BeyondKillBoundary(tick int64) bool { x, y := b.GetCurrentPos(tick) return (x < 0.0-BULLET_KILL_BUFFER_WIDTH) || (x > STAGE_WIDTH+BULLET_KILL_BUFFER_WIDTH) || (y < 0.0-BULLET_KILL_BUFFER_WIDTH) || (y > STAGE_HEIGHT+BULLET_KILL_BUFFER_WIDTH) }