tons of dynamic arrays in my dbpro ironinfantry download - your code snip should blast away all data... and i dont think that would compile ... maybe - but looks like a redeclaration - I think redim might be the command to use ... but...
here's the IIBullet.dba code from IronInfantryDBPro below - it has adding and deleting from an array dynamically.
`-------------------------------------------------------------------------------------------------
InitBullets:
`-------------------------------------------------------------------------------------------------
#CONSTANT cnMaxBullets=100
`#CONSTANT cnTankShellSpeedMult=4.2 `2.1
type rtBullet
rC as rtXYZ
rA as rtXYZ
Damage#
Speed#
MaxTravel#
Travel#
iShooterType ` Tank, Man, Heli, whatever
iShooterObjectID
iShooterIndex ` Of the tank, Heli whatever
iManIndex ` In theory - Equipment is usually driven by "men" so this is redundant if the shooter is a man
` but makes sense to say which GUY (regardless of the offending or firing vehicle)
` Note - for certain AI situations, there may not be a man at all in a vehicle (literally speaking)
objBullet
endtype
global dim garBullet() as rtBullet
type rtBulletInfo
iTimeLastUpdate
iTimeDif
endtype
global grBulletInfo as rtBulletInfo
grBulletInfo.iTimeLastUpdate=TimeR()
grBulletInfo.iTimeDif=1
return
`-------------------------------------------------------------------------------------------------
`-------------------------------------------------------------------------------------------------
Function FireBullet(p_X#,p_Y#, p_Z#, p_XA#,p_YA#, p_ZA#,p_Damage#, p_Speed#, p_MaxTravel#, p_iShooterType, p_iObjectID,p_iIndex, p_iManIndex)
Array INSERT AT BOTTOM garBullet()
INDEX = Array Count(garBullet(0))
garBullet(INDEX).Damage#=p_Damage#
garBullet(INDEX).Speed#=p_Speed#
garBullet(INDEX).MaxTravel#=p_MaxTravel#
garBullet(INDEX).Travel#=0
garBullet(INDEX).iShooterType=p_iShooterType ` Tank, Man, Heli, whatever
garBullet(INDEX).iShooterObjectID=p_iObjectID ` Prevent Shooting Self
garBullet(INDEX).iShooterIndex=p_iIndex ` Of the tank, Heli whatever
garBullet(INDEX).iManIndex=p_iManIndex ` In theory - Equipment is usually driven by "men" so this is redundant if the shooter is a man
` but makes sense to say which GUY (regardless of the offending or firing vehicle)
garBullet(INDEX).rC.X#=p_X#
garBullet(INDEX).rC.Y#=p_Y#
garBullet(INDEX).rC.Z#=p_Z#
garBullet(INDEX).rA.X#=p_XA#
garBullet(INDEX).rA.Y#=p_YA#
garBullet(INDEX).rA.Z#=p_ZA#
garBullet(INDEX).objBullet=pvtGetNewID(cnObject)
` make object box garBullet(INDEX).objBullet,.5,.5,p_MaxTravel#
` make object box garBullet(INDEX).objBullet,.1,.1,50
make object box garBullet(INDEX).objBullet,.1,.1,5
set object emissive garBullet(INDEX).objBullet, rgb(255,255,0)
position object garBullet(INDEX).objBullet,p_X#, p_Y#, p_Z#
rotate object garBullet(INDEX).objBullet,p_XA#, p_YA#, p_ZA#
` move object garBullet(INDEX).objBullet,p_MaxTravel#/2
endfunction
`-------------------------------------------------------------------------------------------------
`-------------------------------------------------------------------------------------------------
function UpdateBullets()
`-------------------------------------------------------------------------------------------------
`repeat
grBulletInfo.iTimeDif=(grClock.iTimer-grBulletInfo.iTimeLastUpdate)
grBulletInfo.iTimeLastUpdate=grClock.iTimer
`show object gc.objAngleFinder
for i = 0 to Array Count(garBullet(0))
bHitSomething=false
Tenth#=(garBullet(i).Speed#* grBulletInfo.iTimeDif )/ 10
position object gc.objAngleFinder, garBullet(i).rC.X#, garBullet(i).rC.Y#,garBullet(i).rC.Z#
rotate object gc.objAngleFinder,garBullet(i).rA.X#, garBullet(i).rA.Y#,garBullet(i).rA.Z#
for t =0 to Tenth#
OldX#=object position x(gc.objAngleFinder)
OldY#=object position y(gc.objAngleFinder)
OldZ#=object position z(gc.objAngleFinder)
move object gc.objAngleFinder,Tenth#
inc garBullet(i).Travel#,Tenth#
garBullet(i).rC.X#=object position x(gc.objAngleFinder)
garBullet(i).rC.Y#=object position y(gc.objAngleFinder)
garBullet(i).rC.Z#=object position z(gc.objAngleFinder)
garBullet(i).rA.X#=object angle x(gc.objAngleFinder)
garBullet(i).rA.Y#=object angle y(gc.objAngleFinder)
garBullet(i).rA.Z#=object angle z(gc.objAngleFinder)
position object garBullet(i).objBullet,garBullet(i).rC.X#, garBullet(i).rC.Y#, garBullet(i).rC.Z#
objCollide = SC_rayCast ( 0, OldX#, OldY#, OldZ#, garBullet(i).rC.X#, garBullet(i).rC.y#, garBullet(i).rC.z#, garBullet(i).iShooterObjectID)
if objCollide=0
` check for Ground Hit
GY#=GroundHeight#(garBullet(i).rC.X#,garBullet(i).rC.z#)
if garBullet(i).rC.Y#<=GY#
if garBullet(i).Damage#>10
MakeExplosion(garBullet(i).rC.X#,GY#,garBullet(i).rC.Z#, 15, 15, 15) ` was scaled 17 when tank scale 100
endif
bHitSomething=true
exit
endif
else
garBullet(i).rC.X#=SC_getStaticCollisionX()
garBullet(i).rC.Y#=SC_getStaticCollisionY()
garBullet(i).rC.Z#=SC_getStaticCollisionZ()
`if garBullet(i).iShooterObjectID<>objCollide
` Check for Tank Hit
`GY#=GroundHeight#(garBullet(i).rC.X#,garBullet(i).rC.z#)
for w=0 to cnMaxTanks
if (garTank(w).objHighPoly=objCollide)
`if garBullet(i).Damage#>10
` MakeExplosion(garBullet(i).rC.X#,garBullet(i).rC.Y#,garBullet(i).rC.Z#, 15, 15, 15) ` was scaled 17 when tank scale 100
`endif
DamageTank(w,garBullet(i).Damage#)
bHitSomething=true
exit
endif
next w
` Check for Heli Hit
for w=0 to cnMaxHelis
if (garHeli(w).objHeli=objCollide)
MakeExplosion(garBullet(i).rC.X#,garBullet(i).rC.Y#,garBullet(i).rC.Z#, 10, 10, 10) ` was scaled 17 when tank scale 100
DamageHeli(w,garBullet(i).Damage#)
`SC_SetObjectcollisionOff gaiTankShell(i)
bHitSomething=true
exit
endif
next w
` Check for Infantry Hit
for w=0 to cnMaxMen
if (garMan(w).objHighPolyIdle=objCollide)
`MakeExplosion(garBullet(i).rC.X#,garBullet(i).rC.Y#,garBullet(i).rC.Z#, 15, 15, 15) ` was scaled 17 when tank scale 100
DamageMan(w,garBullet(i).Damage#)
bHitSomething=true
exit
endif
next w
`endif
endif
if not bHitSomething
bHitSomething=((X#<0) or (X#>grTerrain.RealSize.X#) or (z#<0) or (z#>grTerrain.RealSize.Z#))
` But no explosion - just out of bounds
exit
endif
`If (grCamera.iPlayerView=cnPlayerCam_ChaseShell) and (grCamera.iMode=cnCameraMode_Tank)
` if sound playing(grSound.sndWind1)=0
` loop sound grSound.sndWind1
` endif
` Set camera to object orientation gc.objAngleFinder
` position camera X#,Y#,Z#
` position sound grSound.sndWind1,x#,y#,z#
` Move camera -10.5
`endif
if bHitSomething
garBullet(i).Travel#=garBullet(i).MaxTravel#+1 ` Flags as "all Done"
exit
endif
next t
if bHitSomething
garBullet(i).Travel#=garBullet(i).MaxTravel#+1 ` Flags as "all Done"
endif
next i
if ARRAY COUNT (garBullet(0))>-1
`cls
`Print "We Have a Bullet":sync:wait key
i=0
repeat
`print "Begin Loop. Bullet Count:";ARRAY COUNT (garBullet(0))
`set cursor 1,1
`print "Our current Bullet:";i;" Traveled:";garBullet(i).Travel#;" MAx Travel:";garBullet(i).MaxTravel#
`sync:wait key
if garBullet(i).Travel#>=garBullet(i).MAxTravel#
`print "We Deleting Bullet:";i
`sync:wait key
delete object garBullet(i).objBullet
ARRAY DELETE ELEMENT garBullet(0), i
`print "Deleted Bullet. Bullet Count:";ARRAY COUNT (garBullet(0)):sync:wait key
else
`print "We ARE NOT REMOVING Bullet:";i
`sync:wait key
inc i
endif
until ARRAY COUNT (garBullet(0))<i
`sync
endif
`until ARRAY COUNT (garBullet(0))=-1
endfunction
`-------------------------------------------------------------------------------------------------