edge-0.8.12: Resources.hs
module Resources where
import Paths_edge
import Graphics.Gloss.Data.Picture
import Graphics.Gloss.Data.Color
import ResourceTracker
import SpaceJunk
import qualified Asteroid as Asteroid
import qualified BigAsteroid as BigAsteroid
import Data.WrapAround
import Star
import Sound.ALUT
import Universe
import Unit
import qualified Unit.Simple.Turret as Turret
import qualified Unit.Smart.Tank as Tank
import qualified Unit.Smart.ATank as ATank
import qualified Unit.Smart.STank as STank
import qualified Unit.Smart.Death as Death
import qualified Unit.Smart.Ninja as Ninja
import qualified Unit.Smart.Saucer as Saucer
import qualified Unit.Smart.Sniper as Sniper
import qualified Unit.Smart.Zeus as Zeus
import Combat
import qualified Projectile.Mine as Mine
import Item
import System.Random
initResources = let imageFiles = [ "asteroid.bmp"
, "asteroidbig.bmp"
, "atank.bmp"
, "blade.bmp"
, "death.bmp"
, "interceptor-1.bmp"
, "interceptor-2.bmp"
, "interceptor-3.bmp"
, "item-default.bmp"
, "item-health.bmp"
, "item-fourway.bmp"
, "item-cannon.bmp"
, "item-spread.bmp"
, "item-rapidfire.bmp"
, "item-nuke.bmp"
, "item-sigma.bmp"
, "lance.bmp"
, "lance-thrusting.bmp"
, "mine.bmp"
, "mine-explosion.bmp"
, "mine-lit.bmp"
, "ninja.bmp"
, "nuke-0.bmp"
, "nuke-1.bmp"
, "nuke-2.bmp"
, "nuke-3.bmp"
, "stank.bmp"
, "turret.bmp"
, "tank.bmp"
, "explosion-00.bmp"
, "explosion-01.bmp"
, "explosion-02.bmp"
, "explosion-03.bmp"
, "explosion-04.bmp"
, "explosion-05.bmp"
, "explosion-06.bmp"
, "saucer.bmp"
, "sniper.bmp"
, "zeus-base.bmp"
, "zeus-cannon.bmp"
] in
let imageFiles' = map ("image/" ++) imageFiles in
let soundFiles = [ "test.wav"
, "blip.wav"
, "energy-shot-02.wav"
, "explosion.wav"
, "music.wav"
, "simple-energy-shot.wav"
] in
let soundFiles' = map ("sound/" ++) soundFiles in
do imagePaths <- mapM getDataFileName imageFiles'
pics <- mapM loadBMP imagePaths
soundPaths <- mapM getDataFileName soundFiles'
sounds <- mapM (createBuffer . File) soundPaths
let rt = foldr go emptyResourceTracker
(zip imageFiles pics)
return $ foldr go' rt (zip soundFiles sounds)
where go (file, pic) rt = storeImage rt file pic
go' (file, sound) rt = storeSound rt file sound
-- loadBuffer path = do buf <- createBuffer (File path)
-- [source] <- genObjectNames 1
-- buffer source $= Just buf
-- return source
startingAsteroids rt wmap =
let positionsVelocities = [ ((1900, 500), (200, -120))
, (( 100, 2900), ( 90, 10))
, ((2500, 1100), (-100, 100))
, (( 700, 300), (80, 60))
, ((1300, 1400), (-30, 240))
, ((1000, 2400), (110, 100))
] in
map (\(p, v) -> Asteroid.new rt wmap (wrappoint wmap p) v) positionsVelocities
stars =
[ Star { Star.location = wrappoint wmap (40.0, 93.0), Star.color = rose }
, Star { Star.location = wrappoint wmap (54.0, 74.0), Star.color = white }
, Star { Star.location = wrappoint wmap (86.0, 38.0), Star.color = white }
, Star { Star.location = wrappoint wmap (30.0, 52.0), Star.color = white }
, Star { Star.location = wrappoint wmap ( 2.0, 24.0), Star.color = orange }
, Star { Star.location = wrappoint wmap (85.0, 76.0), Star.color = white }
, Star { Star.location = wrappoint wmap (27.0, 32.0), Star.color = white }
, Star { Star.location = wrappoint wmap (53.0, 94.0), Star.color = white }
, Star { Star.location = wrappoint wmap (66.0, 37.0), Star.color = green }
, Star { Star.location = wrappoint wmap (39.0, 73.0), Star.color = white }
, Star { Star.location = wrappoint wmap (88.0, 67.0), Star.color = chartreuse }
, Star { Star.location = wrappoint wmap (50.0, 50.0), Star.color = white }
, Star { Star.location = wrappoint wmap (93.0, 33.0), Star.color = white }
, Star { Star.location = wrappoint wmap (25.0, 57.0), Star.color = white }
, Star { Star.location = wrappoint wmap (36.0, 6.0), Star.color = white }
, Star { Star.location = wrappoint wmap (65.0, 61.0), Star.color = white }
, Star { Star.location = wrappoint wmap (43.0, 24.0), Star.color = blue }
, Star { Star.location = wrappoint wmap (54.0, 52.0), Star.color = white }
, Star { Star.location = wrappoint wmap (66.0, 45.0), Star.color = white }
, Star { Star.location = wrappoint wmap (41.0, 67.0), Star.color = white }
, Star { Star.location = wrappoint wmap (37.0, 25.0), Star.color = white }
, Star { Star.location = wrappoint wmap (62.0, 48.0), Star.color = green }
, Star { Star.location = wrappoint wmap (88.0, 73.0), Star.color = white }
, Star { Star.location = wrappoint wmap ( 4.0, 54.0), Star.color = white }
, Star { Star.location = wrappoint wmap (59.0, 77.0), Star.color = white }
, Star { Star.location = wrappoint wmap (73.0, 83.0), Star.color = yellow }
, Star { Star.location = wrappoint wmap (34.0, 24.0), Star.color = white }
, Star { Star.location = wrappoint wmap (58.0, 48.0), Star.color = white }
, Star { Star.location = wrappoint wmap (03.0, 99.0), Star.color = white }
, Star { Star.location = wrappoint wmap (57.0, 46.0), Star.color = aquamarine }
, Star { Star.location = wrappoint wmap (66.0, 67.0), Star.color = white }
, Star { Star.location = wrappoint wmap (31.0, 2.0), Star.color = white }
, Star { Star.location = wrappoint wmap (85.0, 53.0), Star.color = white }
, Star { Star.location = wrappoint wmap (23.0, 77.0), Star.color = white }
, Star { Star.location = wrappoint wmap (97.0, 16.0), Star.color = white }
, Star { Star.location = wrappoint wmap (16.0, 83.0), Star.color = white }
, Star { Star.location = wrappoint wmap (42.0, 45.0), Star.color = magenta }
, Star { Star.location = wrappoint wmap ( 9.0, 67.0), Star.color = white }
, Star { Star.location = wrappoint wmap (33.0, 33.0), Star.color = azure }
, Star { Star.location = wrappoint wmap (27.0, 75.0), Star.color = violet }
, Star { Star.location = wrappoint wmap (36.0, 64.0), Star.color = white }
, Star { Star.location = wrappoint wmap (74.0, 2.0), Star.color = white }
, Star { Star.location = wrappoint wmap (48.0, 46.0), Star.color = cyan }
, Star { Star.location = wrappoint wmap (20.0, 98.0), Star.color = rose }
, Star { Star.location = wrappoint wmap (52.0, 44.0), Star.color = white }
, Star { Star.location = wrappoint wmap (16.0, 38.0), Star.color = white }
, Star { Star.location = wrappoint wmap (32.0, 72.0), Star.color = white }
, Star { Star.location = wrappoint wmap (21.0, 23.0), Star.color = orange }
, Star { Star.location = wrappoint wmap (75.0, 86.0), Star.color = white }
, Star { Star.location = wrappoint wmap (67.0, 34.0), Star.color = white }
, Star { Star.location = wrappoint wmap (55.0, 64.0), Star.color = white }
, Star { Star.location = wrappoint wmap (46.0, 38.0), Star.color = green }
, Star { Star.location = wrappoint wmap (37.0, 73.0), Star.color = white }
, Star { Star.location = wrappoint wmap (38.0, 69.0), Star.color = chartreuse }
, Star { Star.location = wrappoint wmap (52.0, 90.0), Star.color = white }
, Star { Star.location = wrappoint wmap (43.0, 31.0), Star.color = white }
, Star { Star.location = wrappoint wmap (26.0, 27.0), Star.color = white }
, Star { Star.location = wrappoint wmap (86.0, 8.0), Star.color = white }
, Star { Star.location = wrappoint wmap (69.0, 91.0), Star.color = white }
, Star { Star.location = wrappoint wmap (13.0, 22.0), Star.color = blue }
, Star { Star.location = wrappoint wmap (58.0, 72.0), Star.color = white }
, Star { Star.location = wrappoint wmap (96.0, 48.0), Star.color = white }
, Star { Star.location = wrappoint wmap (42.0, 97.0), Star.color = white }
, Star { Star.location = wrappoint wmap (77.0, 28.0), Star.color = white }
, Star { Star.location = wrappoint wmap (63.0, 78.0), Star.color = green }
, Star { Star.location = wrappoint wmap (68.0, 71.0), Star.color = white }
, Star { Star.location = wrappoint wmap ( 2.0, 84.0), Star.color = white }
, Star { Star.location = wrappoint wmap (49.0, 73.0), Star.color = white }
, Star { Star.location = wrappoint wmap (72.0, 83.0), Star.color = yellow }
, Star { Star.location = wrappoint wmap (94.0, 29.0), Star.color = white }
, Star { Star.location = wrappoint wmap (52.0, 98.0), Star.color = white }
, Star { Star.location = wrappoint wmap (73.0, 92.0), Star.color = white }
, Star { Star.location = wrappoint wmap (52.0, 36.0), Star.color = aquamarine }
, Star { Star.location = wrappoint wmap (46.0, 64.0), Star.color = white }
, Star { Star.location = wrappoint wmap (32.0, 82.0), Star.color = white }
, Star { Star.location = wrappoint wmap (35.0, 53.0), Star.color = white }
, Star { Star.location = wrappoint wmap (24.0, 87.0), Star.color = white }
, Star { Star.location = wrappoint wmap (87.0, 17.0), Star.color = white }
, Star { Star.location = wrappoint wmap (16.0, 93.0), Star.color = white }
, Star { Star.location = wrappoint wmap (72.0, 42.0), Star.color = magenta }
, Star { Star.location = wrappoint wmap ( 4.0, 97.0), Star.color = white }
, Star { Star.location = wrappoint wmap (93.0, 33.0), Star.color = azure }
, Star { Star.location = wrappoint wmap (22.0, 5.0), Star.color = violet }
, Star { Star.location = wrappoint wmap (46.0, 68.0), Star.color = white }
, Star { Star.location = wrappoint wmap (76.0, 92.0), Star.color = white }
, Star { Star.location = wrappoint wmap (78.0, 41.0), Star.color = cyan }
]
where wmap = wrapmap 100.0 100.0
initLevels rt =
do let b = blankArena 3000.0 3000.0
let a = b
let wmap = Universe.wrapMap a
let pL = [
-- 1
a { asteroids = asteroidGen rt wmap
[ ((1900, 500), (200, -120))
, (( 100, 2900), ( 90, 10))
-- , ((2500, 1100), ((-100), 100))
-- , (( 700, 300), (80, 60))
-- , ((1300, 1400), ((-30), 240))
-- , ((1000, 2400), (110, 100))
]
, simpleUnits = turretGen rt wmap
[ ((-700.0, 300.0), 0.0, 7 * pi / 4)
, ((500.0, 800.0), pi / 3, 7 * pi / 4)
]
}
,
-- 2
a { asteroids = asteroidGen rt wmap
[ ((1900, 500), (200, -120))
, (( 100, 2900), ( 90, 10))
, ((2500, 1100), (-100, 100))
]
, simpleUnits = turretGen rt wmap
[ ((1000.0, 200.0), 0.0, pi / 3)
]
, smartUnits = tankGen rt wmap
[ ((-1000.0, 800.0), 0.0)
, ((-1200.0, 500.0), pi)
]
}
,
-- 3
a { asteroids = asteroidGen rt wmap
[ ((900, 340), (230, -120))
, ((1200, 1400), (110, 30))
, ((200, 500), (-180, 110))
]
, simpleUnits = turretGen rt wmap
[ ((-500.0, 200.0), 0.0, 3 * pi / 2 )
]
, smartUnits = tankGen rt wmap
[ ((-1000.0, 800.0), 0.0)
, ((900.0, 600.0), pi)
, ((700.0, -500.0), pi / 2)
] ++
aTankGen rt wmap
[ ((-1100.0, -900.0), pi + pi / 3)
]
}
,
-- 4
a { asteroids = asteroidGen rt wmap
[ ((800, -340), (130, 120))
, ((700, 200), (10, -130))
, ((-300, 900), (70, 110))
]
, smartUnits = tankGen rt wmap
[ ((-700.0, 600.0), 0.0)
, ((500.0, -1100.0), pi / 2)
] ++
aTankGen rt wmap
[ ((-1000.0, 900.0), pi + pi / 3)
] ++
saucerGen rt wmap
[ ((400.0, 1400.0), 0.0) ]
}
,
-- 5
a { asteroids = asteroidGen rt wmap
[ ((800, -340), (130, 120))
, ((700, 200), (10, -130))
, ((-300, 900), (70, 110))
]
, smartUnits = tankGen rt wmap
[ ((-400.0, 900.0), 0.0)
] ++
aTankGen rt wmap
[ ((1400.0, -800.0), pi)
] ++
saucerGen rt wmap
[ ((400.0, 1400.0), 0.0)
, ((-1200.0, -1000.0), pi)
, ((100.0, -500.0), pi)
, ((-600.0, 800.0), 0.0)
]
}
,
-- 6
a { asteroids = asteroidGen rt wmap
[ ((800, -340), (-130, 120))
, ((700, 200), (-130, 120))
, ((-300, 900), (-130, 120))
, ((1340, -1230), (-130, 120))
, ((-420, 990), (-130, 120))
, ((370, -130), (-130, 120))
, ((-1220, 1090), (-130, 120))
, ((400, 1300), (-130, 120))
, ((-700, -500), (-130, 120))
, ((-1320, 1290), (-130, 120))
, ((100, 400), (-130, 120))
, ((-800, -400), (-130, 120))
, ((1440, -1330), (-130, 120))
, ((-520, 120), (-130, 120))
, ((1100, 40), (-130, 120))
, ((500, 100), (-130, 120))
, ((-1100, -20), (-130, 120))
, ((-520, -70), (-130, 120))
, ((40, 1100), (-130, 120))
, ((100, 500), (-130, 120))
, ((-20,-1100), (-130, 120))
, ((-70, -520), (-130, 120))
, ((-600, 1500), (-130, 120))
, ((-1000, 500), (-130, 120))
, ((-400, -600), (-130, 120))
, ((1200, -600), (-130, 120))
, ((500, -1400), (-130, 120))
] ++
bigAsteroidGen rt wmap
[ ((500, -840), (-130, 120))
, ((900, 300), (-130, 120))
, ((-200, 1100), (-130, 120))
, ((600, -200), (-130, 120))
, ((-600, 700), (-130, 120))
, ((-900, -1100), (-130, 120))
, ((-100, -900), (-130, 120))
, ((-200, -200), (-130, 120))
, ((600, 600), (-130, 120))
, ((900, -900), (-130, 120))
, ((-1400, -1400), (-130, 120))
, ((1100, 1300), (-130, 120))
, ((-1000, -800), (-130, 120))
, ((400, -600), (-130, 120))
, ((-500, -1300), (-130, 120))
]
, simpleUnits = turretGen rt wmap
[ ((700.0, 650.0), 0.0, pi )
, ((-550.0, -300.0), 0.0, 0.0 )
]
, smartUnits = tankGen rt wmap
[ ((-450.0, 821.0), 0.0)
] ++
aTankGen rt wmap
[ ((40.0, -1400.0), pi)
] ++
saucerGen rt wmap
[ ((540.0, 1320.0), 0.0)
, ((-1000.0, -1200.0), pi)
, ((40.0, 1200.0), pi)
, ((-200.0, -1000.0), 0)
]
}
,
-- 7
a { asteroids = asteroidGen rt wmap
[ ((800, -340), (-30, 20))
, ((-1320, 1290), (200, 100))
, ((-400, -600), (-80, -40))
, ((500, -1400), (30, 80))
] ++
bigAsteroidGen rt wmap
[ ((-100, -900), (40, 120))
, ((-1000, -800), (50, -60))
]
, simpleUnits = turretGen rt wmap
[ ((900.0, -650.0), 0.0, pi )
]
, smartUnits = tankGen rt wmap
[ ((-450.0, 821.0), 0.0)
, ((40.0, -1400.0), pi)
] ++
sniperGen rt wmap
[ ((-1200.0, 0.0), 0.0)
, ((1200.0, 0.0), 0.0)
]
, unitProjectiles = mineGen rt wmap
[ (300.0, 400.0)
, (-700.0, 200.0)
, (1300.0, -500.0)
]
}
,
-- 8
a { asteroids = asteroidGen rt wmap
[ ((840, -440), (-30, 20))
, ((-1320, 1290), (120, -100))
, ((600, 1400), (30, 80))
] ++
bigAsteroidGen rt wmap
[ ((-100, -900), (40, 30))
, ((-900, 800), (80, -60))
, ((-1000, 400), (-50, -80))
]
, smartUnits = ninjaGen rt wmap
[ ((100.0, 600.0), 0.0)
, ((-200.0, -700.0), pi)
, ((700.0, 800.0), 0.0)
, ((600.0, -900.0), pi)
, ((-800.0, 1300.0), 0.0)
, ((-1400.0, -1400.0), pi)
]
, unitProjectiles = mineGen rt wmap
[ (200.0, 800.0)
, (-500.0, -200.0)
, (-1300.0, 1000.0)
]
}
,
-- 9
a { asteroids = asteroidGen rt wmap
[ ((640, -440), (-20, 30))
, ((-1320, 1190), (110, -90))
, ((700, 1200), (40, 70))
] ++
bigAsteroidGen rt wmap
[ ((-100, -900), (30, 40))
, ((-500, 1000), (70, -70))
]
, smartUnits = deathGen rt wmap
[ ((0.0, -1000.0), 0.0)
]
}
,
-- 10
a { asteroids = asteroidGen rt wmap
[ ((1000, -300), (-50, 100))
, ((-1020, 1290), (120, 20))
, ((540, -1400), (90, 70))
] ++
bigAsteroidGen rt wmap
[ ((-400, -200), (40, 20))
, ((-1300, -850), (50, -160))
]
, simpleUnits = turretGen rt wmap
[ ((500.0, 650.0), 0.0, pi )
, ((-1300.0, -650.0), 0.0, pi )
]
, smartUnits = aTankGen rt wmap
[ ((-450.0, 821.0), 0.0)
, ((40.0, -1400.0), pi)
, ((600.0, 90.0), 0.0)
, ((900.0, -1200.0), pi)
] ++
sTankGen rt wmap
[ ((450.0, -721.0), 0.0)
, ((200.0, 1450.0), pi)
, ((-600.0, 190.0), 0.0)
, ((700.0, -1000.0), pi)
]
, unitProjectiles = mineGen rt wmap
[ (500.0, 1000.0)
, (-900.0, 700.0)
, (1300.0, -1400.0)
]
}
,
-- 11
a { smartUnits = zeusGen rt wmap
[ ((-1400, 1400.0), 0.0, 0)
] ++
sniperGen rt wmap
[ ((-1200.0, 0.0), 0.0)
, ((1200.0, 0.0), 0.0)
] ++
saucerGen rt wmap
[ ((1400.0, 1400.0), 0.0) ]
, unitProjectiles = mineGen rt wmap
[ (-1100.0, 1400.0)
, (-1700.0, 1400.0)
, (-1400.0, 1100.0)
, (-1400.0, 1700.0)
, (-1100.0, 1100.0)
, (-1700.0, 1700.0)
, (-1100.0, 1700.0)
, (-1700.0, 1100.0)
]
}
]
let addItems a = do (it1, it2) <- randomItemPair
x1 <- randomRIO (0, 2999)
x2 <- randomRIO (0, 2999)
y1 <- randomRIO (0, 2999)
y2 <- randomRIO (0, 2999)
let wp1 = wrappoint wmap (x1, y1)
let wp2 = wrappoint wmap (x2, y2)
let i1 = Item it1 rt wp1
let i2 = Item it2 rt wp2
return a { items = [i1, i2] }
mapM addItems pL
randomItemPair = do it1 <- randomItemType
it2 <- randomItemType
if it1 == it2
then randomItemPair
else return (it1, it2)
asteroidGen rt wmap p =
let positionsVelocities = p in
map (\(p, v) -> (SpaceJunk (Asteroid.new
rt
wmap
(wrappoint wmap p)
v)))
positionsVelocities
bigAsteroidGen rt wmap p =
let positionsVelocities = p in
map (\(p, v) -> (SpaceJunk (BigAsteroid.new
rt
wmap
(wrappoint wmap p)
v)))
positionsVelocities
turretGen rt wmap =
map (\(x, y, z) -> SimpleUnit (Turret.new rt wmap (wrappoint wmap x) y z))
tankGen rt wmap =
map (\(x, y) -> SmartUnit (Tank.new rt wmap (wrappoint wmap x) y))
aTankGen rt wmap =
map (\(x, y) -> SmartUnit (ATank.new rt wmap (wrappoint wmap x) y))
sTankGen rt wmap =
map (\(x, y) -> SmartUnit (STank.new rt wmap (wrappoint wmap x) y))
mineGen rt wmap =
map (\x -> Projectile (Mine.new rt wmap (wrappoint wmap x)))
sniperGen rt wmap =
map (\(x, y) -> SmartUnit (Sniper.new rt wmap (wrappoint wmap x) y))
zeusGen rt wmap =
map (\(x, y, z) -> SmartUnit (Zeus.new rt wmap (wrappoint wmap x) y z))
deathGen rt wmap =
map (\(x, y) -> SmartUnit (Death.new rt wmap (wrappoint wmap x) y))
saucerGen rt wmap =
map (\(x, y) -> SmartUnit (Saucer.new rt wmap (wrappoint wmap x) y))
ninjaGen rt wmap =
map (\(x, y) -> SmartUnit (Ninja.new rt wmap (wrappoint wmap x) y))