diff --git a/game/game.go b/game/game.go index 6ccb8f9..51d9be3 100644 --- a/game/game.go +++ b/game/game.go @@ -21,19 +21,34 @@ func Run(root *node.Node, renderer rendering.Renderer2D, inputHandler input.Inpu return nil }) - speed := 0.01 + rotation_speed := 0.01 + speed := 0.02 g.OnUpdate(func() error { - if inputHandler.IsKeyJustPressed(sdl.SCANCODE_SPACE) { - speed = -speed + if inputHandler.IsKeyJustReleased(sdl.SCANCODE_SPACE) { + rotation_speed = -rotation_speed } - g.Rotation += speed + if inputHandler.IsKeyDown(sdl.SCANCODE_D) { + g.Position.X += speed + } + if inputHandler.IsKeyDown(sdl.SCANCODE_A) { + g.Position.X -= speed + } + if inputHandler.IsKeyDown(sdl.SCANCODE_S) { + g.Position.Y += speed + } + if inputHandler.IsKeyDown(sdl.SCANCODE_W) { + g.Position.Y -= speed + } + + g.Rotation += rotation_speed return nil }) controller := node.NewNode() controller.Name = "Controller" + controller.SetProcessMode(node.ActiveProcessMode) defer root.AddChild(&controller) controller.OnUpdate(func() error { @@ -45,6 +60,12 @@ func Run(root *node.Node, renderer rendering.Renderer2D, inputHandler input.Inpu } } + if inputHandler.IsKeyJustPressed(sdl.SCANCODE_P) { + if err := g.Free(); err != nil { + return err + } + } + return nil }) diff --git a/node/inode.go b/node/inode.go index f280240..8c0c99b 100644 --- a/node/inode.go +++ b/node/inode.go @@ -15,4 +15,5 @@ type INode interface { IsProcessing() bool GetProcessMode() ProcessMode SetProcessMode(ProcessMode) + Free() error } diff --git a/node/node.go b/node/node.go index 6ab46a4..6843c9d 100644 --- a/node/node.go +++ b/node/node.go @@ -1,6 +1,7 @@ package node import ( + "fmt" "log" "github.com/manleydev/golang-game-framework/rendering" @@ -112,6 +113,26 @@ func (node *Node) GetName() string { return node.Name } +func (node *Node) Free() error { + + var parent *Node = node.parent.(*Node) + if err := parent.removeChild(node); err != nil { + return err + } + node.parent = nil + return nil +} + +func (node *Node) removeChild(target *Node) error { + for i, child := range node.children { + if child == target { + node.children = append(node.children[:i], node.children[i+1:]...) + return nil + } + } + return fmt.Errorf("Could not remove child '%s', child not found on parent!", target.Name) +} + func (node *Node) GetChild(index int) INode { if index < len(node.children) { return nil