forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Не могу разобраться с TYPE (http://forum.boolean.name/showthread.php?t=7613)

Sashka007 10.01.2009 20:33

Не могу разобраться с TYPE
 
вот мой исходный код, в первом нормально все:
Код:

Include "AShadowBBinclude/fps.bb"
Include "AShadowBBinclude/Ashadow.bb"

set = ReadFile("media\config.ini")
with = ReadLine(set)
heith = ReadLine(set)
bbb = ReadLine(set)
www = ReadLine(set)
CloseFile (set)

AGraphics3D with,heith,bbb,www
SetBuffer BackBuffer()
Global fntArial=LoadFont("Comic San MS",16,True)
PostProcessInit()
CreatePixelDistortion()
SetBumpShader  0, 0.15
SoftSelfShading=1


Type vehicles

Field inifile
Field loadpath$
Field loadpath_p$
Field loadwheelpath$
Field mass#
Field xweel#
Field zweel#
Field yweelfr#
Field yweelbac#
Field radius#
Field susp#
Field rest#
Field damping#
Field angfriction#
Field friction#
Field speed#
Field motor#
Field maxspeed#
Field smotorpth$
Field oborot#
Field accel
Field maxoborot#
Field trans
Field maxtrans
Field gas#

Field smotor
Field car_mesh
Field car_body
Field car_phys_mesh
Field Wheel_fr1_body
Field Wheel_fr1_mesh
Field Wheel_fr2_body
Field Wheel_fr2_mesh
Field Wheel_bac1_body
Field Wheel_bac1_mesh
Field Wheel_bac2_body
Field Wheel_bac2_mesh

End Type

;--------------------------------------create sky----------------------------------------------------
sky = CreateSphere(8)
skytex = LoadTexture("media\sky\sky.jpg")
EntityTexture sky, skytex
ScaleEntity sky,10000,10000,10000
FlipMesh sky 
EntityFX sky,1+8
RotateEntity sky,0,180,0

Type obl
Field obj
End Type

meshtt =  CreateSphere(20)
ScaleMesh meshtt,8000,8000,8000
PositionMesh meshtt,0,-3000,0
EntityAlpha meshtt,0
EntityShininess meshtt,1 

        For scount=1 To CountSurfaces(meshtt)
                surface = GetSurface(meshtt,scount)
                numverts=CountVertices(surface)-1
                For i=40 To numverts               
                        x#=VertexX(surface,i)
                        y#=VertexY(surface,i)
                        z#=VertexZ(surface,i)
                        tempball.obl = New obl
                        tempball\obj = LoadMesh("t.b3d",meshtt)
                        ddd = LoadTexture("media\sky\cloud2.jpg",2+1)
                        TextureBlend ddd,3
                        EntityTexture tempball\obj, ddd
                        EntityFX tempball\obj,1
                        bl#=Rnd(0,0.1)
                        EntityAlpha tempball\obj,bl#
                        ScaleEntity tempball\obj,70,70,70
                        PositionEntity tempball\obj,x#,y#,z#
                Next
        Next

;--------------------------------create water----------------------------------------
gradtex= LoadTexture("gradW.jpg", 128+2);
tex=LoadTexture("Wbump.jpg",9)
ScaleTexture tex, 0.005,0.005

WaterState\X=-5000
WaterState\Y=0
WaterState\Z=-5000
WaterState\ScaleX = 10000
WaterState\ScaleY = 10000
WaterState\ScaleZ = 10000

WaterState\ReflectSizeW = 256
WaterState\ReflectSizeH = 256

WaterState\WaterColorR = 255
WaterState\WaterColorG = 255
WaterState\WaterColorB = 255

If Gradient WaterState\GradientCubeMap = gradtex

WaterState\RefractTexture = 0

If BUMPENVMAP_SUPPORT
WaterState\BumpTexture = tex
WaterState\BumpPower= 0.1
WaterState\Reflective=1
WaterState\BumpReflectOFF=0
WaterState\UnderWaterReflective=1
WaterState\Refractive=1
Else
WaterState\BumpTexture = 0
WaterState\BumpPower= 0
WaterState\Reflective=1
WaterState\UnderWaterReflective=1
WaterState\Refractive=0
EndIf

WaterPlane=ACreateRenderWater (1, WaterState)
uwt = CreatePlane()
PositionEntity uwt,0,-0.1,0
EntityAlpha uwt,0.7
EntityColor uwt,7,166,248
;Lights
        light=CreateSLight(1,500)
        RotateEntity light,60,95,0

;PX
PxCreateWorld(0, "")
pxSetGravity(0,-40,0)


level = ALoadMesh ("media\map\map.b3d")
PositionMesh level, 0,2,0
EntityAlpha level,0
surf = GetSurface (level,1)
in_mesh=BodyCreateMesh%(level)
FreeEntity level

level2 = ALoadMesh ("media\map\map2.b3d")
PositionMesh level2, 0,2,0
pxBodySetEntity(level2 , in_mesh)
EntityType level2,2

most = ALoadMesh ("media\map\most.b3d")
PositionMesh most, 0,1,0
in_most=BodyCreateMesh%(most)
pxBodySetEntity(most , in_most)
FreeEntity most

most2 = ALoadMesh ("media\map\most2.b3d")
PositionMesh most2, 0,1,0
EntityFX most2,1
pxBodySetEntity(most2 , in_most)
EntityType most2,2

;|--------------------------------------------------------------------------------------|
;|--------------------------------------------------------------------------------------|
;|-----------create_vehicles------------------------------------------------------|
;|--------------------------------------------------------------------------------------|
;|--------------------------------------------------------------------------------------|
;загрузка информации о транспорте
car.vehicles = New vehicles
car\inifile = ReadFile("media\HEMTT2\config.ini")

car\loadpath$ = ReadLine(car\inifile)
car\loadpath_p$ = ReadLine(car\inifile)
car\loadwheelpath$ = ReadLine(car\inifile)
car\mass# = ReadLine(car\inifile) ;масса машины
car\xweel# = ReadLine(car\inifile) ;позиция колес по оси Х от тела машины
car\zweel# = ReadLine(car\inifile)  ;позиция колес по оси Z от тела машины
car\yweelfr# = ReadLine(car\inifile) ;позиция передних колес по оси Y от тела машины
car\yweelbac# = ReadLine(car\inifile) ;позиция задних колес по оси Y от тела машины
car\radius# = ReadLine(car\inifile) ;радиус физических колес
car\susp# = ReadLine(car\inifile) ;длина подвески
car\rest# = ReadLine(car\inifile) ;мягкость подвески
car\damping# = ReadLine(car\inifile) ;пружинность подвески
car\angfriction# = ReadLine(car\inifile) ;трение при повороте
car\friction# = ReadLine(car\inifile) ;трение не в повороте
car\speed# = ReadLine(car\inifile) ;начальная скорость
car\motor# = ReadLine(car\inifile) ;ускороение
car\maxspeed# = ReadLine(car\inifile) ;максимальная скорость
car\smotorpth$ = ReadLine(car\inifile)
car\oborot# = ReadLine(car\inifile)
car\accel = ReadLine(car\inifile)
car\maxoborot# = ReadLine(car\inifile) ;обороты
car\trans = ReadLine(car\inifile)
car\maxtrans = ReadLine(car\inifile)
car\gas# = 400
CloseFile (car\inifile)


car\smotor = Load3DSound(car\smotorpth$)

;---------Create car------------
car\car_mesh = ALoadMesh(car\loadpath$)
ScaleMesh car\car_mesh,1.1,1.1,1.1
RotateEntity car\car_mesh ,90,0,0
PositionEntity car\car_mesh ,0,8,0
EntityShininess car\car_mesh,1

car\car_phys_mesh = ALoadMesh(car\loadpath_p$)
ScaleMesh car\car_phys_mesh,1.1,1.1,1.1
RotateEntity car\car_phys_mesh ,0,90,0
PositionEntity car\car_phys_mesh ,0,8,0
EntityAlpha car\car_phys_mesh,0

car\car_body = BodyCreateHull(car\car_phys_mesh, car\mass#)
pxBodySetPosition (car\car_body, 2000, 400 ,0)
pxBodySetRotation (car\car_body, 0, 0, 0)
pxBodySetCMassLocalPosition(car\car_body, 0, -3, 0)

;------- front wheel-----------
car\Wheel_fr1_body = pxWheelAddToBody(car\car_body, -car\xweel#, car\zweel#, car\yweelfr#)
pxWheelSetRadius(car\Wheel_fr1_body,  car\radius#)
pxWheelSetSuspension(car\Wheel_fr1_body,  car\susp#, car\rest#,  0.5)
car\wheel_fr1_mesh = ALoadMesh (car\loadwheelpath$)
RotateMesh car\wheel_fr1_mesh,0,180,0

car\Wheel_fr2_body = pxWheelAddToBody(car\car_body, car\xweel#,car\zweel#,car\yweelfr#)
pxWheelSetRadius(car\Wheel_fr2_body,  car\radius#)
pxWheelSetSuspension(car\Wheel_fr2_body,  car\susp#, car\rest#,  car\damping#)
car\wheel_fr2_mesh = ALoadMesh (car\loadwheelpath$)

;-------back wheel------------
car\Wheel_bac1_body = pxWheelAddToBody(car\car_body, -car\xweel#, car\zweel#, car\yweelbac#)
pxWheelSetRadius(car\Wheel_bac1_body, car\radius#)
pxWheelSetSuspension(car\Wheel_bac1_body,  car\susp#, car\rest#,  car\damping#)
car\wheel_bac1_mesh = ALoadMesh(car\loadwheelpath$)
RotateMesh car\wheel_bac1_mesh,0,180,0

car\Wheel_bac2_body = pxWheelAddToBody(car\car_body, car\xweel#, car\zweel#, car\yweelbac#)
pxWheelSetRadius(car\Wheel_bac2_body,  car\radius#)
pxWheelSetSuspension(car\Wheel_bac2_body,  car\susp#, car\rest#,  car\damping#)
car\wheel_bac2_mesh =  ALoadMesh (car\loadwheelpath$)

pxWheelSetFrictionToSide(car\Wheel_fr1_body, car\angfriction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\angfriction#)
pxWheelSetFrictionToSide(car\Wheel_bac1_body, car\friction#)
pxWheelSetFrictionToSide(car\Wheel_bac2_body, car\friction#)

;Camera
d=0
piv = CreatePivot()
camera = CreateCamera(piv)
CameraClsColor camera,6,59,255
PositionEntity camera,0,0,-30
CameraRange camera,1,100000
CreateGlow camera, 130, 150 ,.3,0.3;CreateGlow camera, 200, 150 ,.35,.8
Ref_Glow_ON = 1
EntityType camera,1
EntityRadius camera,2

;#############
hero = CreateSphere()
PositionEntity hero,2000,200,0
EntityType hero,1
lister = CreateListener(camera,0.2,0.2,0.2)
LoopSound(car\smotor)
pmotor = EmitSound(car\smotor,car\car_mesh)

Tahometr=LoadImage("media\spidom.bmp")
MaskImage tahometr,46,32,0
allert = LoadImage("media\allert.bmp")
allertt = LoadImage("media\allert.bmp")

Collisions 1,2,2,3
;Main Loop
Repeat

pt#=pt#+.0005
PositionTexture tex, pt#, pt#

TurnEntity meshtt,0.05,0.05,0.05
For tempball.obl = Each obl
PointEntity tempball\obj,camera

If EntityY(tempball\obj)<-50 Then
HideEntity tempball\obj
Else
ShowEntity tempball\obj
EndIf
Next

If d = 0
If EntityCollided(hero,2)
MoveEntity hero,0,-0.5,0
Else
MoveEntity hero,0,-2,0
EndIf

PositionEntity piv,EntityX(hero),EntityY(hero)+5,EntityZ(hero)
 mxs#=-MouseXSpeed()/4
 mys#=MouseYSpeed()/4
 mxa#=mxa#+mxs#
 mya#=mya#+mys#
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity piv,mya,mxa,0
RotateEntity hero,0,mxa,0
PositionEntity camera,0,0,0
If KeyDown(200) MoveEntity hero,0,0,1
If KeyDown(208) MoveEntity hero,0,0,-1
If KeyDown(205) MoveEntity hero,1,0,0
If KeyDown(203) MoveEntity hero,-1,0,0
EndIf




If d
PositionEntity hero ,EntityX(car\car_mesh),EntityY(car\car_mesh),EntityZ(car\car_mesh)
If Not EntityCollided(camera,2)
PositionEntity camera,0,0,-30
EndIf
 mxs#=-MouseXSpeed()/4
 mys#=MouseYSpeed()/4
 mxa#=mxa#+mxs#
 mya#=mya#+mys#
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity piv,mya,mxa,0
PositionEntity piv,EntityX(car\car_mesh),EntityY(car\car_mesh),EntityZ(car\car_mesh)
RotateEntity sky,1,1,1
PositionEntity sky,EntityX(car\car_mesh),EntityY(car\car_mesh),EntityZ(car\car_mesh)
PositionEntity meshtt,EntityX(car\car_mesh),EntityY(car\car_mesh),EntityZ(car\car_mesh)




If KeyDown (205) Then
ang = ang+2
pxWheelSetFrictionToSide(car\Wheel_fr1_body, car\angfriction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\angfriction#)
ElseIf  ang>0 Then
ang=ang-2
EndIf
If KeyDown (203) Then
ang = ang-2
pxWheelSetFrictionToSide(car\Wheel_fr1_body, car\angfriction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\angfriction#)
ElseIf  ang<0 Then
ang=ang+2
EndIf

If ang=0 Then
pxWheelSetFrictionToSide(car\Wheel_fr1_body,car\friction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\friction#)
EndIf

If motor<0 Then
pxWheelSetFrictionToSide(car\Wheel_fr1_body, car\friction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\friction#)
EndIf


If KeyDown (200) Then
If car\gas>0
car\speed# = car\speed#+car\oborot#/600
car\gas# = car\gas# - 0.005
EndIf
 ElseIf  car\speed#>0 Then
car\speed#=car\speed#-car\oborot#/1000
        pxWheelSetBrakeTorque(car\wheel_bac1_body,  1000)
        pxWheelSetBrakeTorque(car\wheel_bac2_body,  1000)
 EndIf
If KeyDown (208) Then
car\speed# = car\speed#-car\oborot#/600
car\gas# = car\gas# - 0.005
 ElseIf  car\speed#<0 Then
car\speed#=car\speed#+car\motor#
 EndIf

If car\speed#>car\maxspeed# car\speed# = car\maxspeed#
If car\speed#<-car\maxspeed# car\speed#= -car\maxspeed#

If KeyDown (200) Then
car\oborot# = car\oborot#+car\accel
If car\trans = 1 And car\oborot = 4000 Then
car\trans = 2
car\oborot = 2500
EndIf
If car\trans = 2 And car\oborot = 4200 Then
car\trans = 3
car\oborot = 2600
EndIf
If car\trans = 3 And car\oborot = 4500 Then
car\trans = 4
car\oborot = 2800
EndIf
 Else
car\oborot# = car\oborot#-car\accel
If car\trans = 4 And car\oborot = 2500 Then
car\trans = 3
car\oborot = 4000
EndIf
If car\trans = 3 And car\oborot = 2300 Then
car\trans = 2
car\oborot = 3000
EndIf
If car\trans = 2 And car\oborot = 2000 Then
car\trans = 1
car\oborot = 2700
EndIf
EndIf

If car\gas<0
        car\speed#=0
        car\oborot# = car\oborot#-50
        car\trans = 1
EndIf


If car\oborot#>car\maxoborot# car\oborot#=car\maxoborot#
If car\oborot#<2000 car\oborot#=2000
ChannelPitch pmotor,Int(car\oborot)*8


pxWheelSetMotorTorque(car\wheel_fr1_body, car\speed#)
pxWheelSetMotorTorque(car\wheel_fr2_body, car\speed#)

If ang>30 ang =30
If ang<-30 ang = -30
        pxWheelSetSteerAngle(car\wheel_fr1_body,  ang)
        pxWheelSetSteerAngle(car\wheel_fr2_body,  ang)

        pxWheelSetBrakeTorque(car\wheel_bac1_body,  1)
        pxWheelSetBrakeTorque(car\wheel_bac2_body,  1)
       
If KeyDown (57)
        pxWheelSetBrakeTorque(car\wheel_bac1_body,  800)
        pxWheelSetBrakeTorque(car\wheel_bac2_body,  800)
        car\speed#=0
        car\oborot# = car\oborot#-50
        car\trans = 1
EndIf
EndIf

If EntityDistance(hero, car\car_mesh) < 50 Then
If KeyHit(15) Then
d=1-d
End If
End If
If EntityDistance(hero, car\car_mesh) > 50 Then
d=0
End If


time=MilliSecs ()
pxRenderPhysic(30,0)               
pxBodySetEntity(car\car_mesh, car\car_body)

MeshSetToWheel(car\wheel_fr1_mesh, car\wheel_fr1_body)
MeshSetToWheel(car\wheel_fr2_mesh, car\wheel_fr2_body)
MeshSetToWheel(car\wheel_bac1_mesh, car\wheel_bac1_body)
MeshSetToWheel(car\wheel_bac2_mesh, car\wheel_bac2_body)

New_time=MilliSecs ()-time
If KeyHit(2) Ref_Glow_ON=1-Ref_Glow_ON

UpdateWorld()
RenderWorld()
  AUpdateWater (camera)
  UpdateRefract camera
  PostProcess_Render camera
  LightColor light, 255, 255, 255
  AmbientLight 70,70,70
  frames=frames+1 
  If MilliSecs()-render_time=>1000  fps1=frames : frames=0 : render_time=MilliSecs()

If d
  DrawImage tahometr,GraphicsWidth() - 200,GraphicsHeight() -200
  SetFont fntArial
 Text GraphicsWidth() - 110,GraphicsHeight() -155, Ceil(pxWheelGetAxleSpeed(car\wheel_bac1_body))
 Text GraphicsWidth() - 130,GraphicsHeight() -115, Ceil(car\gas#)
If car\gas<10
DrawImage allert, GraphicsWidth() - 93,GraphicsHeight() -113
EndIf
 Text GraphicsWidth() - 68,GraphicsHeight() -115, car\trans
If car\oborot>3700
DrawImage allertt, GraphicsWidth() - 51,GraphicsHeight() -113
EndIf
EndIf

Flip 1
Until KeyHit(1)
End



Function BodyCreateHull%(mesh%, mass)

        Local nsurf = CountSurfaces(mesh)
        Local nvert = 0
        For ns = 1 To nsurf
                Local surf = GetSurface(mesh,ns)
                nvert = nvert + CountVertices(surf)
        Next
            vbank = CreateBank(nvert*4*3)
        nv = 0
        For ns = 1 To nsurf
                surf = GetSurface(mesh,ns)
                nvv = CountVertices(surf)
                For nvc = 0 To nvv - 1
                        PokeFloat vbank,nv*12+0,VertexX(surf,nvc)
                        PokeFloat vbank,nv*12+4,VertexY(surf,nvc)
                        PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)
                        nv = nv+1
                Next
        Next
        Local bbb%= pxBodyCreateHull(vbank, nvert, mass)
        FreeBank vbank
        Return bbb
End Function

Function BodyCreateMesh(mesh%)

        nsurf = CountSurfaces(mesh)
        nvert = 0
        nface=0
        For ns = 1 To nsurf
                Local surf = GetSurface(mesh,ns)
                nface = nface+CountTriangles(surf)
                nvert = nvert +CountVertices(surf)
        Next

        fbank = CreateBank(nface*4*3)
        nf = 0
        vbank = CreateBank(nvert*4*3)
        nv = 0
        For ns = 1 To nsurf
                surf = GetSurface(mesh,ns)
                nfv = CountTriangles(surf)
                For nfc = 0 To nfv -1
                        PokeInt fbank,nf*12+0,TriangleVertex(surf,nfc,0)
                        PokeInt fbank,nf*12+4,TriangleVertex(surf,nfc,1)
                        PokeInt fbank,nf*12+8,TriangleVertex(surf,nfc,2)
                        nf=nf+1
                Next

                nvv = CountVertices(surf)
                For nvc = 0 To nvv - 1
                        PokeFloat vbank,nv*12+0,VertexX(surf,nvc)
                        PokeFloat vbank,nv*12+4,VertexY(surf,nvc)
                        PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)
                        nv = nv+1
                Next
        Next
        bbb%=pxCreateTriMesh(vbank, fbank, nvert, nface, 0)
        FreeBank vbank
        FreeBank fbank
        Return bbb%
End Function

 Function MeshSetToWheel (mesh%, body%)
        pxWheelUpdateSpec(body,1)
        posX# = pxWheelGetPositionXSpec#(body%)
        posY# = pxWheelGetPositionYSpec#(body%)
        posZ# = pxWheelGetPositionZSpec#(body%)
        rotX# = pxWheelGetRotationPitchSpec(body%)
        rotY# = pxWheelGetRotationYawSpec(body%)
        rotZ# = pxWheelGetRotationRollSpec(body%)
       
        PositionEntity mesh, posX,posY,posZ
        RotateEntity mesh, rotX,rotY,rotZ
End Function

а вот второй, я хочу создать машину функцией, чтобы потом их несколько сделать:
Код:

Include "AShadowBBinclude/fps.bb"
Include "AShadowBBinclude/Ashadow.bb"

set = ReadFile("media\config.ini")
with = ReadLine(set)
heith = ReadLine(set)
bbb = ReadLine(set)
www = ReadLine(set)
CloseFile (set)

AGraphics3D with,heith,bbb,www
SetBuffer BackBuffer()
Global fntArial=LoadFont("Comic San MS",16,True)
PostProcessInit()
CreatePixelDistortion()
SetBumpShader  0, 0.15
SoftSelfShading=1


Type vehicles

Field inifile
Field loadpath$
Field loadpath_p$
Field loadwheelpath$
Field mass#
Field xweel#
Field zweel#
Field yweelfr#
Field yweelbac#
Field radius#
Field susp#
Field rest#
Field damping#
Field angfriction#
Field friction#
Field speed#
Field motor#
Field maxspeed#
Field smotorpth$
Field oborot#
Field accel
Field maxoborot#
Field trans
Field maxtrans
Field gas#

Field smotor
Field car_mesh
Field car_body
Field car_phys_mesh
Field Wheel_fr1_body
Field Wheel_fr1_mesh
Field Wheel_fr2_body
Field Wheel_fr2_mesh
Field Wheel_bac1_body
Field Wheel_bac1_mesh
Field Wheel_bac2_body
Field Wheel_bac2_mesh

End Type

;--------------------------------------create sky----------------------------------------------------
sky = CreateSphere(8)
skytex = LoadTexture("media\sky\sky.jpg")
EntityTexture sky, skytex
ScaleEntity sky,10000,10000,10000
FlipMesh sky 
EntityFX sky,1+8
RotateEntity sky,0,180,0

Type obl
Field obj
End Type

meshtt =  CreateSphere(20)
ScaleMesh meshtt,8000,8000,8000
PositionMesh meshtt,0,-3000,0
EntityAlpha meshtt,0
EntityShininess meshtt,1 

        For scount=1 To CountSurfaces(meshtt)
                surface = GetSurface(meshtt,scount)
                numverts=CountVertices(surface)-1
                For i=40 To numverts               
                        x#=VertexX(surface,i)
                        y#=VertexY(surface,i)
                        z#=VertexZ(surface,i)
                        tempball.obl = New obl
                        tempball\obj = LoadMesh("t.b3d",meshtt)
                        ddd = LoadTexture("media\sky\cloud2.jpg",2+1)
                        TextureBlend ddd,3
                        EntityTexture tempball\obj, ddd
                        EntityFX tempball\obj,1
                        bl#=Rnd(0,0.1)
                        EntityAlpha tempball\obj,bl#
                        ScaleEntity tempball\obj,70,70,70
                        PositionEntity tempball\obj,x#,y#,z#
                Next
        Next

;--------------------------------create water----------------------------------------
gradtex= LoadTexture("gradW.jpg", 128+2);
tex=LoadTexture("Wbump.jpg",9)
ScaleTexture tex, 0.005,0.005

WaterState\X=-5000
WaterState\Y=0
WaterState\Z=-5000
WaterState\ScaleX = 10000
WaterState\ScaleY = 10000
WaterState\ScaleZ = 10000

WaterState\ReflectSizeW = 256
WaterState\ReflectSizeH = 256

WaterState\WaterColorR = 255
WaterState\WaterColorG = 255
WaterState\WaterColorB = 255

If Gradient WaterState\GradientCubeMap = gradtex

WaterState\RefractTexture = 0

If BUMPENVMAP_SUPPORT
WaterState\BumpTexture = tex
WaterState\BumpPower= 0.1
WaterState\Reflective=1
WaterState\BumpReflectOFF=0
WaterState\UnderWaterReflective=1
WaterState\Refractive=1
Else
WaterState\BumpTexture = 0
WaterState\BumpPower= 0
WaterState\Reflective=1
WaterState\UnderWaterReflective=1
WaterState\Refractive=0
EndIf

WaterPlane=ACreateRenderWater (1, WaterState)
uwt = CreatePlane()
PositionEntity uwt,0,-0.1,0
EntityAlpha uwt,0.7
EntityColor uwt,7,166,248
;Lights
        light=CreateSLight(1,500)
        RotateEntity light,60,95,0

;PX
PxCreateWorld(0, "")
pxSetGravity(0,-40,0)


level = ALoadMesh ("media\map\map.b3d")
PositionMesh level, 0,2,0
EntityAlpha level,0
surf = GetSurface (level,1)
in_mesh=BodyCreateMesh%(level)
FreeEntity level

level2 = ALoadMesh ("media\map\map2.b3d")
PositionMesh level2, 0,2,0
pxBodySetEntity(level2 , in_mesh)
EntityType level2,2

most = ALoadMesh ("media\map\most.b3d")
PositionMesh most, 0,1,0
in_most=BodyCreateMesh%(most)
pxBodySetEntity(most , in_most)
FreeEntity most

most2 = ALoadMesh ("media\map\most2.b3d")
PositionMesh most2, 0,1,0
EntityFX most2,1
pxBodySetEntity(most2 , in_most)
EntityType most2,2

;|--------------------------------------------------------------------------------------|
;|--------------------------------------------------------------------------------------|
;|-----------create_vehicles------------------------------------------------------|
;|--------------------------------------------------------------------------------------|
;|--------------------------------------------------------------------------------------|
Function create_vehicles()
;загрузка информации о транспорте
car.vehicles = New vehicles
car\inifile = ReadFile("media\HEMTT2\config.ini")

car\loadpath$ = ReadLine(car\inifile)
car\loadpath_p$ = ReadLine(car\inifile)
car\loadwheelpath$ = ReadLine(car\inifile)
car\mass# = ReadLine(car\inifile) ;масса машины
car\xweel# = ReadLine(car\inifile) ;позиция колес по оси Х от тела машины
car\zweel# = ReadLine(car\inifile)  ;позиция колес по оси Z от тела машины
car\yweelfr# = ReadLine(car\inifile) ;позиция передних колес по оси Y от тела машины
car\yweelbac# = ReadLine(car\inifile) ;позиция задних колес по оси Y от тела машины
car\radius# = ReadLine(car\inifile) ;радиус физических колес
car\susp# = ReadLine(car\inifile) ;длина подвески
car\rest# = ReadLine(car\inifile) ;мягкость подвески
car\damping# = ReadLine(car\inifile) ;пружинность подвески
car\angfriction# = ReadLine(car\inifile) ;трение при повороте
car\friction# = ReadLine(car\inifile) ;трение не в повороте
car\speed# = ReadLine(car\inifile) ;начальная скорость
car\motor# = ReadLine(car\inifile) ;ускороение
car\maxspeed# = ReadLine(car\inifile) ;максимальная скорость
car\smotorpth$ = ReadLine(car\inifile)
car\oborot# = ReadLine(car\inifile)
car\accel = ReadLine(car\inifile)
car\maxoborot# = ReadLine(car\inifile) ;обороты
car\trans = ReadLine(car\inifile)
car\maxtrans = ReadLine(car\inifile)
car\gas# = 400
CloseFile (car\inifile)


car\smotor = Load3DSound(car\smotorpth$)

;---------Create car------------
car\car_mesh = ALoadMesh(car\loadpath$)
ScaleMesh car\car_mesh,1.1,1.1,1.1
RotateEntity car\car_mesh ,90,0,0
PositionEntity car\car_mesh ,0,8,0
EntityShininess car\car_mesh,1

car\car_phys_mesh = ALoadMesh(car\loadpath_p$)
ScaleMesh car\car_phys_mesh,1.1,1.1,1.1
RotateEntity car\car_phys_mesh ,0,90,0
PositionEntity car\car_phys_mesh ,0,8,0
EntityAlpha car\car_phys_mesh,0

car\car_body = BodyCreateHull(car\car_phys_mesh, car\mass#)
pxBodySetPosition (car\car_body, 2000, 400 ,0)
pxBodySetRotation (car\car_body, 0, 0, 0)
pxBodySetCMassLocalPosition(car\car_body, 0, -3, 0)

;------- front wheel-----------
car\Wheel_fr1_body = pxWheelAddToBody(car\car_body, -car\xweel#, car\zweel#, car\yweelfr#)
pxWheelSetRadius(car\Wheel_fr1_body,  car\radius#)
pxWheelSetSuspension(car\Wheel_fr1_body,  car\susp#, car\rest#,  0.5)
car\wheel_fr1_mesh = ALoadMesh (car\loadwheelpath$)
RotateMesh car\wheel_fr1_mesh,0,180,0

car\Wheel_fr2_body = pxWheelAddToBody(car\car_body, car\xweel#,car\zweel#,car\yweelfr#)
pxWheelSetRadius(car\Wheel_fr2_body,  car\radius#)
pxWheelSetSuspension(car\Wheel_fr2_body,  car\susp#, car\rest#,  car\damping#)
car\wheel_fr2_mesh = ALoadMesh (car\loadwheelpath$)

;-------back wheel------------
car\Wheel_bac1_body = pxWheelAddToBody(car\car_body, -car\xweel#, car\zweel#, car\yweelbac#)
pxWheelSetRadius(car\Wheel_bac1_body, car\radius#)
pxWheelSetSuspension(car\Wheel_bac1_body,  car\susp#, car\rest#,  car\damping#)
car\wheel_bac1_mesh = ALoadMesh(car\loadwheelpath$)
RotateMesh car\wheel_bac1_mesh,0,180,0

car\Wheel_bac2_body = pxWheelAddToBody(car\car_body, car\xweel#, car\zweel#, car\yweelbac#)
pxWheelSetRadius(car\Wheel_bac2_body,  car\radius#)
pxWheelSetSuspension(car\Wheel_bac2_body,  car\susp#, car\rest#,  car\damping#)
car\wheel_bac2_mesh =  ALoadMesh (car\loadwheelpath$)

pxWheelSetFrictionToSide(car\Wheel_fr1_body, car\angfriction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\angfriction#)
pxWheelSetFrictionToSide(car\Wheel_bac1_body, car\friction#)
pxWheelSetFrictionToSide(car\Wheel_bac2_body, car\friction#)
end Function

create_vehicles()

;Camera
d=0
piv = CreatePivot()
camera = CreateCamera(piv)
CameraClsColor camera,6,59,255
PositionEntity camera,0,0,-30
CameraRange camera,1,100000
CreateGlow camera, 130, 150 ,.3,0.3;CreateGlow camera, 200, 150 ,.35,.8
Ref_Glow_ON = 1
EntityType camera,1
EntityRadius camera,2

;#############
hero = CreateSphere()
PositionEntity hero,2000,200,0
EntityType hero,1
lister = CreateListener(camera,0.2,0.2,0.2)
LoopSound(car\smotor)
pmotor = EmitSound(car\smotor,car\car_mesh)

Tahometr=LoadImage("media\spidom.bmp")
MaskImage tahometr,46,32,0
allert = LoadImage("media\allert.bmp")
allertt = LoadImage("media\allert.bmp")

Collisions 1,2,2,3
;Main Loop
Repeat

pt#=pt#+.0005
PositionTexture tex, pt#, pt#

TurnEntity meshtt,0.05,0.05,0.05
For tempball.obl = Each obl
PointEntity tempball\obj,camera

If EntityY(tempball\obj)<-50 Then
HideEntity tempball\obj
Else
ShowEntity tempball\obj
EndIf
Next

If d = 0
If EntityCollided(hero,2)
MoveEntity hero,0,-0.5,0
Else
MoveEntity hero,0,-2,0
EndIf

PositionEntity piv,EntityX(hero),EntityY(hero)+5,EntityZ(hero)
 mxs#=-MouseXSpeed()/4
 mys#=MouseYSpeed()/4
 mxa#=mxa#+mxs#
 mya#=mya#+mys#
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity piv,mya,mxa,0
RotateEntity hero,0,mxa,0
PositionEntity camera,0,0,0
If KeyDown(200) MoveEntity hero,0,0,1
If KeyDown(208) MoveEntity hero,0,0,-1
If KeyDown(205) MoveEntity hero,1,0,0
If KeyDown(203) MoveEntity hero,-1,0,0
EndIf




If d
PositionEntity hero ,EntityX(car\car_mesh),EntityY(car\car_mesh),EntityZ(car\car_mesh)
If Not EntityCollided(camera,2)
PositionEntity camera,0,0,-30
EndIf
 mxs#=-MouseXSpeed()/4
 mys#=MouseYSpeed()/4
 mxa#=mxa#+mxs#
 mya#=mya#+mys#
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity piv,mya,mxa,0
PositionEntity piv,EntityX(car\car_mesh),EntityY(car\car_mesh),EntityZ(car\car_mesh)
RotateEntity sky,1,1,1
PositionEntity sky,EntityX(car\car_mesh),EntityY(car\car_mesh),EntityZ(car\car_mesh)
PositionEntity meshtt,EntityX(car\car_mesh),EntityY(car\car_mesh),EntityZ(car\car_mesh)




If KeyDown (205) Then
ang = ang+2
pxWheelSetFrictionToSide(car\Wheel_fr1_body, car\angfriction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\angfriction#)
ElseIf  ang>0 Then
ang=ang-2
EndIf
If KeyDown (203) Then
ang = ang-2
pxWheelSetFrictionToSide(car\Wheel_fr1_body, car\angfriction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\angfriction#)
ElseIf  ang<0 Then
ang=ang+2
EndIf

If ang=0 Then
pxWheelSetFrictionToSide(car\Wheel_fr1_body,car\friction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\friction#)
EndIf

If motor<0 Then
pxWheelSetFrictionToSide(car\Wheel_fr1_body, car\friction#)
pxWheelSetFrictionToSide(car\Wheel_fr2_body, car\friction#)
EndIf


If KeyDown (200) Then
If car\gas>0
car\speed# = car\speed#+car\oborot#/600
car\gas# = car\gas# - 0.005
EndIf
 ElseIf  car\speed#>0 Then
car\speed#=car\speed#-car\oborot#/1000
        pxWheelSetBrakeTorque(car\wheel_bac1_body,  1000)
        pxWheelSetBrakeTorque(car\wheel_bac2_body,  1000)
 EndIf
If KeyDown (208) Then
car\speed# = car\speed#-car\oborot#/600
car\gas# = car\gas# - 0.005
 ElseIf  car\speed#<0 Then
car\speed#=car\speed#+car\motor#
 EndIf

If car\speed#>car\maxspeed# car\speed# = car\maxspeed#
If car\speed#<-car\maxspeed# car\speed#= -car\maxspeed#

If KeyDown (200) Then
car\oborot# = car\oborot#+car\accel
If car\trans = 1 And car\oborot = 4000 Then
car\trans = 2
car\oborot = 2500
EndIf
If car\trans = 2 And car\oborot = 4200 Then
car\trans = 3
car\oborot = 2600
EndIf
If car\trans = 3 And car\oborot = 4500 Then
car\trans = 4
car\oborot = 2800
EndIf
 Else
car\oborot# = car\oborot#-car\accel
If car\trans = 4 And car\oborot = 2500 Then
car\trans = 3
car\oborot = 4000
EndIf
If car\trans = 3 And car\oborot = 2300 Then
car\trans = 2
car\oborot = 3000
EndIf
If car\trans = 2 And car\oborot = 2000 Then
car\trans = 1
car\oborot = 2700
EndIf
EndIf

If car\gas<0
        car\speed#=0
        car\oborot# = car\oborot#-50
        car\trans = 1
EndIf


If car\oborot#>car\maxoborot# car\oborot#=car\maxoborot#
If car\oborot#<2000 car\oborot#=2000
ChannelPitch pmotor,Int(car\oborot)*8


pxWheelSetMotorTorque(car\wheel_fr1_body, car\speed#)
pxWheelSetMotorTorque(car\wheel_fr2_body, car\speed#)

If ang>30 ang =30
If ang<-30 ang = -30
        pxWheelSetSteerAngle(car\wheel_fr1_body,  ang)
        pxWheelSetSteerAngle(car\wheel_fr2_body,  ang)

        pxWheelSetBrakeTorque(car\wheel_bac1_body,  1)
        pxWheelSetBrakeTorque(car\wheel_bac2_body,  1)
       
If KeyDown (57)
        pxWheelSetBrakeTorque(car\wheel_bac1_body,  800)
        pxWheelSetBrakeTorque(car\wheel_bac2_body,  800)
        car\speed#=0
        car\oborot# = car\oborot#-50
        car\trans = 1
EndIf
EndIf

If EntityDistance(hero, car\car_mesh) < 50 Then
If KeyHit(15) Then
d=1-d
End If
End If
If EntityDistance(hero, car\car_mesh) > 50 Then
d=0
End If


time=MilliSecs ()
pxRenderPhysic(30,0)               
pxBodySetEntity(car\car_mesh, car\car_body)

MeshSetToWheel(car\wheel_fr1_mesh, car\wheel_fr1_body)
MeshSetToWheel(car\wheel_fr2_mesh, car\wheel_fr2_body)
MeshSetToWheel(car\wheel_bac1_mesh, car\wheel_bac1_body)
MeshSetToWheel(car\wheel_bac2_mesh, car\wheel_bac2_body)

New_time=MilliSecs ()-time
If KeyHit(2) Ref_Glow_ON=1-Ref_Glow_ON

UpdateWorld()
RenderWorld()
  AUpdateWater (camera)
  UpdateRefract camera
  PostProcess_Render camera
  LightColor light, 255, 255, 255
  AmbientLight 70,70,70
  frames=frames+1 
  If MilliSecs()-render_time=>1000  fps1=frames : frames=0 : render_time=MilliSecs()

If d
  DrawImage tahometr,GraphicsWidth() - 200,GraphicsHeight() -200
  SetFont fntArial
 Text GraphicsWidth() - 110,GraphicsHeight() -155, Ceil(pxWheelGetAxleSpeed(car\wheel_bac1_body))
 Text GraphicsWidth() - 130,GraphicsHeight() -115, Ceil(car\gas#)
If car\gas<10
DrawImage allert, GraphicsWidth() - 93,GraphicsHeight() -113
EndIf
 Text GraphicsWidth() - 68,GraphicsHeight() -115, car\trans
If car\oborot>3700
DrawImage allertt, GraphicsWidth() - 51,GraphicsHeight() -113
EndIf
EndIf

Flip 1
Until KeyHit(1)
End



Function BodyCreateHull%(mesh%, mass)

        Local nsurf = CountSurfaces(mesh)
        Local nvert = 0
        For ns = 1 To nsurf
                Local surf = GetSurface(mesh,ns)
                nvert = nvert + CountVertices(surf)
        Next
            vbank = CreateBank(nvert*4*3)
        nv = 0
        For ns = 1 To nsurf
                surf = GetSurface(mesh,ns)
                nvv = CountVertices(surf)
                For nvc = 0 To nvv - 1
                        PokeFloat vbank,nv*12+0,VertexX(surf,nvc)
                        PokeFloat vbank,nv*12+4,VertexY(surf,nvc)
                        PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)
                        nv = nv+1
                Next
        Next
        Local bbb%= pxBodyCreateHull(vbank, nvert, mass)
        FreeBank vbank
        Return bbb
End Function

Function BodyCreateMesh(mesh%)

        nsurf = CountSurfaces(mesh)
        nvert = 0
        nface=0
        For ns = 1 To nsurf
                Local surf = GetSurface(mesh,ns)
                nface = nface+CountTriangles(surf)
                nvert = nvert +CountVertices(surf)
        Next

        fbank = CreateBank(nface*4*3)
        nf = 0
        vbank = CreateBank(nvert*4*3)
        nv = 0
        For ns = 1 To nsurf
                surf = GetSurface(mesh,ns)
                nfv = CountTriangles(surf)
                For nfc = 0 To nfv -1
                        PokeInt fbank,nf*12+0,TriangleVertex(surf,nfc,0)
                        PokeInt fbank,nf*12+4,TriangleVertex(surf,nfc,1)
                        PokeInt fbank,nf*12+8,TriangleVertex(surf,nfc,2)
                        nf=nf+1
                Next

                nvv = CountVertices(surf)
                For nvc = 0 To nvv - 1
                        PokeFloat vbank,nv*12+0,VertexX(surf,nvc)
                        PokeFloat vbank,nv*12+4,VertexY(surf,nvc)
                        PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)
                        nv = nv+1
                Next
        Next
        bbb%=pxCreateTriMesh(vbank, fbank, nvert, nface, 0)
        FreeBank vbank
        FreeBank fbank
        Return bbb%
End Function

 Function MeshSetToWheel (mesh%, body%)
        pxWheelUpdateSpec(body,1)
        posX# = pxWheelGetPositionXSpec#(body%)
        posY# = pxWheelGetPositionYSpec#(body%)
        posZ# = pxWheelGetPositionZSpec#(body%)
        rotX# = pxWheelGetRotationPitchSpec(body%)
        rotY# = pxWheelGetRotationYawSpec(body%)
        rotZ# = pxWheelGetRotationRollSpec(body%)
       
        PositionEntity mesh, posX,posY,posZ
        RotateEntity mesh, rotX,rotY,rotZ
End Function

Только потом, все, что связанно с типом car, не считая того что в функции создания написанно, пишет что этот тип не найден

Mr_F_ 10.01.2009 22:11

Ответ: Не могу разобраться с TYPE
 
ээ чувак, ты б попроще пример собрал)
весь твой код вряд ли кто смотреть будет, урежь всё, что не связано с проблемой.

Sashka007 10.01.2009 22:19

Ответ: Не могу разобраться с TYPE
 
Нет проблем

Sashka007 11.01.2009 21:23

Ответ: Не могу разобраться с TYPE
 
А кто админ в этом разделе? Если не трудно, удалите первый пост, а то у меня не удаляет
Решил первую проблему, а как дапустим сделать так, есть герой и несколько тайпов car, как определить тот тайп, рядом с которым находишься и потом работать с ним?

H@NON 11.01.2009 21:27

Ответ: Не могу разобраться с TYPE
 
используй before и after, подробнее в справке. А хотя щас догнал в чем вопрос, тут нужно проверять по дистанции перебором по всем car'ам приблизился ли игрок на нужную дистанцию к машине. Если приблизился, тогда производить нужные действия, все проста.

Taugeshtu 11.01.2009 21:31

Ответ: Не могу разобраться с TYPE
 
2 H@NON:
Цитата:

несколько тайпов car
Насколько помню, After/Before перебирает не тайпы а объекты внутри одного тайпа

Самое очевидное решение - полный перебор, но это тормозззззааааа...

SBJoker 11.01.2009 21:49

Ответ: Не могу разобраться с TYPE
 
Цитата:

Сообщение от Sashka007 (Сообщение 94515)
А кто админ в этом разделе? Если не трудно, удалите первый пост, а то у меня не удаляет

Нажми в посте кнопку "правка" и удали что тебе надо.. Удалить весь первый пост можно только с темой.

H@NON 11.01.2009 22:13

Ответ: Не могу разобраться с TYPE
 
Цитата:

Сообщение от Ize'g0re (Сообщение 94519)
2 H@NON:

Насколько помню, After/Before перебирает не тайпы а объекты внутри одного тайпа

Самое очевидное решение - полный перебор, но это тормозззззааааа...

спасибо за разьяснение, я сначало так и понял что у него герой и машинка в одном типе (бегло просматривал), но пригляделся и исправился :) На счет очевидного, перебор не всегда тормоза, можно ведь растянуть его и проверять всего несколько объектов за итерацию.

Sashka007 11.01.2009 22:27

Ответ: Не могу разобраться с TYPE
 
Ну машин около героя максимум 20 будет, т. к. я делаю как в гта, генерацию машин, если я ухожу от машины далеко, она исчезает и генерируется другая рядом, а можно подробнее об тех командах и примерчик

NitE 11.01.2009 23:13

Re: Не могу разобраться с TYPE
 
for car.vehicle = each vehicle
if entitydistance player,car\mesh=<5
...
endif
next

Sashka007 12.01.2009 19:06

Ответ: Не могу разобраться с TYPE
 
У меня будет несколько машин, NiTE, а в твоем коде:
For car.vehicles = each car
If entitydistan player,car\mesh <5
...
EndIf
Next
Блитц обращается ко всем тайпам car, а мне надо что бы он обращался только к однай машине, которая рядам, как это сделать?

ABTOMAT 12.01.2009 19:52

Ответ: Не могу разобраться с TYPE
 
Цитата:

Сообщение от Sashka007 (Сообщение 94570)
У меня будет несколько машин, NiTE, а в твоем коде:
For car.vehicles = each car
If entitydistan player,car\mesh <5
...
EndIf
Next
Блитц обращается ко всем тайпам car, а мне надо что бы он обращался только к однай машине, которая рядам, как это сделать?

:wallbash:
строка:

Код:

If entitydistan player,car\mesh <5
тебе ни о чём не говорит?
Не нравится что обратится ко всем что меньше 5 - так сравнивай расстояние и в конце обратись к той машине, расстояние до которой наименьшее.
Уйти от полного перебора в данном случае - никак.

Прежде чем делать "как в ГТА", изучи азы, чтобы не задавать тупые вопросы при создании сложных вещей!

Уже давно хотел высказаться по поводу твоего незнания основ, да всё думал, что ума наберёшься.
Простите за грубость

Sashka007 12.01.2009 21:53

Ответ: Не могу разобраться с TYPE
 
Ну я не делаю гта, просто, я рандоную генерацию машин делаю как там, а вот на счет того, что блитц мне еще учить и учить я согласен

HolyDel 12.01.2009 22:28

Ответ: Не могу разобраться с TYPE
 
Не блиц. практически в любом языке программирования тебе бы пришлось делать то же самое.
самое простое в твоем случае:
Код:

selected_car.vehicle = NULL
mindist# = 5

for car.vehicle = each vehicle
 if entitydistance(player,car\mesh)<mindist
  selected_car = car
  mindist = entitydistance(player,car\mesh)
 endif
next

if selected_Car<> NULL
 selected_car\use = 1 ; или как там у тебя посадить
игрока в машину
endif



Часовой пояс GMT +4, время: 23:13.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot