I have a little game where you click on fireworks and blow them up. But it's only picking the most recently created firework entity. Example: 2 fireworks shoot up at a 10 loop delay between them. And you try to click on the second one but it doesn't explode . Click on the first one first then it explodes and then you can explode the second one.
Code:
Print "Loading Includes..."
Include "Includes/DevilParticleSystem.bb"
Include "includes/LIB_Juicy_fonts.bb"
Print "Setting up Graphics..."
Graphics3D 800,600,32
SetBuffer BackBuffer()
Print "Creating Types..."
ClearTextureFilters()
Type fire
Field xv#,yv#,zv#
Field s,score,r_ang#
End Type
Type part
Field xv#,yv#,zv#
Field s
End Type
Type em
Field ent
End Type
Print "Creating Variables..."
Global level=1,stage=1,stagetime,fm,cam,l,f_tex,tmp1,tmp2,s_50,s_100,score,num_fires,mouse
Const YV_DECREASE#=.005
Print "Init Game..."
cam=CreateCamera()
MoveEntity cam,0,20,-20
InitParticles(cam)
fm=CreateMesh()
surf=CreateSurface(fm)
v0=AddVertex(surf,0,0,0,0,2)
v1=AddVertex(surf,0,2,0,0,0)
v2=AddVertex(surf,2,2,0,2,0)
v3=AddVertex(surf,2,0,0,2,2)
AddTriangle(surf,v0,v1,v2)
AddTriangle(surf,v0,v2,v3)
HideEntity fm
f_tex=LoadTexture("media/firework.jpg",4)
ScaleTexture f_tex,MeshWidth(fm),MeshHeight(fm)
back=LoadSprite("backgrounds/skyline01.jpg")
MoveEntity back,0,20,-18
ScaleSprite back,2,2
score_spr=LoadSprite("media/score.png")
MoveEntity score_spr,-1.5,18.7,-18
ScaleSprite score_spr,.4,.4
score_font=JF_Load_Font("includes/PinkShadow.png")
mouse=LoadImage("media/pointer.png")
Print "Loading Sprites..."
LoadScoreSprites()
LoadParticles()
l=CreateLight()
AmbientLight 255,255,255
Print "Successful Load"
Cls
StageIntro(stage)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
While Not KeyDown(1)
U_Stage()
U_Fire()
U_Parts()
Cls
UpdateParticles()
UpdateWorld
RenderWorld
DrawImage mouse,MouseX(),MouseY()
Jf_Text(score_font,200,GraphicsHeight()-100,score)
Flip
Wend
FreeParticles()
End
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function U_Stage()
Select level
Case 1
Select stage
Case 1
If stagetime=0 Then CreateFire(-3,0,0,.02,.5,0,100)
If stagetime=100 Then CreateFire(3,0,0,-.02,.5,0,50)
If stagetime=200 Then CreateFire(-3,0,0,.08,.5,0,50)
If stagetime=250 Then CreateFire(-10,0,0,.03,.5,0,50)
If stagetime=500 Then CreateFire(10,0,0,-.04,.55,0,50)
If stagetime=600 Then CreateFire(10,0,0,-.04,.55,0,50)
If stagetime=700 Then CreateFire(0,0,0,0,.35,0,50)
If stagetime=700 Then CreateFire(11,0,0,-.04,.45,0,50)
If stagetime=700 Then CreateFire(-11,0,0,.04,.45,0,50)
If stagetime=800 Then CreateFire(-15,0,0,.09,.55,0,50)
If stagetime=880 Then CreateFire(5,0,0,-.09,.55,0,50)
If stagetime=960 Then CreateFire(-5,0,0,.09,.55,0,50)
If stagetime>1200 And num_fires=0 Then WinStage()
Case 2
If stagetime=10 Then CreateFire(0,0,0,0,.6,0,50)
If stagetime=100 Then CreateFire(-10,0,0,0,.5,0,50)
If stagetime=100 Then CreateFire(10,0,0,0,.5,0,50)
End Select
End Select
stagetime=stagetime+1
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function U_Fire()
For f.fire=Each fire
MoveEntity f\s,f\xv#,f\yv#,f\zv#
f\yv#=f\yv#-YV_DECREASE#
If MouseHit(1) Then
If CameraPick(cam,MouseX(),MouseY())=f\s Then
CreateExplosion(f\s)
If f\score=50 CreatePart(f\s,s_50,f\score)
If f\score=100 CreatePart(f\s,s_100,f\score)
HideEntity f\s
Delete f
num_fires=num_fires-1
EndIf
EndIf
Next
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function U_Parts()
For p.part=Each part
Next
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CreateExplosion(ent)
e.em=New em
e\ent=CreateSprite()
PositionEntity e\ent,EntityX(ent)+(MeshWidth(ent)/2),EntityY(ent)+(MeshHeight(ent)/2),EntityZ(ent)
SetEmitter(e\ent,tmp1)
SetEmitter(e\ent,tmp2)
HideEntity e\ent
Delete e
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function LoadParticles()
;Template1 - Smoke
tmp1 = CreateTemplate()
SetTemplateEmitterBlend(tmp1, 1)
SetTemplateInterval(tmp1, 1)
SetTemplateEmitterLifeTime(tmp1, 10)
SetTemplateParticleLifeTime(tmp1, 50, 65)
SetTemplateTexture(tmp1, "Media\Smoke.png", 2)
SetTemplateOffset(tmp1, -.1, .1, -1.1, -.9,0,0) ;-.1, .1)
SetTemplateVelocity(tmp1, -.1, .1, -.1, .1,0,0) ;-.01, .01)
SetTemplateRotation(tmp1, -3, 3)
SetTemplateAlpha(tmp1, .3)
SetTemplateAlphaVel(tmp1, True)
SetTemplateSize(tmp1, 1.5, 1.5, .7, 1.5)
;Smokefire
t0 = CreateTemplate()
SetTemplateEmitterBlend(t0, 3)
SetTemplateInterval(t0, 1)
SetTemplateParticlesPerInterval(t0, 3)
SetTemplateEmitterLifeTime(t0, 10)
SetTemplateParticleLifeTime(t0, 5, 10)
SetTemplateTexture(t0, "Media\Fire.jpg", 3)
SetTemplateOffset(t0, -.1, .1, -1.1, -.9,0,0); -.1, .1)
SetTemplateVelocity(t0, -.1, .1, -.1, .1,0,0); -.01, .01)
SetTemplateRotation(t0, -3, 3)
SetTemplateAlphaVel(t0, True)
SetTemplateSize(t0, .5, .5, .7, 1.5)
SetTemplateBrightness(t0, 3)
SetTemplateSubTemplate(tmp1, t0)
;Template2 - Explosion
tmp2 = CreateTemplate()
SetTemplateEmitterBlend(tmp2, 3)
SetTemplateInterval(tmp2, 1)
SetTemplateParticlesPerInterval(tmp2, 30)
SetTemplateEmitterLifeTime(tmp2, 1)
SetTemplateParticleLifeTime(tmp2, 70, 85)
SetTemplateTexture(tmp2, "Media\Spark.jpg", 3)
SetTemplateOffset(tmp2, -.2, .2, -.2, .2,0,0); -.2, .2)
SetTemplateVelocity(tmp2, -.1, .1, -.1, .2,0,0) ;-.1, .1)
SetTemplateAlignToFall(tmp2, True, 45)
SetTemplateGravity(tmp2, .0015)
SetTemplateAlphaVel(tmp2, True)
SetTemplateSize(tmp2, .45, .1)
SetTemplateColors(tmp2, $FF0000, $FF0000)
SetTemplateBrightness(tmp2, 8)
;Blue explosion
t0 = CreateTemplate()
SetTemplateEmitterBlend(t0, 3)
SetTemplateInterval(t0, 1)
SetTemplateParticlesPerInterval(t0, 30)
SetTemplateEmitterLifeTime(t0, 1)
SetTemplateParticleLifeTime(t0, 70, 85)
SetTemplateTexture(t0, "Media\Spark.jpg", 3)
SetTemplateOffset(t0, -.2, .2, -.2, .2,0,0); -.2, .2)
SetTemplateVelocity(t0, -.1, .1, -.1, .2,0,0); -.1, .1)
SetTemplateAlignToFall(t0, True, 45)
SetTemplateGravity(t0, .0015)
SetTemplateAlphaVel(t0, True)
SetTemplateSize(t0, .45, .1)
SetTemplateColors(t0, $0000FF, $0000FF)
SetTemplateBrightness(t0, 8)
SetTemplateSubTemplate(tmp2, t0)
;Yellow
t0 = CreateTemplate()
SetTemplateEmitterBlend(t0, 3)
SetTemplateInterval(t0, 1)
SetTemplateParticlesPerInterval(t0, 70)
SetTemplateEmitterLifeTime(t0, 1)
SetTemplateParticleLifeTime(t0, 40, 85)
SetTemplateTexture(t0, "Media\Spark.jpg", 3)
SetTemplateOffset(t0, -.2, .2, -.2, .2,0,0); -.2, .2)
SetTemplateVelocity(t0, -.05, .05, -.03, .1,0,0); -.05, .05)
SetTemplateGravity(t0, .00125)
SetTemplateAlphaVel(t0, True)
SetTemplateSize(t0, .3, .3)
SetTemplateBrightness(t0, 3)
SetTemplateSubTemplate(tmp2, t0)
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CreateFire(x#,y#,z#,xv#,yv#,zv#=0,score_addition)
f.fire=New fire
f\s=CopyEntity(fm)
f\xv#=xv#
f\yv#=yv#
f\zv#=zv#
f\score=score_addition
EntityTexture f\s,f_tex
PositionEntity f\s,x#,y#,z#-2
RotateEntity f\s,0,0,-f\xv#*200
EntityPickMode f\s,2
num_fires=num_fires+1
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CreatePart(ent,score_spr,add_to_score)
p.part=New part
p\s=CreateSprite()
PositionEntity p\s,EntityX(ent),EntityY(ent),EntityZ(ent)-.5
SetEmitter(p\s,score_spr)
HideEntity(p\s)
Delete p
score=score+add_to_score
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function FirePicked()
For f.fire=Each fire
If CameraPick(cam,MouseX(),MouseY())=f\s And MouseHit(1) Then Return f\s:Else Return 0
Next
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function LoadScoreSprites()
s_50 = CreateTemplate()
SetTemplateEmitterBlend(s_50, 1)
SetTemplateInterval(s_50, 5)
SetTemplateEmitterLifeTime(s_50, 5)
SetTemplateParticleLifeTime(s_50, 130, 145)
SetTemplateTexture(s_50, "Media\s_50.png", 2, 1)
SetTemplateOffset(s_50, -.3, .3, -.3, .3, -.3, .3)
SetTemplateVelocity(s_50, -.02, .02, -.02, -.04, -0.02, -0.07)
SetTemplateSize(s_50, 1, 1, 1, 1)
SetTemplateSizeVel(s_50, .01, 1)
SetTemplateAlpha(s_50, .9)
SetTemplateAlphaVel(s_50, True)
s_100 = CreateTemplate()
SetTemplateEmitterBlend(s_100, 1)
SetTemplateInterval(s_100, 5)
SetTemplateEmitterLifeTime(s_100, 5)
SetTemplateParticleLifeTime(s_100, 130, 145)
SetTemplateTexture(s_100, "Media\s_100.png", 2, 1)
SetTemplateOffset(s_100, -.3, .3, -.3, .3, -.3, .3)
SetTemplateVelocity(s_100, -.02, .02, -.02, -.04, -0.02, -0.07)
SetTemplateSize(s_100, 1, 1, 1, 1)
SetTemplateSizeVel(s_100, .01, 1)
SetTemplateAlpha(s_100, .9)
SetTemplateAlphaVel(s_100, True)
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function StageIntro(num$)
Local start,dir,ang#
FlushKeys()
FlushMouse()
inspr=LoadSprite("media/stage"+num$+".png",4)
MoveEntity inspr,0,20,-18.5
SpriteViewMode inspr,2
Repeat
start=start+1
If GetKey()<>0 Or start=400 Or GetMouse()<>0 Then Exit
If dir=1 Then ang#=ang#+.2
If dir=0 Then ang#=ang#-.2
If ang#<-3 Then dir=1
If ang#>3 Then dir=0
RotateEntity inspr,0,ang#,0
UpdateWorld
RenderWorld
Flip
Forever
HideEntity inspr
FlushMouse()
FlushKeys()
FreeEntity inspr
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function WinStage()
Local start,dir,ang#
FlushKeys()
FlushMouse()
clspr=LoadSprite("media/stage_cleared.png",4)
MoveEntity clspr,0,20,-18.5
SpriteViewMode clspr,2
Repeat
start=start+1
If GetKey()<>0 Or start=400 Or GetMouse()<>0 Then Exit
If dir=1 Then ang#=ang#+.2
If dir=0 Then ang#=ang#-.2
If ang#<-3 Then dir=1
If ang#>3 Then dir=0
RotateEntity clspr,0,ang#,0
UpdateWorld
RenderWorld
Flip
Forever
HideEntity clspr
FlushMouse()
FlushKeys()
FreeEntity clspr
stagetime=0
stage=stage+1
End Function
If you need the media, just say so. Though its just some basic text and sprites.
|