func (f *fire) getFrontPos(ent game.Ent, g *game.Game) linear.Vec2 { r := rand.New(g.Rng) theta := r.Float64() * math.Pi * 2 dist := math.Abs(r.NormFloat64() * f.deviance) if dist > f.deviance*4 { dist = f.deviance * 4 } dist = dist + dist*math.Cos(theta) center := (linear.Vec2{f.distToCenter, 0}).Rotate(ent.Angle()).Add(ent.Pos()) return (linear.Vec2{0, dist}).Rotate(ent.Angle() - math.Pi/2 + theta).Add(center) }
func (f *lightning) Draw(ent game.Ent, g *game.Game) { if !f.draw { return } gl.Disable(gl.TEXTURE_2D) gl.Color4ub(255, 255, 255, 255) forward := (linear.Vec2{1, 0}).Rotate(ent.Angle()).Scale(100000.0) gl.Begin(gl.LINES) v := ent.Pos().Add(forward) gl.Vertex2d(gl.Double(v.X), gl.Double(v.Y)) v = ent.Pos().Sub(forward) gl.Vertex2d(gl.Double(v.X), gl.Double(v.Y)) gl.End() }
func (pm *placeMine) Input(ent game.Ent, g *game.Game, pressAmt float64, trigger bool) { player := ent.(*game.PlayerEnt) if pressAmt == 0 { delete(player.Processes, pm.id) return } proc, ok := player.Processes[pm.id].(*multiDrain) if !ok { player.Processes[pm.id] = &multiDrain{Gid: player.Gid, Unit: game.Mana{300, 0, 0}} return } if trigger && proc.Stored > 1 { proc.Stored-- heading := (linear.Vec2{1, 0}).Rotate(ent.Angle()) pos := ent.Pos().Add(heading.Scale(100)) g.MakeMine(pos, linear.Vec2{}, 100, 100, 100, 100) } }