98 lines
1.5 KiB
Go
98 lines
1.5 KiB
Go
package main
|
|
|
|
import "vultras.su/core/gg"
|
|
//import "fmt"
|
|
|
|
var (
|
|
counter int
|
|
)
|
|
|
|
type Tri struct {
|
|
gg.DrawablePolygon
|
|
Spawned bool
|
|
}
|
|
|
|
func NewTri() *Tri {
|
|
ret := &Tri{}
|
|
ret.Transform.Scale = gg.V2(1)
|
|
|
|
ret.Triangles = gg.Triangles{
|
|
gg.Triangle{
|
|
gg.V(0, 10),
|
|
gg.V(100, 0),
|
|
gg.V(0, -10),
|
|
},
|
|
}
|
|
ret.Color = gg.Rgba(1, 1, 0, 1)
|
|
ret.Visible = true
|
|
ret.Layer = TriangleL
|
|
ret.Connect(player)
|
|
|
|
return ret
|
|
}
|
|
|
|
func (t *Tri) Update(c *Context) {
|
|
if t.Spawned {
|
|
return
|
|
}
|
|
dt := c.DT()
|
|
if t.ContainsPoint(c.AbsCursorPosition()) {
|
|
t.Color = gg.Rgba(0, 1, 0, 1)
|
|
} else {
|
|
t.Color = gg.Rgba(1, 0, 1, 1)
|
|
}
|
|
|
|
keys := c.Keys()
|
|
|
|
d := +1.
|
|
if c.IsPressed(gg.KeyShift) {
|
|
d = -1
|
|
}
|
|
|
|
for _, key := range keys { switch key {
|
|
case gg.KeyM:
|
|
absPos := t.AbsPosition()
|
|
t.SetAbsPosition(
|
|
absPos.Add(gg.V(0, 100*c.DT()*d)),
|
|
)
|
|
case gg.KeyN:
|
|
absPos := t.AbsPosition()
|
|
t.SetAbsPosition(
|
|
absPos.Add(gg.V(100*c.DT()*d, 0)),
|
|
)
|
|
case gg.KeyV:
|
|
t.Rotation += d * gg.Pi * 0.3 * dt
|
|
case gg.Key2 :
|
|
if t.Spawned {
|
|
break
|
|
}
|
|
t.Triangles = append(t.Triangles, gg.Triangle{
|
|
gg.V(0, 10 + gg.Float(counter)),
|
|
gg.V(100 + gg.Float(counter), 0),
|
|
gg.V(0, -10 - gg.Float(counter)),
|
|
})
|
|
case gg.Key3 :
|
|
if t.Spawned {
|
|
break
|
|
}
|
|
tt := *t
|
|
tt.Spawned = true
|
|
tt.Visible = false
|
|
tt.Disconnect()
|
|
if c.Spawn(&tt) == nil {
|
|
counter++
|
|
}
|
|
}}
|
|
|
|
for _, event := range c.Events {
|
|
switch e := event.(type) { case *gg.KeyDown:
|
|
switch e.Key {
|
|
case gg.Key1 :
|
|
if t.Connected() {
|
|
t.Disconnect()
|
|
} else {
|
|
t.Connect(player)
|
|
}
|
|
}}}
|
|
}
|
|
|