summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/Components/Player.go6
-rw-r--r--engine/Components/ResourceManager.go1
-rw-r--r--engine/Components/World.go14
-rw-r--r--engine/CoreObjects/DynamicObject.go76
-rw-r--r--engine/CoreObjects/GameObject.go2
-rw-r--r--engine/CoreObjects/OverlayScene.go4
-rw-r--r--engine/CoreObjects/Scene.go3
-rw-r--r--engine/Settings/State.go2
8 files changed, 94 insertions, 14 deletions
diff --git a/engine/Components/Player.go b/engine/Components/Player.go
index c06820e..fe8c5ef 100644
--- a/engine/Components/Player.go
+++ b/engine/Components/Player.go
@@ -89,12 +89,12 @@ func (base *Player) Draw() {
// Centers the camera center to the player
func (base *Player) SnapCamera(camera *rl.Camera2D) {
var offset = rl.Vector2 {
- X: float32(base.Texture.Width) / 2,
+ X: float32(base.Texture.Width) / 2,
Y: float32(base.Texture.Height) / 2,
}
camera.Target = rl.Vector2Add(base.Position, offset)
- camera.Offset.X = float32(int32(rl.GetScreenWidth() / 2))
- camera.Offset.Y = float32(int32(rl.GetScreenHeight() / 2))
+ camera.Offset.X = float32(rl.GetScreenWidth()) / 2
+ camera.Offset.Y = float32(rl.GetScreenHeight()) / 2
}
// If the player model size doesn't align with the sprite this function will
diff --git a/engine/Components/ResourceManager.go b/engine/Components/ResourceManager.go
index cbccf5f..b33acc0 100644
--- a/engine/Components/ResourceManager.go
+++ b/engine/Components/ResourceManager.go
@@ -35,6 +35,7 @@ func (base *ResourceManager) RegisterObject(PackageName string, obejctName strin
if _, exists := base.objects[displayName]; exists {
return fmt.Errorf("Failed to register the obejct: another obejct with that name already exists")
}
+ new.PrototypeName = displayName
base.objects[displayName] = new
return nil
}
diff --git a/engine/Components/World.go b/engine/Components/World.go
index 0c322ba..26c1a83 100644
--- a/engine/Components/World.go
+++ b/engine/Components/World.go
@@ -27,6 +27,9 @@ type World struct {
func (base *World) Create(manager coreobjects.SceneManager) {
base.Manager = manager
base.Player.Init(manager)
+ for _, v := range base.StaticObjects {
+ v.Init(manager)
+ }
base.layersStatic = layering{}
base.generateStaticLayers()
}
@@ -36,6 +39,9 @@ func (base *World) Destroy() {
}
func (base *World) Update() {
+ for _, v := range base.StaticObjects {
+ v.Update()
+ }
base.Player.Update()
base.Player.SnapCamera(base.Camera)
base.handleZoom()
@@ -68,7 +74,10 @@ func (base *World) Draw() {
for _, v := range base.Floor {
v.Draw()
}
+ base.drawObjects()
+}
+func (base *World) drawObjects() {
var playerDrawn = false
var layer = base.layersStatic.firstLayer
var i = 0
@@ -78,7 +87,6 @@ func (base *World) Draw() {
}
if !playerDrawn && base.Player.Position.Y < layer.Index {
playerDrawn = true
- // fmt.Printf("Player drawn at layer %d\n", i)
base.Player.Draw()
}
for _, v := range layer.Objects {
@@ -99,6 +107,10 @@ func (base *World) generateStaticLayers() {
}
}
+func (base *World) GetMousePosition() rl.Vector2 {
+ return rl.GetScreenToWorld2D(rl.GetMousePosition(), *base.Camera)
+}
+
// The single texture drawn at level 0 of the world
type FloorTile struct {
Position rl.Vector2
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 {
diff --git a/engine/Settings/State.go b/engine/Settings/State.go
index 1db8024..94ad2a5 100644
--- a/engine/Settings/State.go
+++ b/engine/Settings/State.go
@@ -6,5 +6,5 @@ type GlobalState struct {
}
var State = GlobalState {
- DrawColliders: true,
+ DrawColliders: false,
}