performance

This commit is contained in:
silva guimaraes 2023-09-16 11:26:16 -03:00
parent 5f7c6f7b85
commit 2c2eaf9507

53
main.go
View file

@ -73,12 +73,14 @@ type emitter struct {
particleAmount int
}
var city *scene
func update_emitters() {
for _, e := range city.emitters {
e.update()
for i, e := range city.emitters {
if remainingParticles := e.update(); remainingParticles == 0 {
city.emitters[i] = city.emitters[len(city.emitters)-1]
city.emitters = city.emitters[:len(city.emitters)-1]
}
}
}
@ -97,7 +99,7 @@ func newEmitter(pos rl.Vector3, particleAmount int) *emitter {
direction = rl.Vector3Normalize(direction)
direction = rl.Vector3Scale(direction, 0.3 + rand.Float32()/3)
particle := particle{
lifetime: rl.GetTime() + 1,
lifetime: rl.GetTime() + 2,
speed: direction,
pos: pos,
}
@ -107,20 +109,34 @@ func newEmitter(pos rl.Vector3, particleAmount int) *emitter {
return &emitter
}
func (e *emitter) update() {
func (e *emitter) update() int {
gravity := rl.NewVector3(0, -0.02, 0)
for _, particle := range e.particles {
if rl.GetTime() > particle.lifetime {
continue
remainingParticles := 0
rl.BeginBlendMode(rl.BlendAdditive)
{
for _, particle := range e.particles {
if rl.GetTime() > particle.lifetime {
continue
}
particle.speed = rl.Vector3Add(particle.speed, gravity)
newPos := rl.Vector3Add(particle.pos, particle.speed)
if newPos.Y <= 0 {
particle.pos.Y = 0
} else {
particle.pos = newPos
}
rl.DrawCubeV(particle.pos, rl.NewVector3(.1, .1, .1), rl.Yellow)
remainingParticles += 1
}
particle.pos = rl.Vector3Add(particle.pos, particle.speed)
particle.speed = rl.Vector3Add(particle.speed, gravity)
rl.BeginBlendMode(rl.BlendAdditive)
{
rl.DrawSphere(particle.pos, 0.2, rl.Red)
}
rl.EndBlendMode()
}
rl.EndBlendMode()
return remainingParticles
}
// retona true caso projétil precise ser destruido
@ -130,12 +146,11 @@ func (p *projectile) isHit() bool {
p.pos = rl.Vector3Add(p.pos, p.speed)
if p.pos.Y < 0 {
city.emitters = append(city.emitters, newEmitter(p.pos, 100))
city.emitters = append(city.emitters, newEmitter(p.pos, 500))
for _, building := range city.buildings {
if dist := rl.Vector3Distance(p.pos, building.pos); dist < 10 {
building.causeDamage(3)
}
}
return true
}
@ -256,7 +271,7 @@ func (hb *healthBar) update() {
func newHealthBar(buildings []*building) *healthBar {
return &healthBar{
life: 3 * len(buildings),
life: buildingsHealth * len(buildings),
}
}
@ -266,7 +281,7 @@ func (b *building) causeDamage(damage int) {
}
b.animate = shakeBuilding(b)
b.life -= damage
fmt.Println("damage:", damage, "life:", b.life)
// fmt.Println("damage:", damage, "life:", b.life)
}
func newBuilding(x, z float32) *building {