Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 24.67 KB | None | 0 0
  1.  
  2. // Project: Revival
  3. // Created: 2017-01-21
  4.  
  5. // show all errors
  6. //SetErrorMode(2)
  7.  
  8. // set window properties
  9. SetWindowTitle( "Revival" )
  10. SetWindowSize( 1024, 768, 0)
  11.  
  12. // set display properties
  13. SetVirtualResolution( 1024, 768 )
  14. SetOrientationAllowed( 1, 1, 1, 1 )
  15. SetGenerateMipmaps(1)
  16.  
  17. SetSyncRate( 60, 0 ) // 30fps instead of 60 to save battery
  18. // remove directional light, and reduce ambient
  19. SetAmbientColor( 255,255,255 )
  20.  
  21. UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts
  22. Create3DPhysicsWorld()
  23. #include "keys.agc"
  24. #constant maxobjects=5000
  25. global name$=""
  26. global gametype=0
  27. global level=1
  28. global red=255
  29. global green=255
  30. global blue=255
  31. global gx#=20
  32. global rotyy#=0
  33. global gy#=20
  34. global gz#=20
  35. global basex#=0
  36. global basey#=10
  37. global bx#=40
  38. global by#=20
  39. global xgap#=180
  40. global xtextdiff#=0
  41. global baseboxX#=20
  42. global baseboxY#=20
  43. global ygap#=30
  44. global sizex#=20
  45. global sizey#=20
  46. global sizez#=20
  47. global groupeditbox=1
  48. global rededitbox=2
  49. global greeneditbox=3
  50. global blueeditbox=4
  51. global pbodyeditbox=5
  52. global pshapeeditbox=6
  53. global sizexeditbox=7
  54. global sizeyeditbox=8
  55. global sizezeditbox=9
  56. global shapeeditbox=10
  57. global gametypeeditbox=12
  58. global fpsreadout=300
  59. global cx#=0
  60. global sunmod=1
  61. global cy#=0
  62. global cz#=0
  63. global quit=0
  64. global shape=2
  65. global CameraDistance#  =   130
  66. global currenttexture=6
  67. global group=0
  68. global lightnumber=1
  69. global rad#=20
  70. global objpointer=1
  71. global phybody=1
  72. global physhape=2
  73. global visibility=1
  74. global transparency=0
  75. global rotx=0
  76. global roty=0
  77. global rotz=0
  78. global friction#=0.8
  79. global flicker=0
  80. global cursorobject=8000
  81. global objectselected1=0
  82. global objectselected2=0
  83. global objectselectedcount=0
  84. type Tobject
  85.     name$ as string
  86.     x# as float
  87.     y# as float
  88.     z# as float
  89.     sizex# as float
  90.     sizey# as float
  91.     sizez# as float
  92.     group as integer
  93.     ID as integer
  94.     image as integer
  95.     red as integer
  96.     green as integer
  97.     blue as integer
  98.     shape as integer
  99.     visible as integer
  100.     selected as integer
  101.     deleted as integer
  102.     transparency as integer
  103.     pb as integer
  104.     ps as integer
  105.     friction# as float
  106.     rotatex as integer
  107.     rotatey as integer
  108.     rotatez as integer
  109.     master as integer
  110.     slave as integer
  111. endtype
  112. dim object[5000] as Tobject
  113. type Tlights
  114.     x# as float
  115.     y# as float
  116.     z# as float
  117.     ObjID as integer
  118.     lightID as integer
  119.     red as integer
  120.     green as integer
  121.     blue as integer
  122.     flicker as integer
  123.     deleted as integer
  124.     selected as integer
  125. endtype
  126. dim light[5000] as Tlights
  127. load_images()
  128. init()
  129. repeat
  130.     control()
  131.     read_boxes()
  132.     if getrawkeypressed(KEY_Q)
  133.         quit=1
  134.     endif
  135.      FrameTime#=GetFrameTime()
  136.     //Print( ScreenFPS() )
  137.     if GetPointerPressed()=1
  138.         PointerStartX#=GetPointerX()
  139.         PointerStartY#=GetPointerY()
  140.     endif
  141.     if GetPointerState()=1
  142.         PointerX#=GetPointerX()
  143.         PointerY#=GetPointerY()
  144.         //calculate the distance the pointer traveled while pressing
  145.         PointerDistX#=PointerX#-PointerStartX#
  146.         PointerDistY#=PointerY#-PointerStartY#
  147.         // here we calculate if we swipe vertically or horizontally
  148.         if abs(PointerDistX#)>abs(PointerDistY#)
  149.         // change the camera angle in dependence of the frametime
  150.             CameraAngleY#=CameraAngleY#-PointerDistX#*0.5*FrameTime#
  151.             else
  152.                 // change the camera distance in dependence of the frametime
  153.                 CameraDistance#=CameraDistance#-PointerDistY#*0.1*FrameTime#
  154.         endif
  155.     endif
  156.     setspriteangle(3,-CameraAngleY#)
  157.     //sin and cos of the camera angle
  158.     Sin#=sin(CameraAngleY#)
  159.     Cos#=cos(CameraAngleY#)
  160.     // calculate the camera position, with curvevalue for the smooth movement
  161.     CameraX#=curvevalue(sin(CameraAngleY#),CameraX#,3)
  162.     CameraZ#=curvevalue(cos(CameraAngleY#),CameraZ#,3)
  163.     setobjectposition(cursorobject,cx#,cy#,cz#)
  164.     setcameraposition(1,cx#+CameraDistance#*0.6*CameraX#,cy#+CameraDistance#,cz#+CameraDistance#*0.6*CameraZ#)
  165.     setcameralookat(1,cx#,cy#,cz#,0)
  166.     settextstring(fpsreadout,"FPS = "+str(ScreenFPS()))
  167.     //Print( ScreenFPS() )
  168.     Sync()
  169. until quit=1
  170. quit=0
  171. end
  172. function init()
  173.     create_my_editbox(groupeditbox,basex#+xgap#,basey#,1,200,0,0,0,bx#,by#,255,"0")
  174.     create_my_editbox(rededitbox,basex#+xgap#,basey#+ygap#,1,200,0,0,0,bx#,by#,255,"255")
  175.     create_my_editbox(greeneditbox,basex#+xgap#,basey#+ygap#*2,1,200,0,0,0,bx#,by#,255,"255")
  176.     create_my_editbox(blueeditbox,basex#+xgap#,basey#+ygap#*3,1,200,0,0,0,bx#,by#,255,"255")
  177.    
  178.     create_my_editbox(pbodyeditbox,basex#+xgap#*2,basey#,1,200,0,0,0,bx#,by#,255,"1")
  179.     create_my_editbox(pshapeeditbox,basex#+xgap#*2,basey#+ygap#,1,200,0,0,0,bx#,by#,255,"2")
  180.     create_my_editbox(sizexeditbox,basex#+xgap#*2,basey#+ygap#*2,1,200,0,0,0,bx#,by#,255,"20")
  181.     create_my_editbox(sizeyeditbox,basex#+xgap#*2,basey#+ygap#*3,1,200,0,0,0,bx#,by#,255,"20")
  182.     create_my_editbox(sizezeditbox,basex#+xgap#*2,basey#+ygap#*4,1,200,0,0,0,bx#,by#,255,"20")
  183.     create_my_editbox(shapeeditbox,basex#+xgap#,basey#+ygap#*4,1,200,0,0,0,bx#,by#,255,"0")
  184.    
  185.     create_my_editbox(gametypeeditbox,basex#+xgap#*3,basey#,1,200,0,0,0,bx#,by#,255,"0")
  186.     create_my_text(Groupeditbox,baseboxX#-xtextdiff#,baseboxy#-12,25,255,0,0,"Group   --- ",0)
  187.     create_my_text(rededitbox,baseboxX#-xtextdiff#,baseboxy#-12+ygap#,25,255,0,0,"Red   --- ",0)
  188.     create_my_text(greeneditbox,baseboxX#-xtextdiff#,baseboxy#-12+ygap#*2,25,255,0,0,"Green --- ",0)
  189.     create_my_text(blueeditbox,baseboxX#-xtextdiff#,baseboxy#-12+ygap#*3,25,255,0,0,"Blue  --- ",0)
  190.     create_my_text(shapeeditbox,baseboxX#-xtextdiff#,baseboxy#-12+ygap#*4,25,255,0,0,"Shape  --- ",0)
  191.     create_my_text(pbodyeditbox,baseboxX#+xgap#+30,baseboxy#-12,25,255,0,0,"PHYBod   --- ",0)
  192.     create_my_text(pshapeeditbox,baseboxX#+xgap#+30,baseboxy#-12+ygap#,25,255,0,0,"PHYShape --- ",0)
  193.     create_my_text(sizexeditbox,baseboxX#+xgap#+30,baseboxy#-12+ygap#*2,25,255,0,0,"SizeX#  --- ",0)
  194.     create_my_text(sizeyeditbox,baseboxX#+xgap#+30,baseboxy#-12+ygap#*3,25,255,0,0,"SizeY#  --- ",0)
  195.     create_my_text(sizezeditbox,baseboxX#+xgap#+30,baseboxy#-12+ygap#*4,25,255,0,0,"SizeZ#  --- ",0)
  196.     create_my_text(fpsreadout,baseboxX#-xtextdiff#,baseboxy#+ygap#*24,15,255,0,0,"FPS",0)
  197.     createobjectbox(cursorobject,sizex#,sizey#,sizez#)
  198.     setobjectimage(cursorobject,1,0)
  199.     SetObjectTransparency(cursorobject,1)
  200.     SetObjectCollisionMode(cursorobject,0)
  201.     setobjectposition(cursorobject,cx#,cy#,cz#)
  202.     createobjectplane(7000,100,100)
  203.     setobjectimage(7000,2,0)
  204.     setobjectrotation(7000,90,0,0)
  205.     setobjectposition(7000,0,-0.5,0)
  206.     SetObjectTransparency(7000,1)
  207.     setobjectcollisionmode(7000,0)
  208.     setobjectcolor(7000,255,255,255,50)
  209.     createsprite(1,currenttexture)
  210.     setspritesize(1,128,128)
  211.     setspriteposition(1,900,600)
  212.     fixspritetoscreen(1,1)
  213.  
  214. endfunction
  215. function create_my_editbox(number,x#,y#,bordersize#,r,g,b,backcolor,bsizex#,bsizey#,alpha,box$)
  216.     createeditbox(number)
  217.     SetEditBoxBorderSize(number,bordersize#)
  218.     SetEditBoxTextColor(number,r,g,b)
  219.     SetEditBoxBorderColor(number,r,g,b,alpha)
  220.     SetEditBoxBackgroundColor( number, 0, 0, 0, alpha )
  221.     seteditboxsize(number,bsizex#,bsizey#)
  222.     SetEditBoxPosition(number,x#,y#)
  223.     FixEditBoxToScreen(number,1)
  224.     seteditboxdepth(number,0)
  225.     SetEditBoxText(number,box$)
  226. endfunction
  227. function curvevalue(Destination#,Current#,Smooth#)
  228.     Current#=Current#+((Destination#-Current#)/Smooth#)
  229. endfunction Current#
  230. function PI()
  231. endfunction 3.14159265
  232. function load_images()
  233.     for n=1 to 200
  234.         f$=str(n) + ".png"
  235.         if getfileexists(f$)
  236.             loadimage (n,f$)
  237.             SetImageWrapU(n,1)
  238.             SetImageWrapV(n,1)
  239.         endif
  240.     next
  241. endfunction
  242. function create_my_text(number,x#,y#,size,r,g,b,mystring$,depth)
  243.     createtext(number,mystring$)
  244.     settextsize(number,size)
  245.     settextcolor(number,r,g,b,255)
  246.     SetTextPosition(number,x#,y#)
  247.     FixTextToScreen(number,1)
  248.     settextdepth(number,depth)
  249.     //SetTextFontImage ( number, 2 )
  250. endfunction
  251. function control()
  252.     obj=caster(cx#,cy#,cz#)
  253.     if getrawkeystate(KEY_CONTROL)
  254.         div=4
  255.         else
  256.         div=0
  257.     endif
  258.     if getrawkeypressed(KEY_L)
  259.         load_model(currenttexture)
  260.     endif
  261.     if getrawkeypressed(KEY_K)
  262.         setcamerarotation(1,GetCameraAngleX(1)-20,0,0)
  263.     endif
  264.         if getrawkeypressed(KEY_M)
  265.         setcamerarotation(1,GetCameraAngleX(1)+20,0,0)
  266.     endif
  267.     if getrawkeypressed(KEY_SHIFT)
  268.     if obj>0 and obj<>cursorobject
  269.             for n=1 to maxobjects
  270.                 if object[n].ID=obj
  271.                     select object[n].selected
  272.                         case 0
  273.                             setobjectcolor(obj,255,0,0,100)
  274.                             object[n].selected=1
  275.                             inc objectselectedcount
  276.                         endcase
  277.                         case 1
  278.                             setobjectcolor(obj,255,255,255,255)
  279.                             object[n].selected=0
  280.                             dec objectselectedcount
  281.                         endcase
  282.                     endselect
  283.                     exit
  284.                 endif
  285.             next n
  286.            
  287.             if objectselectedcount=1
  288.                 objectselected1=obj
  289.             endif
  290.             if objectselectedcount=2
  291.                 objectselected2=obj
  292.             endif
  293.         endif
  294.     endif
  295.     if getrawkeypressed(KEY_DELETE)
  296.         for n=1 to maxobjects
  297.             if object[n].selected=1
  298.                 deleteobject(object[n].ID)
  299.                 object[n].deleted=1
  300.             endif
  301.         next n
  302.         objectselectedcount=0
  303.         objectselected1=0
  304.         objectselected2=0
  305.     endif
  306.     if getrawkeypressed(KEY_C)
  307.         clear_level()
  308.     endif
  309.     if getrawkeypressed(KEY_S)
  310.         hide_stuff()
  311.         test_level()
  312.         show_stuff()
  313.     endif
  314.     if getrawkeypressed(KEY_T)
  315.         inc sunmod
  316.         if sunmod>1
  317.             sunmod=0
  318.         endif
  319.         select sunmod
  320.             case 0
  321.                 setsunactive(0)
  322.                 SetAmbientColor( 0,0,0 )
  323.                 print("sun off")
  324.                 print(str(sunmod))
  325.             endcase
  326.             case 1
  327.                 setsunactive(1)
  328.                 print("sun on")
  329.                 SetAmbientColor( 255,255,255 )
  330.                 print(str(sunmod))
  331.             endcase
  332.         endselect
  333.     endif
  334.     if getrawkeypressed(KEY_A)
  335.         if div=0
  336.         cy#=cy#+gy#
  337.         else
  338.             cy#=cy#+2.5
  339.         endif
  340.     endif
  341.     if getrawkeypressed(KEY_Z)
  342.         if div=0
  343.         cy#=cy#-gy#
  344.         else
  345.             cy#=cy#-2.5
  346.         endif
  347.     endif      
  348.     if getrawkeypressed(KEY_LEFT)
  349.         if div=0
  350.         cx#=cx#+gx#
  351.         else
  352.             cx#=cx#+2.5
  353.         endif
  354.     endif
  355.     if getrawkeypressed(KEY_RIGHT)
  356.         if div=0
  357.         cx#=cx#-gx#
  358.         else
  359.             cx#=cx#-2.5
  360.         endif
  361.     endif
  362.     if getrawkeypressed(KEY_UP)
  363.         if div=0
  364.         cz#=cz#-gz#
  365.         else
  366.             cz#=cz#-2.5
  367.         endif
  368.     endif
  369.     if getrawkeypressed(KEY_DOWN)
  370.         if div=0
  371.         cz#=cz#+gz#
  372.         else
  373.             cz#=cz#+2.5
  374.         endif
  375.     endif
  376.  
  377.     if getrawkeyreleased(KEY_SPACE)
  378.         select group
  379.             case 0
  380.                 select shape
  381.                 case 2
  382.                     pobj=createobjectbox(sizex#,sizey#,sizez#)
  383.                 endcase
  384.                 case 1
  385.                     pobj=createobjectsphere(sizex#,32,32)
  386.                 endcase
  387.                 endselect
  388.                 setobjectimage(pobj,currenttexture,0)
  389.                 SetObjectPosition(pobj,cx#,cy#,cz#)
  390.                 set_object_value(pobj)
  391.                 inc objpointer
  392.             endcase
  393.             case 1
  394.                 select shape
  395.                 case 2
  396.                     pobj=createobjectbox(sizex#,sizey#,sizez#)
  397.                 endcase
  398.                 case 1
  399.                     pobj=createobjectsphere(sizex#,32,32)
  400.                 endcase
  401.                 endselect
  402.                 setobjectimage(pobj,currenttexture,0)
  403.                 SetObjectPosition(pobj,cx#,cy#,cz#)
  404.                 set_object_value(pobj)
  405.                 inc objpointer
  406.             endcase
  407.             case 6
  408.                 lobj=loadobject("lightbulb.obj")
  409.                 setobjectposition(lobj,cx#,cy#,cz#)
  410.                 setobjectcolor(lobj,red,green,blue,255)
  411.                 createpointlight(lightnumber,cx#,cy#+10,cz#,80,red,green,blue)
  412.                 setpointlightposition(lightnumber,cx#,cy#,cz#)
  413.                 setobjectlightmode(lobj,0)
  414.                 //SetPointLightMode(lightnumber,1)
  415.                 light[lightnumber].ObjID=lobj
  416.                 light[lightnumber].lightID=lightnumber
  417.                 light[lightnumber].x#=cx#
  418.                 light[lightnumber].y#=cy#
  419.                 light[lightnumber].z#=cz#
  420.                 light[lightnumber].red=red
  421.                 light[lightnumber].green=green
  422.                 light[lightnumber].blue=blue
  423.                 light[lightnumber].flicker=flicker
  424.                 inc lightnumber
  425.             endcase
  426.         endselect  
  427.     endif
  428.     if getrawkeypressed(KEY_LBRACKET) and currenttexture>1
  429.         dec currenttexture
  430.         setspriteimage(1,currenttexture)
  431.     endif
  432.     if getrawkeypressed(KEY_RBRACKET)
  433.         inc currenttexture
  434.         setspriteimage(1,currenttexture)
  435.     endif
  436.     if GetRawKeyPressed(KEY_F1)
  437.         load_level(level)
  438.     endif
  439.     if GetRawKeyPressed(KEY_F4)
  440.         save_level(level)
  441.     endif
  442. endfunction
  443. function read_boxes()
  444.     if getrawkeypressed(KEY_ENTER)
  445.         repeat
  446.             focus=GetCurrentEditBox()
  447.             select focus
  448.                 case Groupeditbox
  449.                     t$=geteditboxtext(Groupeditbox)
  450.                     group=val(t$)
  451.                     select group
  452.                         case 6
  453.                             change_cursor(6)
  454.                         endcase
  455.                         case 0
  456.                             change_cursor(0)
  457.                         endcase
  458.                     endselect          
  459.                 endcase
  460.                 case rededitbox
  461.                     t$=geteditboxtext(rededitbox)
  462.                     red=val(t$)
  463.                 endcase
  464.                 case greeneditbox
  465.                     t$=geteditboxtext(greeneditbox)
  466.                     green=val(t$)
  467.                 endcase
  468.                 case gametypeeditbox
  469.                     t$=geteditboxtext(gametypeeditbox)
  470.                     gametype=val(t$)
  471.                 endcase
  472.                 case blueeditbox
  473.                     t$=geteditboxtext(blueeditbox)
  474.                     blue=val(t$)
  475.                 endcase
  476.                 case sizexeditbox
  477.                     t$=geteditboxtext(sizexeditbox)
  478.                     sizex#=valfloat(t$)
  479.                     change_cursor(0)
  480.                 endcase
  481.                 case sizeyeditbox
  482.                     t$=geteditboxtext(sizeyeditbox)
  483.                     sizey#=valfloat(t$)
  484.                     change_cursor(0)
  485.                 endcase
  486.                 case sizezeditbox
  487.                     t$=geteditboxtext(sizezeditbox)
  488.                     sizez#=valfloat(t$)
  489.                     change_cursor(0)
  490.                 endcase
  491.                 case pbodyeditbox
  492.                     t$=geteditboxtext(pbodyeditbox)
  493.                     phybody=val(t$)
  494.                 endcase
  495.                 case pshapeeditbox
  496.                     t$=geteditboxtext(pshapeeditbox)
  497.                     physhape=val(t$)
  498.                 endcase
  499.                 case shapeeditbox
  500.                     t$=geteditboxtext(shapeeditbox)
  501.                     shape=val(t$)
  502.                     change_cursor(0)
  503.                 endcase
  504.                 endselect
  505.             sync()
  506.         until GetRawKeyReleased(KEY_ENTER)
  507.     endif
  508. endfunction
  509. function change_cursor(mode)
  510.     if getobjectexists(cursorobject)
  511.         deleteobject(cursorobject)
  512.     endif
  513.     select mode
  514.         case 0
  515.             select shape
  516.                 case 2
  517.                     createobjectbox(cursorobject,sizex#,sizey#,sizez#)
  518.                 endcase
  519.                 case 1
  520.                     createobjectsphere(cursorobject,sizex#,32,32)
  521.                 endcase
  522.             endselect
  523.             setobjectimage(cursorobject,1,0)
  524.             SetObjectTransparency(cursorobject,1)
  525.             SetObjectCollisionMode(cursorobject,0)
  526.             setobjectposition(cursorobject,cx#,cy#,cz#)            
  527.         endcase
  528.         case 6
  529.             loadobject(cursorobject,"lightbulb.obj")
  530.             setobjectposition(cursorobject,cx#,cy#,cz#)
  531.             setobjectcolor(cursorobject,red,green,blue,255)
  532.         endcase
  533.     endselect  
  534. endfunction
  535. function caster(oldx#,oldy#,oldz#)
  536.     pobj = ObjectsphereCast(0,oldx#,oldy#,oldz#,getobjectx(cursorobject),getobjecty(cursorobject),getobjectz(cursorobject),rad#/2)
  537.     if pobj>0
  538.         obj=GetObjectRayCastHitID(0)
  539.     endif
  540. endfunction obj
  541. function set_object_value(objnum)
  542.     object[objpointer].ID=objnum
  543.     object[objpointer].image=currenttexture
  544.     object[objpointer].x#=cx#
  545.     object[objpointer].y#=cy#
  546.     object[objpointer].z#=cz#
  547.     object[objpointer].pb=phybody
  548.     object[objpointer].ps=physhape
  549.     object[objpointer].group=group
  550.     object[objpointer].transparency=transparency
  551.     object[objpointer].visible=visibility
  552.     object[objpointer].shape=shape
  553.     object[objpointer].red=red
  554.     object[objpointer].green=green
  555.     object[objpointer].blue=blue
  556.     object[objpointer].rotatex=rotx
  557.     object[objpointer].rotatey=roty
  558.     object[objpointer].rotatez=rotz
  559.     object[objpointer].friction#=friction#
  560.     object[objpointer].sizex#=sizex#
  561.     object[objpointer].sizey#=sizey#
  562.     object[objpointer].sizez#=sizez#
  563.     object[objpointer].name$ = name$
  564. endfunction
  565. function clear_level()
  566.     for n=1 to maxobjects
  567.         if getobjectexists(object[n].ID)
  568.             deleteobject(object[n].ID)
  569.         endif
  570.         if getobjectexists(light[n].ObjID)
  571.             deleteobject(light[n].ObjID)
  572.             deletepointlight(light[n].lightID)
  573.         endif
  574.         object[n].ID=0
  575.         object[n].image=0
  576.         object[n].x#=0
  577.         object[n].y#=0
  578.         object[n].z#=0
  579.         object[n].pb=0
  580.         object[n].ps=0
  581.         object[n].group=0
  582.         object[n].transparency=0
  583.         object[n].visible=0
  584.         object[n].shape=0
  585.         object[n].red=0
  586.         object[n].green=0
  587.         object[n].blue=0
  588.         object[n].rotatex=0
  589.         object[n].rotatey=0
  590.         object[n].rotatez=0
  591.         object[n].friction#=0
  592.         object[n].sizex#=0
  593.         object[n].sizey#=0
  594.         object[n].sizez#=0
  595.         object[n].selected=0
  596.         object[n].deleted=0
  597.     next n
  598.     cx#=0
  599.     cy#=0
  600.     cz#=0
  601.     objpointer=1
  602.     lightnumber=1
  603.     group=0
  604.     seteditboxtext(groupeditbox,str(group))
  605.     change_cursor(0)
  606. endfunction
  607. function save_level(level)
  608.     select gametype
  609.         case 0
  610.             f$=""
  611.             f$="levelP"
  612.             f$=f$+str(level)
  613.             f$=f$+".lev"
  614.         endcase
  615.         case 1
  616.             f$=""
  617.             f$="levelF"
  618.             f$=f$+str(level)
  619.             f$=f$+".lev"
  620.         endcase
  621.         case 2
  622.             f$=""
  623.             f$="levelR"
  624.             f$=f$+str(level)
  625.             f$=f$+".lev"
  626.         endcase
  627.         case 3
  628.             f$=""
  629.             f$="levelB"
  630.             f$=f$+str(level)
  631.             f$=f$+".lev"       
  632.         endcase
  633.         case 5
  634.             f$=""
  635.             f$="levelS"
  636.             f$=f$+str(level)
  637.             f$=f$+".lev"       
  638.         endcase
  639.     endselect
  640.     myfile=opentowrite(f$,0)
  641.     for n=1 to maxobjects
  642.         writestring(myfile,object[n].name$)
  643.         writefloat(myfile,object[n].x#)
  644.         writefloat(myfile,object[n].y#)
  645.         writefloat(myfile,object[n].z#)
  646.         writefloat(myfile,object[n].sizex#)
  647.         writefloat(myfile,object[n].sizey#)
  648.         writefloat(myfile,object[n].sizez#)
  649.         writefloat(myfile,object[n].friction#)
  650.         writeinteger(myfile,object[n].ID)
  651.         writeinteger(myfile,object[n].image)
  652.         writeinteger(myfile,object[n].group)
  653.         writeinteger(myfile,object[n].shape)
  654.         writeinteger(myfile,object[n].visible)
  655.         writeinteger(myfile,object[n].transparency)
  656.         writeinteger(myfile,object[n].pb)
  657.         writeinteger(myfile,object[n].ps)
  658.         writeinteger(myfile,object[n].rotatex)
  659.         writeinteger(myfile,object[n].rotatey)
  660.         writeinteger(myfile,object[n].rotatez)
  661.         writeinteger(myfile,object[n].red)
  662.         writeinteger(myfile,object[n].green)
  663.         writeinteger(myfile,object[n].blue)
  664.         writeinteger(myfile,object[n].deleted)
  665.         //************* Write the lights ****************
  666.         writefloat(myfile,light[n].x#)
  667.         writefloat(myfile,light[n].y#)
  668.         writefloat(myfile,light[n].z#)
  669.         writeinteger(myfile,light[n].ObjID)
  670.         writeinteger(myfile,light[n].lightID)
  671.         writeinteger(myfile,light[n].red)
  672.         writeinteger(myfile,light[n].green)
  673.         writeinteger(myfile,light[n].blue)
  674.         writeinteger(myfile,light[n].flicker)
  675.         writeinteger(myfile,light[n].deleted)
  676.     next n
  677.     writeinteger(myfile,objpointer)
  678.     writeinteger(myfile,lightnumber)
  679.     closefile(myfile)
  680.     create_my_text(700,1,180,35,0,255,0,"Saved!!",0)
  681.     sync()
  682.     sleep(2000)
  683.     deletetext(700)
  684. endfunction
  685. function load_level(level)
  686.     select gametype
  687.         case 0
  688.             f$=""
  689.             f$="levelP"
  690.             f$=f$+str(level)
  691.             f$=f$+".lev"
  692.         endcase
  693.         case 1
  694.             f$=""
  695.             f$="levelF"
  696.             f$=f$+str(level)
  697.             f$=f$+".lev"
  698.         endcase
  699.         case 2
  700.             f$=""
  701.             f$="levelR"
  702.             f$=f$+str(level)
  703.             f$=f$+".lev"
  704.         endcase
  705.         case 3
  706.             f$=""
  707.             f$="levelB"
  708.             f$=f$+str(level)
  709.             f$=f$+".lev"       
  710.         endcase
  711.         case 5
  712.             f$=""
  713.             f$="levelS"
  714.             f$=f$+str(level)
  715.             f$=f$+".lev"       
  716.         endcase
  717.     endselect
  718.     if getfileexists(f$)=1
  719.         clear_level()
  720.         myfile=opentoread(f$)
  721.         for n=1 to maxobjects
  722.             object[n].name$=readstring(myfile)
  723.             object[n].x# =readfloat(myfile)
  724.             object[n].y# =readfloat(myfile)
  725.             object[n].z# =readfloat(myfile)
  726.             object[n].sizex# =readfloat(myfile)
  727.             object[n].sizey# =readfloat(myfile)
  728.             object[n].sizez# =readfloat(myfile)
  729.             object[n].friction# = readfloat(myfile)
  730.             object[n].ID = readinteger(myfile)
  731.             object[n].image = readinteger(myfile)
  732.             object[n].group = readinteger(myfile)
  733.             object[n].shape = readinteger(myfile)
  734.             object[n].visible = readinteger(myfile)
  735.             object[n].transparency = readinteger(myfile)
  736.             object[n].pb = readinteger(myfile)
  737.             object[n].ps = readinteger(myfile)
  738.             object[n].rotatex = readinteger(myfile)
  739.             object[n].rotatey = readinteger(myfile)
  740.             object[n].rotatez = readinteger(myfile)
  741.             object[n].red = readinteger(myfile)
  742.             object[n].green = readinteger(myfile)
  743.             object[n].blue = readinteger(myfile)
  744.             object[n].deleted = readinteger(myfile)
  745.             light[n].x#=readfloat(myfile)
  746.             light[n].y#=readfloat(myfile)
  747.             light[n].z#=readfloat(myfile)
  748.             light[n].ObjID=readinteger(myfile)
  749.             light[n].lightID=readinteger(myfile)
  750.             light[n].red=readinteger(myfile)
  751.             light[n].green=readinteger(myfile)
  752.             light[n].blue=readinteger(myfile)
  753.             light[n].flicker=readinteger(myfile)
  754.             light[n].deleted=readinteger(myfile)
  755.         next n
  756.         objpointer=readinteger(myfile)
  757.         lightnumber=readinteger(myfile)
  758.         closefile(myfile)
  759.         for n=1 to maxobjects
  760.             if object[n].ID>0
  761.                 select object[n].shape
  762.                     case 2
  763.                         createobjectbox(object[n].ID,object[n].sizex#,object[n].sizey#,object[n].sizez#)
  764.                     endcase
  765.                     case 1
  766.                         createobjectsphere(object[n].ID,object[n].sizex#,32,32)
  767.                     endcase
  768.                 endselect
  769.                 setobjectimage(object[n].ID,object[n].image,0)
  770.                 SetObjectTransparency(object[n].ID,object[n].transparency)
  771.                 SetObjectVisible(object[n].ID,object[n].visible)
  772.                 setobjectcolor(object[n].ID,object[n].red,object[n].green,object[n].blue,255)
  773.                 SetObjectRotation(object[n].ID,object[n].rotatex,object[n].rotatey,object[n].rotatez)
  774.                 setobjectposition(object[n].ID,object[n].x#,object[n].y#,object[n].z#)                 
  775.                    
  776.             endif
  777.         next n
  778.         for n=1 to maxobjects
  779.             if light[n].lightID>0
  780.                 loadobject(light[n].ObjID,"lightbulb.obj")
  781.                 setobjectposition(light[n].ObjID,light[n].x#,light[n].y#,light[n].z#)
  782.                 createpointlight(light[n].lightID,light[n].x#,light[n].y#,light[n].z#,120,light[n].red,light[n].green,light[n].blue)
  783.                 setpointlightposition(light[n].lightID,light[n].x#,light[n].y#,light[n].z#)
  784.             endif
  785.         next n 
  786.     endif              
  787. endfunction
  788. function createobjectphysics(myobj,myphybody,myphyshape)
  789.     select myphybody
  790.         case 1
  791.             Create3DPhysicsStaticBody(myobj)
  792.         endcase
  793.         case 2
  794.             Create3DPhysicsDynamicBody(myobj)
  795.         endcase
  796.     endselect
  797.     select myphyshape
  798.         case 1
  799.             SetObjectShapesphere(myobj)
  800.         endcase
  801.         case 2
  802.             SetObjectShapebox(myobj)
  803.         endcase
  804.  
  805.     endselect
  806.             //SetObject3DPhysicsMass(myobj,0.7)
  807. endfunction
  808. function Test_Level()
  809.     if GetVirtualJoystickExists(1)=0
  810.         addvirtualjoystick(1,150,600,100)
  811.     endif
  812.     if GetVirtualJoystickExists(2)=0
  813.         addvirtualjoystick(2,1000,600,100)
  814.     endif
  815.     CameraDistance# =   40
  816.     setsunactive(1)
  817.     //SetAmbientColor( 0,0,0 )
  818.         oldcamrx=getcameraanglex(1)
  819.         oldcamry=getcameraangley(1)
  820.         oldcamrz=getcameraanglez(1)
  821.         setcamerarotation(1,0,0,0)
  822.    
  823.     for n=1 to maxobjects
  824.         if object[n].ID>0
  825.             createobjectphysics(object[n].ID,object[n].pb,object[n].ps)
  826.             SetObject3DPhysicsFriction(object[n].ID,1)
  827.             if object[n].group=1
  828.                 player=object[n].ID
  829.                 setobjectscale(player,0.6,0.6,0.6)
  830.                 SetObject3DPhysicsRollingFriction(player,1)
  831.                 setobject3dphysicscansleep(player,0)
  832.             endif
  833.         endif
  834.         if light[n].lightID>0
  835.             setobjectvisible(light[n].ObjID,0)
  836.         endif
  837.     next n
  838.     Repeat
  839.         px#=getobjectx(player)
  840.         py#=getobjecty(player)
  841.         pz#=getobjectz(player)
  842.         Step3DPhysicsWorld()
  843.         if getrawkeypressed(KEY_E)
  844.             quit=1
  845.         endif
  846.         //SetObject3DPhysicsangularVelocity(player,GetVirtualJoystickX(1),0,GetVirtualJoystickY(1),100)
  847.         if GetVirtualJoystickX(1)>0
  848.             movleft=1
  849.             movright=0
  850.            
  851.         endif
  852.         if movleft=1
  853.             SetObject3DPhysicsangularVelocity(player,0,0,400,400)
  854.         endif
  855.         if GetVirtualJoystickX(1)<0
  856.             movright=1
  857.             movleft=0
  858.         endif
  859.         if movright=1
  860.             SetObject3DPhysicsangularVelocity(player,0,0,-400,400)
  861.         endif
  862.         if GetVirtualJoystickX(1)=0
  863.             movright=0
  864.             movleft=0
  865.             SetObject3DPhysicsAngularVelocity(player,0.1,0.1,0.1,0.1)
  866.         endif
  867.        
  868.        
  869.        
  870.         if gametype=1
  871.             if GetVirtualJoystickY(1)<0
  872.                 SetObject3DPhysicsangularVelocity(player,-200,0,0,200)
  873.             endif
  874.             if GetVirtualJoystickY(1)>0
  875.                 SetObject3DPhysicsangularVelocity(player,200,0,0,200)
  876.             endif
  877.             if getvirtualjoystickx(2)<0
  878.                 //setcamerarotation(1,0,GetCameraAngleY(1)-1,getcameraanglez(1))
  879.                 //rotyy#=rotyy#-1
  880.             endif
  881.         endif
  882.         if getrawkeypressed(KEY_SPACE)
  883.             SetObject3DPhysicslinearVelocity(player,GetObject3DPhysicslinearVelocityX(player),300,0,300)
  884.         endif
  885.         select gametype
  886.             case 0
  887.                 setcameralookat(1,px#,py#,pz#,0)
  888.                 setcameraposition(1,px#,py#+90,pz#+90)
  889.             endcase
  890.             case 1
  891.                 setcameraposition(1,px#,py#,pz#)
  892.             endcase
  893.         endselect
  894.         //setobjectrotation(player,0,rotyy#,0)
  895.         sync()
  896.     until quit=1
  897.     quit=0
  898.     setsunactive(1)
  899.     SetAmbientColor( 255,255,255 )
  900.     CameraDistance# =   130
  901.     Level_cleanup()
  902.     for n=1 to maxobjects
  903.         if light[n].lightID>0
  904.             setobjectvisible(light[n].ObjID,1)
  905.         endif
  906.     next n
  907. endfunction
  908. function hide_stuff()
  909.     setobjectvisible(cursorobject,0)
  910.     setobjectposition(cursorobject,-1000000,-1000000,-1000000)
  911.     for n=1 to 100
  912.         if geteditboxexists(n)
  913.             seteditboxvisible(n,0)
  914.         endif
  915.         if gettextexists(n)
  916.             settextvisible(n,0)
  917.         endif
  918.     next n
  919. endfunction
  920. function show_stuff()
  921.     setobjectvisible(cursorobject,1)
  922.     setobjectposition(cursorobject,cx#,cy#,cz#)
  923.     for n=1 to 100
  924.         if geteditboxexists(n)
  925.             seteditboxvisible(n,1)
  926.         endif
  927.         if gettextexists(n)
  928.             settextvisible(n,1)
  929.         endif
  930.     next n
  931. endfunction
  932. function Level_cleanup()
  933.     for n=1 to maxobjects
  934.         if object[n].id>0
  935.             setobjectposition(object[n].id,object[n].x#,object[n].y#,object[n].z#)
  936.             delete3dphysicsbody(object[n].id)
  937.         endif
  938.     next n
  939. endfunction
  940.  
  941. function load_model(currenttexture)
  942.     model$=ChooseRawFile("*.obj")
  943.     if model$>""
  944.         name$=model$
  945.         `myobject[objectnumber].name$=myname$
  946.         pobj=loadobject(model$)
  947.         setobjectposition(pobj,cx#,cy#,cz#)
  948.         setobjectscale(pobj,sizex#,sizey#,sizez#)
  949.         setobjectimage(pobj,currenttexture,0)
  950.         set_object_value(pobj)
  951.         inc objpointer
  952.     endif
  953. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement