本文整理汇总了Golang中github.com/runningwild/jota/game.Ent类的典型用法代码示例。如果您正苦于以下问题:Golang Ent类的具体用法?Golang Ent怎么用?Golang Ent使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Ent类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: NearestEnt
func (jm *JotaModule) NearestEnt(vs ...runtime.Val) runtime.Val {
jm.dieOnTerminated()
jm.engine.Pause()
defer jm.engine.Unpause()
g := jm.engine.GetState().(*game.Game)
me := g.Ents[jm.myGid]
if me == nil {
return runtime.Nil
}
var closest game.Ent
dist := 1e9
for _, ent := range g.Ents {
if ent == me {
continue
}
if closest == nil {
closest = ent
} else if closest.Pos().Sub(me.Pos()).Mag2() < dist {
dist = closest.Pos().Sub(me.Pos()).Mag2()
}
}
if closest == nil {
return runtime.Nil
}
return jm.newEnt(closest.Id())
}
示例2: Input
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)
}
}
示例3: Think
func (p *pull) Think(ent game.Ent, g *game.Game) {
player := ent.(*game.PlayerEnt)
proc, ok := player.Processes[p.id].(*multiDrain)
if !ok {
return
}
if p.trigger && p.draining && proc.Stored > 1 {
proc.Stored -= 0.1
if proc.Stored <= 1.0 {
p.draining = false
}
for _, ent := range g.Ents {
ray := ent.Pos().Sub(player.Pos())
if ray.Mag2() < 0.1 {
continue
}
target_angle := ray.Angle() - player.Angle()
for target_angle < 0 {
target_angle += math.Pi * 2
}
for target_angle > math.Pi*2 {
target_angle -= math.Pi * 2
}
if target_angle > p.angle/2 && target_angle < math.Pi*2-p.angle/2 {
continue
}
ray = player.Pos().Sub(ent.Pos())
ray = ray.Norm()
ent.ApplyForce(ray.Scale(-p.force))
player.ApplyForce(ray.Scale(p.force).Scale(0.01))
}
}
}
示例4: getFrontPos
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)
}
示例5: Input
func (a *asplode) Input(ent game.Ent, g *game.Game, pressAmt float64, trigger bool) {
if trigger && !ent.Dead() {
// Kill ent and put down explosion
ent.Suicide()
g.Processes = append(g.Processes, &asplosionProc{
StartRadius: a.startRadius,
EndRadius: a.endRadius,
DurationThinks: a.durationThinks,
Dps: a.dps,
Pos: ent.Pos(),
})
}
}
示例6: Draw
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()
}