diff options
Diffstat (limited to 'engine/CoreObjects')
| -rw-r--r-- | engine/CoreObjects/DynamicObject.go | 76 | ||||
| -rw-r--r-- | engine/CoreObjects/GameObject.go | 2 | ||||
| -rw-r--r-- | engine/CoreObjects/OverlayScene.go | 4 | ||||
| -rw-r--r-- | engine/CoreObjects/Scene.go | 3 |
4 files changed, 76 insertions, 9 deletions
diff --git a/engine/CoreObjects/DynamicObject.go b/engine/CoreObjects/DynamicObject.go index cf1378f..36614d6 100644 --- a/engine/CoreObjects/DynamicObject.go +++ b/engine/CoreObjects/DynamicObject.go @@ -1,13 +1,33 @@ package coreobjects -import rl "github.com/gen2brain/raylib-go/raylib" +import ( + "fmt" + + settings "github.com/DegustatorPonos/RuinesOfRafdolon/Settings" + rl "github.com/gen2brain/raylib-go/raylib" +) + +// The size of the font used in the overaly +const objectOverlayTextSize int32 = 12 +// An offset of the overlay compared to the mouse position +const objectOveralyOffset float32 = 10 +// An offset of the overlay compared to the mouse position +const objectOveralyPadding int32 = 3 +// The color of the overlay text +var objectOverlayTextColor = rl.Black +// The color of the overlay background +var objectOverlayBackgroundColor = rl.LightGray // An object loaded from the package. Impmiments GameObject interface type DynamicObject struct { + PrototypeName string `json:"-"` Position rl.Vector2 YLevelOffset float32 Textures []*TextureBlock Colliders []*ColliderBlock + + parentScene Scene + showTooltip bool } // The dynamic objects can contain multiple textures. This struct @@ -22,24 +42,64 @@ type ColliderBlock struct { Offset rl.Vector2 } -func (base *DynamicObject) Create(SceneManager) { +func (base *DynamicObject) Init(manager SceneManager) { + if manager.SelectedScene == nil { + panic("Failed to initialize a dynamic object: the scene was not selected") + } + base.parentScene = manager.SelectedScene } func (base *DynamicObject) Destroy() { } func (base *DynamicObject) Update() { + if settings.State.DrawColliders { + base.showTooltip = false + var mousePosition = base.parentScene.GetMousePosition() + for _, v := range base.Colliders { + if v.Collider.Intersects(mousePosition.X, mousePosition.Y) { + base.showTooltip = true + return + } + } + } +} + +func (base *DynamicObject) drawOverlay() { + var mousePoint = base.parentScene.GetMousePosition() + var text = fmt.Sprintf("Proto: %s", base.PrototypeName) + var overlayPosX = mousePoint.X + objectOveralyOffset + var overlayPosY = mousePoint.Y + var size = rl.MeasureText(text, objectOverlayTextSize) + + rl.DrawRectangle( + int32(overlayPosX), + int32(overlayPosY), + size + objectOveralyPadding * 2, + objectOverlayTextSize + objectOveralyPadding, + objectOverlayBackgroundColor) + + rl.DrawText(string(text), + int32(overlayPosX) + objectOveralyPadding, + int32(overlayPosY), + objectOverlayTextSize, + objectOverlayTextColor) } func (base *DynamicObject) Draw() { for _, v := range base.Textures { rl.DrawTexture(*v.Texture, - int32(base.Position.X + v.Offset.X), - int32(base.Position.Y + v.Offset.Y), - rl.White) + int32(base.Position.X + v.Offset.X), + int32(base.Position.Y + v.Offset.Y), + rl.White) } - for _, v := range base.Colliders { - v.Collider.Draw() + if settings.State.DrawColliders { + for _, v := range base.Colliders { + v.Collider.Draw() + if base.showTooltip { + base.drawOverlay() + } + } } } @@ -52,6 +112,7 @@ func (base *DynamicObject) MoveTo(x float32, y float32) { func (base *DynamicObject) Clone() *DynamicObject { var outp = DynamicObject { + PrototypeName: base.PrototypeName, YLevelOffset: base.YLevelOffset, Position: base.Position, Textures: base.Textures, @@ -67,7 +128,6 @@ func (base *DynamicObject) cloneColliders() []*ColliderBlock { Collider: v.Collider.Clone(), Offset: v.Offset, } - } return outp } diff --git a/engine/CoreObjects/GameObject.go b/engine/CoreObjects/GameObject.go index 186da1f..9ff1b87 100644 --- a/engine/CoreObjects/GameObject.go +++ b/engine/CoreObjects/GameObject.go @@ -1,7 +1,7 @@ package coreobjects type GameObject interface { - Create(SceneManager) + Init(SceneManager) Destroy() Update() Draw() diff --git a/engine/CoreObjects/OverlayScene.go b/engine/CoreObjects/OverlayScene.go index a15fd17..3c79b78 100644 --- a/engine/CoreObjects/OverlayScene.go +++ b/engine/CoreObjects/OverlayScene.go @@ -17,6 +17,10 @@ func (base *OveralyScene) Create(_ SceneManager) { func (base *OveralyScene) Destroy() { } +func (base *OveralyScene) GetMousePosition() rl.Vector2 { + return rl.GetMousePosition() +} + func (base *OveralyScene) Update() { base.FPS.Update() if rl.IsKeyPressed(rl.KeyF7) { diff --git a/engine/CoreObjects/Scene.go b/engine/CoreObjects/Scene.go index bcb8c63..a945bec 100644 --- a/engine/CoreObjects/Scene.go +++ b/engine/CoreObjects/Scene.go @@ -1,5 +1,7 @@ package coreobjects +import rl "github.com/gen2brain/raylib-go/raylib" + type SceneManager struct { OverlayScene Scene SelectedScene Scene @@ -10,6 +12,7 @@ type Scene interface { Destroy() Update() Draw() + GetMousePosition() rl.Vector2 } func InitSceneManager() SceneManager { |
