summaryrefslogtreecommitdiff
path: root/engine/CoreObjects/DynamicObject.go
diff options
context:
space:
mode:
authorPhyscik <mynameisgennadiy@vk.com>2026-01-29 02:55:19 +0500
committerPhyscik <mynameisgennadiy@vk.com>2026-01-29 02:55:19 +0500
commit9c10e3ab194115f50f0d67044ef34d386be7fa9a (patch)
tree87f8cee46e734c2dea0cf55421e545a3f217afb4 /engine/CoreObjects/DynamicObject.go
parentbc11ae4b42547ace656381fb0ed0b3604350fcb1 (diff)
Dynamic objects overlay
Diffstat (limited to 'engine/CoreObjects/DynamicObject.go')
-rw-r--r--engine/CoreObjects/DynamicObject.go76
1 files changed, 68 insertions, 8 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
}