summaryrefslogtreecommitdiff
path: root/engine/CoreObjects
diff options
context:
space:
mode:
Diffstat (limited to 'engine/CoreObjects')
-rw-r--r--engine/CoreObjects/Collider.go8
-rw-r--r--engine/CoreObjects/DynamicObject.go37
-rw-r--r--engine/CoreObjects/GameObject.go1
3 files changed, 46 insertions, 0 deletions
diff --git a/engine/CoreObjects/Collider.go b/engine/CoreObjects/Collider.go
index 93cbee6..6603058 100644
--- a/engine/CoreObjects/Collider.go
+++ b/engine/CoreObjects/Collider.go
@@ -15,6 +15,7 @@ type Collider interface {
MoveTo(x float32, y float32)
Intersects(x float32, y float32) bool
CanMove(colliders []*Collider, dx float32, dy float32) bool
+ Clone() Collider
Draw()
}
@@ -83,3 +84,10 @@ func (base *BoxCollider) CanMove(colliders []*Collider, dx float32, dy float32)
}
return true
}
+
+func (base *BoxCollider) Clone() Collider {
+ var clone = (&BoxCollider{}).Init (
+ base.Location.X, base.Location.Y,
+ base.Location.Width, base.Location.Height)
+ return clone
+}
diff --git a/engine/CoreObjects/DynamicObject.go b/engine/CoreObjects/DynamicObject.go
index 8c70599..0462ebb 100644
--- a/engine/CoreObjects/DynamicObject.go
+++ b/engine/CoreObjects/DynamicObject.go
@@ -6,6 +6,7 @@ import rl "github.com/gen2brain/raylib-go/raylib"
type DynamicObject struct {
Position rl.Vector2
Textures []*TextureBlock
+ Colliders []*ColliderBlock
}
// The dynamic objects can contain multiple textures. This struct
@@ -15,6 +16,11 @@ type TextureBlock struct {
Offset rl.Vector2
}
+type ColliderBlock struct {
+ Collider Collider
+ Offset rl.Vector2
+}
+
func (base *DynamicObject) Create(SceneManager) {
}
@@ -31,12 +37,43 @@ func (base *DynamicObject) Draw() {
int32(base.Position.Y + v.Offset.Y),
rl.White)
}
+ for _, v := range base.Colliders {
+ v.Collider.Draw()
+ }
+}
+
+func (base *DynamicObject) MoveTo(x float32, y float32) {
+ base.Position = rl.Vector2 { X: x, Y: y }
+ for _, v := range base.Colliders {
+ v.Collider.MoveTo(x + v.Offset.X, y + v.Offset.Y)
+ }
}
func (base *DynamicObject) Clone() *DynamicObject {
var outp = DynamicObject {
Position: base.Position,
Textures: base.Textures,
+ Colliders: base.cloneColliders(),
}
return &outp
}
+
+func (base *DynamicObject) cloneColliders() []*ColliderBlock {
+ var outp = make([]*ColliderBlock, len(base.Colliders))
+ for i, v := range base.Colliders {
+ outp[i] = &ColliderBlock {
+ Collider: v.Collider.Clone(),
+ Offset: v.Offset,
+ }
+
+ }
+ return outp
+}
+
+func (base *DynamicObject) GetColliders() []Collider {
+ var outp = make([]Collider, 0, len(base.Colliders))
+ for _, v := range base.Colliders {
+ outp = append(outp, v.Collider)
+ }
+ return outp
+}
diff --git a/engine/CoreObjects/GameObject.go b/engine/CoreObjects/GameObject.go
index 255a405..087e1e9 100644
--- a/engine/CoreObjects/GameObject.go
+++ b/engine/CoreObjects/GameObject.go
@@ -5,4 +5,5 @@ type GameObject interface {
Destroy()
Update()
Draw()
+ GetColliders() []Collider
}