fuck engo
This commit is contained in:
parent
12eccc3fae
commit
38a9438713
BIN
engo/TrafficManager/assets/city.png
Normal file
BIN
engo/TrafficManager/assets/city.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
86
engo/TrafficManager/systems/citySystem.go
Normal file
86
engo/TrafficManager/systems/citySystem.go
Normal file
@ -0,0 +1,86 @@
|
||||
package systems
|
||||
|
||||
import (
|
||||
"engo.io/ecs"
|
||||
"engo.io/engo"
|
||||
"engo.io/engo/common"
|
||||
"fmt"
|
||||
"log"
|
||||
)
|
||||
|
||||
type System interface {
|
||||
// Update is ran every frame, with `dt` being the time
|
||||
// in seconds since the last frame
|
||||
Update(dt float32)
|
||||
|
||||
// Remove removes an Entity from the System
|
||||
Remove(ecs.BasicEntity)
|
||||
}
|
||||
|
||||
type City struct {
|
||||
ecs.BasicEntity
|
||||
common.RenderComponent
|
||||
common.SpaceComponent
|
||||
}
|
||||
|
||||
type MouseTracker struct {
|
||||
ecs.BasicEntity
|
||||
common.MouseComponent
|
||||
}
|
||||
|
||||
type CityBuildingSystem struct {
|
||||
mouseTracker MouseTracker
|
||||
|
||||
world *ecs.World
|
||||
}
|
||||
|
||||
// Remove is called whenever an Entity is removed from the World, in order to remove it from this sytem as well
|
||||
func (*CityBuildingSystem) Remove(ecs.BasicEntity) {}
|
||||
|
||||
// Update is ran every frame, with `dt` being the time
|
||||
// in seconds since the last frame
|
||||
func (cb *CityBuildingSystem) Update(dt float32) {
|
||||
if engo.Input.Button("AddCity").JustPressed() {
|
||||
fmt.Println("The gamer pressed F1")
|
||||
|
||||
city := City{BasicEntity: ecs.NewBasic()}
|
||||
|
||||
city.SpaceComponent = common.SpaceComponent{
|
||||
Position: engo.Point{cb.mouseTracker.MouseX, cb.mouseTracker.MouseY},
|
||||
Width: 30,
|
||||
Height: 64,
|
||||
}
|
||||
|
||||
texture, err := common.LoadedSprite("textures/city.png")
|
||||
if err != nil {
|
||||
log.Println("Unable to load texture: " + err.Error())
|
||||
}
|
||||
|
||||
city.RenderComponent = common.RenderComponent{
|
||||
Drawable: texture,
|
||||
Scale: engo.Point{X: 0.1, Y: 0.1},
|
||||
}
|
||||
|
||||
for _, system := range cb.world.Systems() {
|
||||
switch sys := system.(type) {
|
||||
case *common.RenderSystem:
|
||||
sys.Add(&city.BasicEntity, &city.RenderComponent, &city.SpaceComponent)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (cb *CityBuildingSystem) New(w *ecs.World) {
|
||||
cb.world = w
|
||||
fmt.Println("CityBuildingSystem was added to the Scene")
|
||||
|
||||
cb.mouseTracker.BasicEntity = ecs.NewBasic()
|
||||
cb.mouseTracker.MouseComponent = common.MouseComponent{Track: true}
|
||||
|
||||
for _, system := range w.Systems() {
|
||||
switch sys := system.(type) {
|
||||
case *common.MouseSystem:
|
||||
sys.Add(&cb.mouseTracker.BasicEntity, &cb.mouseTracker.MouseComponent, nil, nil)
|
||||
}
|
||||
}
|
||||
}
|
47
engo/TrafficManager/traffic.go
Normal file
47
engo/TrafficManager/traffic.go
Normal file
@ -0,0 +1,47 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"engo.io/engo"
|
||||
"engo.io/engo/common"
|
||||
"engo.io/ecs"
|
||||
"image/color"
|
||||
"./systems"
|
||||
)
|
||||
|
||||
type myScene struct {}
|
||||
|
||||
type City struct {
|
||||
ecs.BasicEntity
|
||||
common.RenderComponent
|
||||
common.SpaceComponent
|
||||
}
|
||||
|
||||
|
||||
// Type uniquely defines your game type
|
||||
func (*myScene) Type() string { return "myGame" }
|
||||
|
||||
// Preload is called before loading any assets from the disk,
|
||||
// to allow you to register / queue them
|
||||
func (*myScene) Preload() {
|
||||
engo.Files.Load("city.png")
|
||||
}
|
||||
|
||||
// Setup is called before the main loop starts. It allows you
|
||||
// to add entities and systems to your Scene.
|
||||
func (*myScene) Setup(world *ecs.World) {
|
||||
engo.Input.RegisterButton("AddCity", engo.F1)
|
||||
common.SetBackground(color.White)
|
||||
world.AddSystem(&common.RenderSystem{})
|
||||
world.AddSystem(&common.MouseSystem{})
|
||||
|
||||
world.AddSystem(&systems.CityBuildingSystem{})
|
||||
}
|
||||
|
||||
func main() {
|
||||
opts := engo.RunOptions{
|
||||
Title: "Hello World",
|
||||
Width: 400,
|
||||
Height: 400,
|
||||
}
|
||||
engo.Run(opts, &myScene{})
|
||||
}
|
Loading…
Reference in New Issue
Block a user