Ooops
November 24, 2020, 07:18:47 AM

Author Topic: [bb] Project PLASMA FPS 2004: Markerset.bb by Techlord [ 1+ years ago ]  (Read 704 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Project PLASMA FPS 2004: Markerset.bb
Author : Techlord
Posted : 1+ years ago

Description : Marketset Code Module used in the Waypoint Edit Utility.

Requires: start.bb, vector.bb, stack.bb, action.bb,
clock.bb, queue.bb,worker.bb, bot.bb, camera.bb,
level.bb

Last Update 02/03/04
Check out the <a href="http://techlord.blackeve.com/ppf2k4.zip" target="_blank">Wip Zip[/url] for demos and more code!


Code :
Code: BlitzBasic
  1. ;============================
  2. ;MARKERSET MODULE for WAYPOINTER
  3. ;============================
  4. Const MARKERSET_MAX%=32
  5. Dim markersetId.markerset(MARKERSET_MAX%)
  6. Global markersetIndex.stack=stackIndexCreate(MARKERSET_MAX%)
  7. Global markerset.markerset
  8. Global markersetGuide,markersetGuideWidth#,markersetGuideHeight#,markersetGuideLength#
  9. Dim markersetkeymap(16)
  10. Dim markerSelected(MARKERSET_MAX%)
  11.  
  12. Type markerset
  13.         Field id%
  14.         Field typeid%
  15.         Field width%
  16.         Field length%
  17.         Field spacing#
  18.         Field costfactor%
  19.         Field scale#
  20.         Field threshholds%
  21.         Field threshhold#[24]
  22.         Field waypoints%
  23.         Field waypoint.waypoint[WAYPOINT_MAX]
  24.         Field complete%
  25. End Type
  26.  
  27. Function markersetStart()
  28.         waypointStart()
  29.         ;markersetGuide
  30.         markersetGuideWidth#=20
  31.         markersetGuideLength#=20
  32.         markersetGuide=markersetGuideCreate(markersetGuideWidth#,markersetGuideLength#)
  33.         ;keymap
  34.         markersetKeymapAssign(13)
  35. End Function
  36.  
  37. Function markersetStop()
  38.         For this.markerset=Each markerset
  39.                 markersetDelete(this)
  40.         Next
  41. End Function
  42.  
  43. Function markersetNew.markerset()
  44.         this.markerset=New markerset
  45.         thisid%=0
  46.         this    ypeid%=0
  47.         thiswidth%=0
  48.         thislength%=0
  49.         thisspacing#=0.0
  50.         thiscostfactor%=0
  51.         thisscale#=0.0
  52.         this    hreshholds%=0
  53.         thiswaypoints%=0
  54.         thiscomplete%=0
  55.         thisid%=StackPop(markersetIndex.stack)
  56.         markersetId(thisid)=this
  57.         Return this
  58. End Function
  59.  
  60. Function markersetDelete(this.markerset)
  61.         markersetId(thisid)=Null
  62.         StackPush(markersetIndex.stack,thisid%)
  63.         Delete this
  64. End Function
  65.  
  66. Function markersetUpdate()
  67.         markersetGuideControl();waypoint guide control
  68.         For this.markerset=Each markerset
  69.                 ;apply gravity to waypoints in set
  70.                 For loop = 1 To thiswaypoints%
  71.                         If thiswaypoint[loop]state%=1  
  72.                                 For loop2 = 1 To this   hreshholds%
  73.                                         If EntityY#(thiswaypoint[loop]entity%)=this     hreshhold#[loop2]
  74.                                                 thiscomplete%=thiscomplete%+1
  75.                                                 thiswaypoint[loop]state%=0
  76.                                                 HideEntity thiswaypoint[loop]entity%
  77.                                                 stackPush(waypointAvail,thiswaypoint[loop]id%)
  78.                                         EndIf
  79.                                 Next
  80.                                 thiswaypoint[loop]e%=thiswaypoint[loop]e%+5;terrain cost testing
  81.                                 TranslateEntity thiswaypoint[loop]entity%,0,-thisscale#,0
  82.                                 If EntityCollided(thiswaypoint[loop]entity%,1)
  83.                                         thiscomplete%=thiscomplete%+1
  84.                                         thiswaypoint[loop]state%=2
  85.                                         EntityColor thiswaypoint[loop]entity%,0,255,0;testing
  86.                                         EntityType thiswaypoint[loop]entity%,0
  87.                                 EndIf
  88.                         EndIf  
  89.                 Next
  90.                 If thiscomplete%=thiswaypoints% markersetDelete(this);remove waypoint
  91.         Next
  92. End Function
  93.  
  94. Function markersetSave(filename$)
  95.         file=WriteFile(filename$+".markerset")
  96.         For waypoint.waypoint= Each waypoint
  97.                 If waypointstate%=2
  98.                         waypointpositionx#=EntityX(waypointentity%)
  99.                         waypointpositiony#=EntityY(waypointentity%)
  100.                         waypointpositionz#=EntityZ(waypointentity%)
  101.                         waypointWrite(file,waypoint)
  102.                 EndIf  
  103.         Next
  104.         CloseFile(file)
  105. End Function
  106.  
  107. Function markersetSave2(filename$)
  108.         file=WriteFile(filename$+".waypoints.bin")
  109.         For waypoint.waypoint= Each waypoint
  110.                 If waypointstate%=2
  111.                         waypointpositionx#=EntityX(waypointentity%)
  112.                         waypointpositiony#=EntityY(waypointentity%)
  113.                         waypointpositionz#=EntityZ(waypointentity%)
  114.                         vectorWrite(file,waypointposition)
  115.                 EndIf  
  116.         Next
  117.         CloseFile(file)
  118. End Function
  119.  
  120. Function markersetOpen(filename$)
  121.         file=ReadFile(filename+".markerset")
  122.         If file
  123.                 Repeat
  124.                         waypoint.waypoint=waypointRead(file) ;replace waypoint initialized at markersetStart()
  125.                         waypointentity%=waypointId(waypointid)entity%
  126.                         waypointDelete(waypointId(waypointid))
  127.                         waypointId(stackPop(waypointIndex))=waypoint
  128.                         PositionEntity waypointentity%,waypointpositionx#,waypointpositiony#,waypointpositionz#
  129.                         EntityColor waypointentity%,0,255,0
  130.                         ShowEntity waypointentity%
  131.                         ScaleEntity waypointentity%,.5,.1,.5
  132.                 Until Eof(file)
  133.                 CloseFile(file)
  134.                 ;correct WaypointAvail
  135.                 waypointAvailpointer=reset
  136.                 For waypoint.waypoint=Each waypoint
  137.                         If waypointstate%=0 stackPush(waypointAvail,waypointid%)               
  138.                 Next           
  139.         EndIf
  140. End Function
  141.  
  142. Function markersetCreate.markerset(scale#,costfactor%,spacing#)
  143.         ;waypoint generate
  144.         this.markerset=markersetNew()
  145.         this    ypeid%=1
  146.         thiswidth%=Ceil(Abs(markersetGuideWidth#)/spacing#)
  147.         thislength%=Ceil(Abs(markersetGuideLength#)/spacing#)
  148.         thisspacing#=spacing#
  149.         thiscostfactor%=costfactor%
  150.         thisscale#=scale#
  151.         fontoffset%=FontHeight()+2
  152.         Locate 0,fontoffset%*5
  153.         FlushKeys()
  154.         this    hreshholds%=Input("Threshholds [Use 1]:")
  155.         For loop = 1 To this    hreshholds%
  156.                 markersetThreshholdSet(this,loop,Input("Threshhold Height Value#"+Str(loop)+":"));
  157.         Next
  158.         For loop = 0 To thiswidth%
  159.                 For loop2 = 0 To thislength%
  160.                         thiswaypoints%=thiswaypoints%+1
  161.                         thiswaypoint.waypoint[thiswaypoints%]=waypointID(stackPop(waypointAvail))
  162.                         thiswaypoint[thiswaypoints%]state%=1
  163.                         ShowEntity thiswaypoint[thiswaypoints%]entity%
  164.                         PositionEntity thiswaypoint[thiswaypoints%]entity%,EntityX(markersetGuide)+loop*thisspacing#,EntityY#(markersetGuide),EntityZ#(markersetGuide)+loop2*thisspacing#
  165.                         ScaleEntity thiswaypoint[thiswaypoints%]entity%,thisscale#,.1,thisscale#
  166.                         EntityColor thiswaypoint[thiswaypoints%]entity%,255,0,0
  167.                         EntityType thiswaypoint[thiswaypoints%]entity%,3
  168.                         EntityRadius thiswaypoint[thiswaypoints%]entity%,thisscale#
  169.                 Next
  170.         Next   
  171.         Return this    
  172. End Function
  173.  
  174. Function markersetThreshholdSet(this.markerset,index%,threshhold#)
  175.         this    hreshhold#[index%]=threshhold#
  176. End Function
  177.  
  178. Function markersetGuideControl()
  179.         If KeyDown(markersetkeymap(1)) TranslateEntity markersetGuide,0,.5,0;up
  180.         If KeyDown(markersetkeymap(2)) TranslateEntity markersetGuide,0,-.5,0;down
  181.         If KeyDown(markersetkeymap(3)) TranslateEntity markersetGuide,0,0,.5;forward
  182.         If KeyDown(markersetkeymap(4)) TranslateEntity markersetGuide,0,0,-.5;backward         
  183.         If KeyDown(markersetkeymap(5)) TranslateEntity markersetGuide,-.5,0,0;left
  184.         If KeyDown(markersetkeymap(6)) TranslateEntity markersetGuide,.5,0,0;right
  185.         markersetGuideHeight#=EntityY(markersetGuide)
  186.         If KeyDown(markersetkeymap(7))
  187.                 markersetGuideLength#=markersetGuideLength#-.5
  188.                 If markersetGuideLength#<1 markersetGuideLength#=1
  189.                 markersetGuideReseat()
  190.         EndIf
  191.         If KeyDown(markersetkeymap(8))
  192.                 markersetGuideLength#=markersetGuideLength#+.5
  193.                 markersetGuideReseat()
  194.         EndIf
  195.         If KeyDown(markersetkeymap(9))
  196.                 markersetGuideWidth#=markersetGuideWidth#-.5
  197.                 If markersetGuideWidth#<1 markersetGuideWidth#=1
  198.                 markersetGuideReseat()
  199.         EndIf
  200.         If KeyDown(markersetkeymap(10))
  201.                 markersetGuideWidth#=markersetGuideWidth#+.5
  202.                 markersetGuideReseat()
  203.         EndIf
  204.         If KeyHit(markersetkeymap(11)) markersetEdit()                 
  205.         If MouseHit(1)
  206.                 FlushKeys()    
  207.                 fontoffset%=FontHeight()+2
  208.                 Locate 0,fontoffset%*2
  209.                 markerset.markerset=markersetCreate(Input("Marker Scale [Use 0.5]:"),Input("CostFactor[Use 0]:"),Input("Marker Spacing [Use 5.0]:"));
  210.         EndIf
  211.         If MouseDown(3) PositionEntity markersetGuide,Ceil(EntityX(cameraentity%)),Ceil(EntityY(cameraentity%)),Ceil(EntityZ(cameraentity%))
  212. End Function
  213.  
  214. Function markersetEdit()
  215.         ShowPointer()
  216.         While Not KeyHit(markersetkeymap(11))
  217.                 If MouseDown(1)=True
  218.                         CameraPick(cameraentity,MouseX(),MouseY())
  219.                         entity%=PickedEntity()
  220.                         If entity%
  221.                                 For loop = 1 To markerSelectedList; check entities on selected list
  222.                                         If entity%=markerSelected(loop) entity%=reset
  223.                                 Next
  224.                                 If entity%
  225.                                         markerSelectedList=markerSelectedList+1
  226.                                         markerSelected(markerSelectedList)=entity%
  227.                                         EntityColor entity%,255,0,0
  228.                                 EndIf
  229.                         EndIf          
  230.                 EndIf
  231.                
  232.                 If KeyDown(markersetkeymap(1))
  233.                         For loop=1 To markerSelectedList
  234.                                 TranslateEntity markerSelected(loop),0,.5,0;up
  235.                         Next
  236.                 EndIf
  237.  
  238.                 If KeyDown(markersetkeymap(2))
  239.                         For loop=1 To markerSelectedList
  240.                                 TranslateEntity markerSelected(loop),0,-.5,0;down
  241.                         Next
  242.                 EndIf
  243.                        
  244.                 If KeyDown(markersetkeymap(3))
  245.                         For loop=1 To markerSelectedList
  246.                                 TranslateEntity markerSelected(loop),0,0,.5;forward
  247.                         Next
  248.                 EndIf  
  249.                
  250.                 If KeyDown(markersetkeymap(4))
  251.                         For loop=1 To markerSelectedList
  252.                                 TranslateEntity markerSelected(loop),0,0,-.5;backward          
  253.                         Next   
  254.                 EndIf
  255.                        
  256.                 If KeyDown(markersetkeymap(5))
  257.                         For loop=1 To markerSelectedList
  258.                                 TranslateEntity markerSelected(loop),-.5,0,0;left
  259.                         Next   
  260.                 EndIf
  261.                        
  262.                 If KeyDown(markersetkeymap(6))
  263.                         For loop=1 To markerSelectedList
  264.                                 TranslateEntity markerSelected(loop),.5,0,0;right
  265.                         Next   
  266.                 EndIf
  267.                
  268.                 If MouseHit(2) ;unselect
  269.                         For loop=1 To markerSelectedList
  270.                                 EntityColor markerSelected(loop),0,255,0
  271.                         Next
  272.                         markerSelectedList=reset       
  273.                 EndIf  
  274.  
  275.                 If KeyHit(211) ;remove
  276.                         For loop=1 To markerSelectedList
  277.                                 For loop2 = 1 To WAYPOINT_MAX
  278.                                         If waypointid(loop2)entity%=markerSelected(loop)
  279.                                                 waypointid(loop2)state%=0
  280.                                                 HideEntity waypointid(loop2)entity%
  281.                                                 stackPush(waypointAvail,waypointid(loop2)id%)
  282.                                         EndIf  
  283.                                 Next   
  284.                         Next
  285.                         markerSelectedList=reset       
  286.                 EndIf
  287.                
  288.                 If KeyHit(markersetkeymap(7)) ;height balance
  289.                         For loop=2 To markerSelectedList       
  290.                                 PositionEntity markerSelected(loop),EntityX(markerSelected(loop)),EntityY(markerSelected(1)),EntityZ(markerSelected(loop))
  291.                         Next
  292.                 EndIf
  293.  
  294.                 RenderWorld()
  295.                
  296.                 If KeyDown(markersetkeymap(12)) markersetHelp()
  297.  
  298.                 If KeyHit(markersetkeymap(13))
  299.                         Text 0,0,"Saving "+levelfilename$+".markerset"
  300.                         markersetSave(levelfilename$)
  301.                         markersetSave2(levelfilename$)
  302.                 EndIf  
  303.                        
  304.                
  305.                 Text 0,0,"Edit Mode"
  306.         Flip()
  307.         Wend
  308.         For loop = 1 To WAYPOINT_MAX
  309.                 waypoint.waypoint=waypointId(loop)
  310.                 If waypointstate%=2
  311.                         EntityColor waypointentity,0,255,0
  312.                         waypointpositionX#=EntityX(waypointentity%)
  313.                         waypointpositiony#=EntityY(waypointentity%)
  314.                         waypointpositionz#=EntityZ(waypointentity%)
  315.                 EndIf
  316.         Next
  317.         FlushKeys()
  318.         FlushMouse()
  319.         HidePointer()
  320. End Function
  321.  
  322. Function markersetKeymapAssign(keys%)
  323.         Restore markersetkeymapdata
  324.         For loop = 1 To keys%
  325.                 Read key%
  326.                 markersetkeymap(loop)=key%
  327.         Next   
  328. End Function
  329.  
  330. .markersetkeymapdata
  331. ;    pgU pgD up  dwn lft rgt i  m  j  k  e  f1 f2
  332. Data 201,209,200,208,203,205,50,23,36,37,18,59,60
  333.  
  334. Function markersetGuideCreate(width#,length#)
  335.         sprite=CreateMesh()
  336.         brush=CreateBrush(255,255,255)
  337.         surface=CreateSurface(sprite,brush)
  338.         FreeBrush brush
  339.         AddVertex (surface,0,0,length#,1,0)  ; top left 0,1;1,0
  340.         AddVertex (surface,width#,0,length#,0,0)   ; top right 1,1;1,1
  341.         AddVertex (surface,0,0,0,1,1) ; bottom left 0,0;,0,0
  342.         AddVertex (surface,width#,0,0,0,1)  ; bottom right 1,0;0,1
  343.         AddTriangle(surface,0,1,2)
  344.         AddTriangle(surface,3,2,1)
  345.         EntityColor sprite,255,255,0
  346.         EntityAlpha sprite,.4  
  347.         EntityFX sprite,1+4+8+16
  348.         EntityBlend sprite,3   
  349.         Return sprite
  350. End Function
  351.  
  352. Function markersetGuideReseat()
  353.         x#=EntityX(markersetGuide)
  354.         y#=EntityY(markersetGuide)
  355.         z#=EntityZ(markersetGuide)
  356.         FreeEntity markersetGuide
  357.         markersetGuide=markersetGuideCreate(markersetGuideWidth#,markersetGuideLength#)
  358.         PositionEntity markersetGuide,x#,y#,z#
  359. End Function
  360.  
  361.  
  362. Function markersetHelp()
  363.         fontoffset%=FontHeight()+2
  364.         Color 63,255,127         
  365.         Text 0,fontoffset%*3,"Camera Controls"
  366.         Text 0,fontoffset%*4,"    Mouse - Rotate"
  367.         Text 0,fontoffset%*5,"    W - Forward"
  368.         Text 0,fontoffset%*6,"    S - Backward"  
  369.         Text 0,fontoffset%*7,"    A - Strafe Left"
  370.         Text 0,fontoffset%*8,"    D - Strafe Right"  
  371.         Text 0,fontoffset%*9,"    Q - Up"
  372.         Text 0,fontoffset%*10,"    Z - Down"
  373.         Text 0,fontoffset%*11,"    Mouse B3 - Fetch Guide"
  374.         Color 255,255,0        
  375.         Text 200,fontoffset%*3,"Guide Controls"
  376.         Text 200,fontoffset%*4,"    Up - Forward"
  377.         Text 200,fontoffset%*5,"    Down - Backward"
  378.         Text 200,fontoffset%*6,"    Left"
  379.         Text 200,fontoffset%*7,"    Right"
  380.         Text 200,fontoffset%*8,"    PageUp - Up"
  381.         Text 200,fontoffset%*9,"    PageDn - Down"
  382.         Text 200,fontoffset%*10,"    J - Scale Width Down"
  383.         Text 200,fontoffset%*11,"    K - Scale Width Up"  
  384.         Text 200,fontoffset%*12,"    I - Scale Length Up"
  385.         Text 200,fontoffset%*13,"    M - Scale Length Down"
  386.         Text 200,fontoffset%*14,"    Mouse B1 - Drop Markers"
  387.         Color 255,255,255        
  388.         Text 400,fontoffset%*3,"Edit Controls"
  389.         Text 400,fontoffset%*4,"    E - Edit Mode On/Off"
  390.         Text 400,fontoffset%*5,"    Mouse - Move Cursor"
  391.         Text 400,fontoffset%*6,"    Mouse B1 - Select Markers"
  392.         Text 400,fontoffset%*7,"    Mouse B2 - Deselect Markers"
  393.         Text 400,fontoffset%*8,"    Movement:"
  394.         Text 400,fontoffset%*9,"      Up - Forward"
  395.         Text 400,fontoffset%*10,"      Down - Backward"
  396.         Text 400,fontoffset%*11,"      Left"
  397.         Text 400,fontoffset%*12,"      Right"
  398.         Text 400,fontoffset%*13,"      PageUp - Up"
  399.         Text 400,fontoffset%*14,"      PageDn - Down"
  400.         Text 400,fontoffset%*15,"    M - Balance Height"
  401.         Text 400,fontoffset%*16,"    Delete"
  402.         Text 400,fontoffset%*17,"    F2 - Save"
  403.  
  404. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal