gg/cmd/test/trianlge.go
2024-05-19 23:11:58 +05:00

111 lines
1.8 KiB
Go

package main
import "surdeus.su/core/gg"
import "fmt"
var (
counter int
)
type Tri struct {
gg.DrawablePolygon
Spawned bool
}
func NewTri() *Tri {
ret := &Tri{}
ret.Transform = gg.T()
ret.SetPosition(gg.V(-100, -100))
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.Collidable = true
ret.Type = gg.CollisionStaticPhysics
ret.Layer = TriangleL
//ret.Connect(player)
return ret
}
func (t *Tri) Update(c *Context) {
//redges := rect.Edges()
//tedges := t.Edges()
//crosses, ok := tedges.CrossWithEdges(redges)
//fmt.Println("shit:", crosses, ok)
if false {
//fmt.Println("edges:", tedges)
}
col, hasCol := gg.Collide(t, rect)
if hasCol && len(col.Crosses) > 0 {
fmt.Println("col:", col)
}
dt := c.Dt().Seconds()
if !t.ContainedPoints(gg.Points{c.AbsCursorPosition()}).Empty() {
t.Color = gg.Rgba(0, 1, 0, 1)
} else {
t.Color = gg.Rgba(1, 0, 1, 1)
}
if t.Spawned {
return
}
keys := c.Keys()
d := +1.
if c.IsPressed(gg.KeyShift) {
d = -1
}
for _, key := range keys {
switch key {
case gg.KeyM:
t.Move(gg.Y(100 * dt * d))
case gg.KeyN:
t.Move(gg.X(100 * dt * d))
case gg.KeyV:
t.Rotate(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.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)
}
}
}
}
}