Pretty much working

This commit is contained in:
Brian Buller 2016-01-08 18:04:09 -06:00
parent ec97d5e228
commit 95919e67e7

View File

@ -16,6 +16,7 @@ const (
modeRun modeRun
modeRunInput modeRunInput
modePause modePause
modeGameOver
) )
type mainScreen struct { type mainScreen struct {
@ -170,7 +171,7 @@ func (screen *mainScreen) update() {
screen.PauseMenu.SetTitle("Player 1 LOSES.") screen.PauseMenu.SetTitle("Player 1 LOSES.")
} else { } else {
// Victory! // Victory!
screen.PauseMenu.SetTitle("Player 1 Wins!") screen.PauseMenu.SetTitle("Player 2 Wins!")
} }
screen.GameMode = modePause screen.GameMode = modePause
} }
@ -182,7 +183,7 @@ func (screen *mainScreen) update() {
screen.PauseMenu.SetTitle("Player 2 LOSES.") screen.PauseMenu.SetTitle("Player 2 LOSES.")
} else { } else {
// Victory! // Victory!
screen.PauseMenu.SetTitle("Player 2 Wins!") screen.PauseMenu.SetTitle("Player 1 Wins!")
} }
screen.GameMode = modePause screen.GameMode = modePause
} }
@ -277,7 +278,8 @@ func (p *projectile) init(pl *player) {
p.launchTime = time.Now() p.launchTime = time.Now()
p.angle = pl.projAngle p.angle = pl.projAngle
p.speed = pl.projSpeed p.speed = pl.projSpeed
p.startX, p.startY = pl.GetBulletHandPos() p.startX, p.startY = pl.GetClosestTrajectory()
//p.startX, p.startY = pl.x+2, pl.y+2
p.x = p.startX p.x = p.startX
p.y = p.startY p.y = p.startY
} }
@ -289,12 +291,15 @@ func (p *projectile) update() {
useA := degToRad(p.angle) useA := degToRad(p.angle)
p.x = int(useX + (useSpeed * math.Cos(useA) * tm)) p.x = int(useX + (useSpeed * math.Cos(useA) * tm))
p.y = int(useY + (useSpeed*math.Sin(useA)*tm - p.gravity*tm*tm/2)) p.y = int(useY + (useSpeed*math.Sin(useA)*tm - p.gravity*tm*tm/2))
WriteToLog(fmt.Sprintf("%f - S:%d; (%d,%d)=>(%d,%d)\n", useA, p.speed, p.startX, p.startY, p.x, p.y))
} }
func (p *projectile) draw() { func (p *projectile) draw() {
if p.y < 0 {
termbox.SetCell(p.x, 0, '^', termbox.ColorYellow, termbox.ColorBlack)
} else {
termbox.SetCell(p.x, p.y, '0', termbox.ColorYellow, termbox.ColorBlack) termbox.SetCell(p.x, p.y, '0', termbox.ColorYellow, termbox.ColorBlack)
} }
}
type player struct { type player struct {
x, y int x, y int
@ -345,19 +350,39 @@ func (p *player) draw() {
// Now draw the arms // Now draw the arms
if p.turn { if p.turn {
bulletHandX, bulletHandY := p.GetBulletHandPos() bulletHandX, bulletHandY := p.GetBulletHandPos()
termbox.SetCell(bulletHandX, bulletHandY, '+', termbox.ColorBlack, p.baseColor) termbox.SetCell(bulletHandX, bulletHandY, 'X', termbox.ColorRed|termbox.AttrBold, termbox.ColorBlack)
} }
} }
func (p *player) didCollide(pr *projectile) bool { func (p *player) didCollide(pr *projectile) bool {
WriteToLog(fmt.Sprintf("Player: (%d,%d) -> (%d,%d)\n", p.x, p.y-4, p.x+4, p.y))
WriteToLog(fmt.Sprintf("Projectile: (%d,%d)\n", pr.x, pr.y))
if pr.x >= p.x && pr.x <= p.x+4 { if pr.x >= p.x && pr.x <= p.x+4 {
return pr.y <= p.y && pr.y >= p.y-4 return pr.y <= p.y && pr.y >= p.y-4
} }
return false return false
} }
func (p *player) GetClosestTrajectory() (int, int) {
// Find the spot closest to the player in a direct line with the target
bHx, bHy := p.GetBulletHandPos()
gx, gy := p.x+2, p.y-2
for gx >= p.x && gx <= p.x+4 && gy >= p.y-4 && gy <= p.y {
if math.Abs(float64(bHx-gx)) > math.Abs(float64(bHy-gy)) {
if bHx > gx {
gx++
} else {
gx--
}
} else {
if bHy > gy {
gy++
} else {
gy--
}
}
}
return gx, gy
}
func (p *player) GetBulletHandPos() (int, int) { func (p *player) GetBulletHandPos() (int, int) {
tm := 0.5 tm := 0.5
useSpeed := float64(p.projSpeed) useSpeed := float64(p.projSpeed)
@ -366,34 +391,6 @@ func (p *player) GetBulletHandPos() (int, int) {
retX := int(useX + (useSpeed * math.Cos(useA) * tm)) retX := int(useX + (useSpeed * math.Cos(useA) * tm))
retY := int(useY + (useSpeed*math.Sin(useA)*tm - p.gravity*tm*tm/2)) retY := int(useY + (useSpeed*math.Sin(useA)*tm - p.gravity*tm*tm/2))
return retX, retY return retX, retY
/*
if p.projAngle <= 11 {
return p.x + 5, p.y - 2
} else if p.projAngle <= 22 {
return p.x + 5, p.y - 3
} else if p.projAngle <= 41 {
return p.x + 5, p.y - 4
} else if p.projAngle <= 50 {
return p.x + 5, p.y - 5
} else if p.projAngle <= 77 {
return p.x + 4, p.y - 5
} else if p.projAngle <= 86 {
return p.x + 3, p.y - 5
} else if p.projAngle <= 95 {
return p.x + 2, p.y - 5
} else if p.projAngle <= 119 {
return p.x + 1, p.y - 5
} else if p.projAngle <= 130 {
return p.x, p.y - 5
} else if p.projAngle <= 141 {
return p.x - 1, p.y - 5
} else if p.projAngle <= 152 {
return p.x - 1, p.y - 4
} else if p.projAngle <= 165 {
return p.x - 1, p.y - 3
}
return p.x - 1, p.y - 2
*/
} }
type building struct { type building struct {