/
gm_stock.go
75 lines (64 loc) · 2.44 KB
/
gm_stock.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package main
import "time"
//Stock is the default game mode
type Stock struct{}
//IsDone returns true because stock games don't need to process after a match
func (gm Stock) IsDone() bool {
return true
}
//GetLevels returns no levels because stock games can use any level
func (gm Stock) GetLevels() []*Level {
return make([]*Level, 0)
}
//GetWeapons returns the allowed weapons for a stock match
func (gm Stock) GetWeapons() []Weapon {
return []Weapon{
weaponPistol, weaponRevolver, weaponDeagle, weaponUzi, weaponGodPistol, weaponAK47,
weaponM16, weaponM1, weaponSniper, weaponSawedOff, weaponMilitaryShotgun, weaponBouncer,
weaponGrenadeLauncher, weaponThruster, weaponRPG, weaponSnakePistol, weaponSnakeShotgun, weaponSnakeGrenadeLauncher,
weaponSnakeLauncher, weaponSnakeMinigun, weaponFlyingSnakeLauncher, weaponSpikeBall, weaponLavaBeam, weaponLavaStream,
weaponLavaSpray, weaponSpikeGun, weaponSword, weaponBlinkDagger, weaponSpear, weaponTimeBubble,
weaponLaser, weaponIceGun, weaponBlackHole, weaponGlueGun, weaponMinigun, weaponFlameThrower,
weaponShield, weaponFan, weaponBall, weaponLavaWhip, weaponMinigunTiny, weaponLaserPlanter,
weaponHolySword,
}
}
//GetWeaponSpawnRates returns the allowed weapon spawn rates for a tournament
func (gm Stock) GetWeaponSpawnRates() []WeaponSpawnRate {
return []WeaponSpawnRate{
WeaponSpawnRate{
MinimumSeconds: 5,
MaximumSeconds: 8,
},
WeaponSpawnRate{
MinimumSeconds: 3,
MaximumSeconds: 5,
},
WeaponSpawnRate{
MinimumSeconds: 0,
MaximumSeconds: 0,
},
WeaponSpawnRate{
MinimumSeconds: 8,
MaximumSeconds: 12,
},
}
}
//StartMatch handles what happens when the match starts
func (gm Stock) StartMatch(lobby *Lobby) {
log.Info("Starting match with gamemode: Stock")
lastWeaponSpawn := time.Now()
weaponSpawnWait := randomizer.Intn(gm.GetWeaponSpawnRates()[0].MaximumSeconds-gm.GetWeaponSpawnRates()[0].MinimumSeconds+1) + gm.GetWeaponSpawnRates()[0].MinimumSeconds
log.Trace("Weapon initial spawn wait: ", weaponSpawnWait)
for lobby.MatchInProgress() {
if !lobby.MatchInProgress() {
break
}
if int(time.Now().Sub(lastWeaponSpawn)/time.Second) >= weaponSpawnWait {
lobby.SpawnWeaponRandom()
weaponSpawnWait = randomizer.Intn(gm.GetWeaponSpawnRates()[0].MaximumSeconds-gm.GetWeaponSpawnRates()[0].MinimumSeconds+1) + gm.GetWeaponSpawnRates()[0].MinimumSeconds
log.Trace("Weapon next spawn wait: ", weaponSpawnWait)
lastWeaponSpawn = time.Now()
}
}
}