mirror of
				https://github.com/yeslayla/golang-game-framework.git
				synced 2025-11-04 08:43:06 +01:00 
			
		
		
		
	Work towards deletion system
This commit is contained in:
		
							
								
								
									
										29
									
								
								game/game.go
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								game/game.go
									
									
									
									
									
								
							@ -21,19 +21,34 @@ func Run(root *node.Node, renderer rendering.Renderer2D, inputHandler input.Inpu
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	speed := 0.01
 | 
						rotation_speed := 0.01
 | 
				
			||||||
 | 
						speed := 0.02
 | 
				
			||||||
	g.OnUpdate(func() error {
 | 
						g.OnUpdate(func() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if inputHandler.IsKeyJustPressed(sdl.SCANCODE_SPACE) {
 | 
							if inputHandler.IsKeyJustReleased(sdl.SCANCODE_SPACE) {
 | 
				
			||||||
			speed = -speed
 | 
								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
 | 
							return nil
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	controller := node.NewNode()
 | 
						controller := node.NewNode()
 | 
				
			||||||
	controller.Name = "Controller"
 | 
						controller.Name = "Controller"
 | 
				
			||||||
 | 
						controller.SetProcessMode(node.ActiveProcessMode)
 | 
				
			||||||
	defer root.AddChild(&controller)
 | 
						defer root.AddChild(&controller)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	controller.OnUpdate(func() error {
 | 
						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
 | 
							return nil
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -15,4 +15,5 @@ type INode interface {
 | 
				
			|||||||
	IsProcessing() bool
 | 
						IsProcessing() bool
 | 
				
			||||||
	GetProcessMode() ProcessMode
 | 
						GetProcessMode() ProcessMode
 | 
				
			||||||
	SetProcessMode(ProcessMode)
 | 
						SetProcessMode(ProcessMode)
 | 
				
			||||||
 | 
						Free() error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										21
									
								
								node/node.go
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								node/node.go
									
									
									
									
									
								
							@ -1,6 +1,7 @@
 | 
				
			|||||||
package node
 | 
					package node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/manleydev/golang-game-framework/rendering"
 | 
						"github.com/manleydev/golang-game-framework/rendering"
 | 
				
			||||||
@ -112,6 +113,26 @@ func (node *Node) GetName() string {
 | 
				
			|||||||
	return node.Name
 | 
						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 {
 | 
					func (node *Node) GetChild(index int) INode {
 | 
				
			||||||
	if index < len(node.children) {
 | 
						if index < len(node.children) {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user