Skip to content

Commit

Permalink
CollisionArea agregado para facilitar la deteccion de colisiones en u…
Browse files Browse the repository at this point in the history
…na area especifica sin cambiar la posicion de el mismo 🤦‍♀️
  • Loading branch information
Troxsoft committed Dec 7, 2023
1 parent 37e295f commit cc926d9
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 2 deletions.
43 changes: 43 additions & 0 deletions engine/area.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package engine

type CollisionArea struct {
position Position
size Size
gob *GameObject
sc *Scene
onCollision func(*CollisionArea, *GameObject, *GameObjectEvent)
debugColor *Color
}

func (p *CollisionArea) Scene() *Scene {
return p.sc
}
func (p *CollisionArea) Size() Size {
return p.size
}
func (p *CollisionArea) Position() Position {
return p.position
}
func NewCollisionArea(scene *Scene, pos Position, siz Size) *CollisionArea {
p := &CollisionArea{
position: pos,
size: siz,
gob: _newGameObjectUnregister(pos, siz, SHAPE_RECTANGLE, len(scene.GameObjectsObjects())+1),
sc: scene,
onCollision: func(coll *CollisionArea, g *GameObject, goe *GameObjectEvent) {

},
debugColor: nil,
}
scene.areas = append(scene.areas, p)
return p
}
func (p *CollisionArea) SetDebugColor(color Color) {
p.debugColor = &color
}
func (p *CollisionArea) QuitDebugColor() {
p.debugColor = nil
}
func (p *CollisionArea) SetOnCollision(c func(*CollisionArea, *GameObject, *GameObjectEvent)) {
p.onCollision = c
}
32 changes: 30 additions & 2 deletions engine/scene.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ type Scene struct {
//button
ui_button []*UiButton
camera *Camera
areas []*CollisionArea
}

func (s *Scene) IsCurrent() bool {
Expand Down Expand Up @@ -80,14 +81,17 @@ func (s *Scene) Camera() *Camera {
func (s *Scene) SetCamera(c *Camera) {
s.camera = c
}

func (s *Scene) CollisionsAreas() []*CollisionArea {
return s.areas
}
func NewScene() *Scene {
return &Scene{
instancesGameObjects: []*GameObject{},
ui_text: []*UiText{},
ui_colorZone: []*UiColorZone{},
ui_button: []*UiButton{},
camera: nil,
areas: []*CollisionArea{},
}
}
func SetScene(s *Scene) {
Expand All @@ -97,6 +101,7 @@ func GetCurrentScene() *Scene {
return scene_32445
}
func (s *Scene) Draw() {

if s.camera != nil {
rl.ClearBackground(ConvertColor(colorBackColor))
//rl.DrawText("ano", 30, 100, 29, rl.Brown)
Expand All @@ -117,15 +122,38 @@ func (s *Scene) Draw() {

}
rl.BeginMode2D(s.camera.camera)

for i := 0; i < len(s.areas); i++ {
p5 := s.areas[i].gob.collision.OnCollision()
var xbsx *GameObjectEvent = nil
if p5 != nil {
xbsx = NewGameObjectEvent(p5)
}
s.areas[i].onCollision(s.areas[i], p5, xbsx)
if s.areas[i].debugColor != nil {
rl.DrawRectangle(int32(s.areas[i].position.X), int32(s.areas[i].position.Y), int32(s.areas[i].size.W), int32(s.areas[i].size.H), ConvertColor(*s.areas[i].debugColor))
}
}
_update()

} else {
rl.ClearBackground(ConvertColor(colorBackColor))

for i := 0; i < len(s.ui_colorZone); i++ {
//fmt.Println(rl.IsK)
s.ui_colorZone[i].Draw()

}
for i := 0; i < len(s.areas); i++ {
p5 := s.areas[i].gob.collision.OnCollision()
var xbsx *GameObjectEvent = nil
if p5 != nil {
xbsx = NewGameObjectEvent(p5)
}
s.areas[i].onCollision(s.areas[i], p5, xbsx)
if s.areas[i].debugColor != nil {
rl.DrawRectangle(int32(s.areas[i].position.X), int32(s.areas[i].position.Y), int32(s.areas[i].size.W), int32(s.areas[i].size.H), ConvertColor(*s.areas[i].debugColor))
}
}
_update()
for i := 0; i < len(s.ui_text); i++ {
//fmt.Println(rl.IsK)
Expand Down
44 changes: 44 additions & 0 deletions examples/collArea.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package main

import (
"fmt"

e "github.com/Troxsoft/Furia2D-Engine/engine"
)

var obj *e.GameObject
var area *e.CollisionArea

func main() {
e.InitGame("welcome to Furia2D-Engine :)", e.NewSize(500, 400), func(ge *e.GameEvent) {
area = e.NewCollisionArea(e.GetCurrentScene(), e.NewPos(100, 100), e.NewSize(200, 200))
area.SetDebugColor(e.BROWN)
area.SetOnCollision(func(a *e.CollisionArea, g *e.GameObject, goe *e.GameObjectEvent) {
if g != nil {
fmt.Println("aña")
}
})
obj, _ = e.CreateGameObject("you", e.SHAPE_RECTANGLE, e.NewSize(100, 100), e.NewPosition(0, 0))
e.NewCamera(e.NewPosition(0, 0), e.NewPosition(0, 0))
h, _ := e.CreateGameObject("j", e.SHAPE_RECTANGLE, e.NewSize(20, 20), e.NewPosition(240, 100))
h.Instance(e.GetCurrentScene(), nil)
obj = obj.Instance(e.GetCurrentScene(), nil)
e.GetCurrentScene().SetCamera(e.NewCamera(e.NewPosition(0, 0), e.NewPosition(0, 0)))

},
func(ge *e.GameEvent) {
e.GetCurrentScene().Camera().SetTarget(e.NewPosition(obj.Position().X-250, obj.Position().Y-200))
if ge.IsKeyDown(ge.KeyRight) {
obj.MoveTo(e.NewPosition(obj.Position().X+5, obj.Position().Y))
}
if ge.IsKeyDown(ge.KeyDown) {
obj.MoveTo(e.NewPosition(obj.Position().X, obj.Position().Y+5))
}
if ge.IsKeyDown(ge.KeyUp) {
obj.MoveTo(e.NewPosition(obj.Position().X, obj.Position().Y-5))
}
if ge.IsKeyDown(ge.KeyLeft) {
obj.MoveTo(e.NewPosition(obj.Position().X-5, obj.Position().Y))
}
})
}

0 comments on commit cc926d9

Please sign in to comment.