Code archives/Miscellaneous/Project PLASMA FPS 2004: Markerset.bb
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
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 Wip Zip for demos and more code! | |||||
;============================ ;MARKERSET MODULE for WAYPOINTER ;============================ Const MARKERSET_MAX%=32 Dim markersetId.markerset(MARKERSET_MAX%) Global markersetIndex.stack=stackIndexCreate(MARKERSET_MAX%) Global markerset.markerset Global markersetGuide,markersetGuideWidth#,markersetGuideHeight#,markersetGuideLength# Dim markersetkeymap(16) Dim markerSelected(MARKERSET_MAX%) Type markerset Field id% Field typeid% Field width% Field length% Field spacing# Field costfactor% Field scale# Field threshholds% Field threshhold#[24] Field waypoints% Field waypoint.waypoint[WAYPOINT_MAX] Field complete% End Type Function markersetStart() waypointStart() ;markersetGuide markersetGuideWidth#=20 markersetGuideLength#=20 markersetGuide=markersetGuideCreate(markersetGuideWidth#,markersetGuideLength#) ;keymap markersetKeymapAssign(13) End Function Function markersetStop() For this.markerset=Each markerset markersetDelete(this) Next End Function Function markersetNew.markerset() this.markerset=New markerset this\id%=0 this\typeid%=0 this\width%=0 this\length%=0 this\spacing#=0.0 this\costfactor%=0 this\scale#=0.0 this\threshholds%=0 this\waypoints%=0 this\complete%=0 this\id%=StackPop(markersetIndex.stack) markersetId(this\id)=this Return this End Function Function markersetDelete(this.markerset) markersetId(this\id)=Null StackPush(markersetIndex.stack,this\id%) Delete this End Function Function markersetUpdate() markersetGuideControl();waypoint guide control For this.markerset=Each markerset ;apply gravity to waypoints in set For loop = 1 To this\waypoints% If this\waypoint[loop]\state%=1 For loop2 = 1 To this\threshholds% If EntityY#(this\waypoint[loop]\entity%)=this\threshhold#[loop2] this\complete%=this\complete%+1 this\waypoint[loop]\state%=0 HideEntity this\waypoint[loop]\entity% stackPush(waypointAvail,this\waypoint[loop]\id%) EndIf Next this\waypoint[loop]\e%=this\waypoint[loop]\e%+5;terrain cost testing TranslateEntity this\waypoint[loop]\entity%,0,-this\scale#,0 If EntityCollided(this\waypoint[loop]\entity%,1) this\complete%=this\complete%+1 this\waypoint[loop]\state%=2 EntityColor this\waypoint[loop]\entity%,0,255,0;testing EntityType this\waypoint[loop]\entity%,0 EndIf EndIf Next If this\complete%=this\waypoints% markersetDelete(this);remove waypoint Next End Function Function markersetSave(filename$) file=WriteFile(filename$+".markerset") For waypoint.waypoint= Each waypoint If waypoint\state%=2 waypoint\position\x#=EntityX(waypoint\entity%) waypoint\position\y#=EntityY(waypoint\entity%) waypoint\position\z#=EntityZ(waypoint\entity%) waypointWrite(file,waypoint) EndIf Next CloseFile(file) End Function Function markersetSave2(filename$) file=WriteFile(filename$+".waypoints.bin") For waypoint.waypoint= Each waypoint If waypoint\state%=2 waypoint\position\x#=EntityX(waypoint\entity%) waypoint\position\y#=EntityY(waypoint\entity%) waypoint\position\z#=EntityZ(waypoint\entity%) vectorWrite(file,waypoint\position) EndIf Next CloseFile(file) End Function Function markersetOpen(filename$) file=ReadFile(filename+".markerset") If file Repeat waypoint.waypoint=waypointRead(file) ;replace waypoint initialized at markersetStart() waypoint\entity%=waypointId(waypoint\id)\entity% waypointDelete(waypointId(waypoint\id)) waypointId(stackPop(waypointIndex))=waypoint PositionEntity waypoint\entity%,waypoint\position\x#,waypoint\position\y#,waypoint\position\z# EntityColor waypoint\entity%,0,255,0 ShowEntity waypoint\entity% ScaleEntity waypoint\entity%,.5,.1,.5 Until Eof(file) CloseFile(file) ;correct WaypointAvail waypointAvail\pointer=reset For waypoint.waypoint=Each waypoint If waypoint\state%=0 stackPush(waypointAvail,waypoint\id%) Next EndIf End Function Function markersetCreate.markerset(scale#,costfactor%,spacing#) ;waypoint generate this.markerset=markersetNew() this\typeid%=1 this\width%=Ceil(Abs(markersetGuideWidth#)/spacing#) this\length%=Ceil(Abs(markersetGuideLength#)/spacing#) this\spacing#=spacing# this\costfactor%=costfactor% this\scale#=scale# fontoffset%=FontHeight()+2 Locate 0,fontoffset%*5 FlushKeys() this\threshholds%=Input("Threshholds [Use 1]:") For loop = 1 To this\threshholds% markersetThreshholdSet(this,loop,Input("Threshhold Height Value#"+Str(loop)+":")); Next For loop = 0 To this\width% For loop2 = 0 To this\length% this\waypoints%=this\waypoints%+1 this\waypoint.waypoint[this\waypoints%]=waypointID(stackPop(waypointAvail)) this\waypoint[this\waypoints%]\state%=1 ShowEntity this\waypoint[this\waypoints%]\entity% PositionEntity this\waypoint[this\waypoints%]\entity%,EntityX(markersetGuide)+loop*this\spacing#,EntityY#(markersetGuide),EntityZ#(markersetGuide)+loop2*this\spacing# ScaleEntity this\waypoint[this\waypoints%]\entity%,this\scale#,.1,this\scale# EntityColor this\waypoint[this\waypoints%]\entity%,255,0,0 EntityType this\waypoint[this\waypoints%]\entity%,3 EntityRadius this\waypoint[this\waypoints%]\entity%,this\scale# Next Next Return this End Function Function markersetThreshholdSet(this.markerset,index%,threshhold#) this\threshhold#[index%]=threshhold# End Function Function markersetGuideControl() If KeyDown(markersetkeymap(1)) TranslateEntity markersetGuide,0,.5,0;up If KeyDown(markersetkeymap(2)) TranslateEntity markersetGuide,0,-.5,0;down If KeyDown(markersetkeymap(3)) TranslateEntity markersetGuide,0,0,.5;forward If KeyDown(markersetkeymap(4)) TranslateEntity markersetGuide,0,0,-.5;backward If KeyDown(markersetkeymap(5)) TranslateEntity markersetGuide,-.5,0,0;left If KeyDown(markersetkeymap(6)) TranslateEntity markersetGuide,.5,0,0;right markersetGuideHeight#=EntityY(markersetGuide) If KeyDown(markersetkeymap(7)) markersetGuideLength#=markersetGuideLength#-.5 If markersetGuideLength#<1 markersetGuideLength#=1 markersetGuideReseat() EndIf If KeyDown(markersetkeymap(8)) markersetGuideLength#=markersetGuideLength#+.5 markersetGuideReseat() EndIf If KeyDown(markersetkeymap(9)) markersetGuideWidth#=markersetGuideWidth#-.5 If markersetGuideWidth#<1 markersetGuideWidth#=1 markersetGuideReseat() EndIf If KeyDown(markersetkeymap(10)) markersetGuideWidth#=markersetGuideWidth#+.5 markersetGuideReseat() EndIf If KeyHit(markersetkeymap(11)) markersetEdit() If MouseHit(1) FlushKeys() fontoffset%=FontHeight()+2 Locate 0,fontoffset%*2 markerset.markerset=markersetCreate(Input("Marker Scale [Use 0.5]:"),Input("CostFactor[Use 0]:"),Input("Marker Spacing [Use 5.0]:")); EndIf If MouseDown(3) PositionEntity markersetGuide,Ceil(EntityX(camera\entity%)),Ceil(EntityY(camera\entity%)),Ceil(EntityZ(camera\entity%)) End Function Function markersetEdit() ShowPointer() While Not KeyHit(markersetkeymap(11)) If MouseDown(1)=True CameraPick(camera\entity,MouseX(),MouseY()) entity%=PickedEntity() If entity% For loop = 1 To markerSelectedList; check entities on selected list If entity%=markerSelected(loop) entity%=reset Next If entity% markerSelectedList=markerSelectedList+1 markerSelected(markerSelectedList)=entity% EntityColor entity%,255,0,0 EndIf EndIf EndIf If KeyDown(markersetkeymap(1)) For loop=1 To markerSelectedList TranslateEntity markerSelected(loop),0,.5,0;up Next EndIf If KeyDown(markersetkeymap(2)) For loop=1 To markerSelectedList TranslateEntity markerSelected(loop),0,-.5,0;down Next EndIf If KeyDown(markersetkeymap(3)) For loop=1 To markerSelectedList TranslateEntity markerSelected(loop),0,0,.5;forward Next EndIf If KeyDown(markersetkeymap(4)) For loop=1 To markerSelectedList TranslateEntity markerSelected(loop),0,0,-.5;backward Next EndIf If KeyDown(markersetkeymap(5)) For loop=1 To markerSelectedList TranslateEntity markerSelected(loop),-.5,0,0;left Next EndIf If KeyDown(markersetkeymap(6)) For loop=1 To markerSelectedList TranslateEntity markerSelected(loop),.5,0,0;right Next EndIf If MouseHit(2) ;unselect For loop=1 To markerSelectedList EntityColor markerSelected(loop),0,255,0 Next markerSelectedList=reset EndIf If KeyHit(211) ;remove For loop=1 To markerSelectedList For loop2 = 1 To WAYPOINT_MAX If waypointid(loop2)\entity%=markerSelected(loop) waypointid(loop2)\state%=0 HideEntity waypointid(loop2)\entity% stackPush(waypointAvail,waypointid(loop2)\id%) EndIf Next Next markerSelectedList=reset EndIf If KeyHit(markersetkeymap(7)) ;height balance For loop=2 To markerSelectedList PositionEntity markerSelected(loop),EntityX(markerSelected(loop)),EntityY(markerSelected(1)),EntityZ(markerSelected(loop)) Next EndIf RenderWorld() If KeyDown(markersetkeymap(12)) markersetHelp() If KeyHit(markersetkeymap(13)) Text 0,0,"Saving "+levelfilename$+".markerset" markersetSave(levelfilename$) markersetSave2(levelfilename$) EndIf Text 0,0,"Edit Mode" Flip() Wend For loop = 1 To WAYPOINT_MAX waypoint.waypoint=waypointId(loop) If waypoint\state%=2 EntityColor waypoint\entity,0,255,0 waypoint\position\X#=EntityX(waypoint\entity%) waypoint\position\y#=EntityY(waypoint\entity%) waypoint\position\z#=EntityZ(waypoint\entity%) EndIf Next FlushKeys() FlushMouse() HidePointer() End Function Function markersetKeymapAssign(keys%) Restore markersetkeymapdata For loop = 1 To keys% Read key% markersetkeymap(loop)=key% Next End Function .markersetkeymapdata ; pgU pgD up dwn lft rgt i m j k e f1 f2 Data 201,209,200,208,203,205,50,23,36,37,18,59,60 Function markersetGuideCreate(width#,length#) sprite=CreateMesh() brush=CreateBrush(255,255,255) surface=CreateSurface(sprite,brush) FreeBrush brush AddVertex (surface,0,0,length#,1,0) ; top left 0,1;1,0 AddVertex (surface,width#,0,length#,0,0) ; top right 1,1;1,1 AddVertex (surface,0,0,0,1,1) ; bottom left 0,0;,0,0 AddVertex (surface,width#,0,0,0,1) ; bottom right 1,0;0,1 AddTriangle(surface,0,1,2) AddTriangle(surface,3,2,1) EntityColor sprite,255,255,0 EntityAlpha sprite,.4 EntityFX sprite,1+4+8+16 EntityBlend sprite,3 Return sprite End Function Function markersetGuideReseat() x#=EntityX(markersetGuide) y#=EntityY(markersetGuide) z#=EntityZ(markersetGuide) FreeEntity markersetGuide markersetGuide=markersetGuideCreate(markersetGuideWidth#,markersetGuideLength#) PositionEntity markersetGuide,x#,y#,z# End Function Function markersetHelp() fontoffset%=FontHeight()+2 Color 63,255,127 Text 0,fontoffset%*3,"Camera Controls" Text 0,fontoffset%*4," Mouse - Rotate" Text 0,fontoffset%*5," W - Forward" Text 0,fontoffset%*6," S - Backward" Text 0,fontoffset%*7," A - Strafe Left" Text 0,fontoffset%*8," D - Strafe Right" Text 0,fontoffset%*9," Q - Up" Text 0,fontoffset%*10," Z - Down" Text 0,fontoffset%*11," Mouse B3 - Fetch Guide" Color 255,255,0 Text 200,fontoffset%*3,"Guide Controls" Text 200,fontoffset%*4," Up - Forward" Text 200,fontoffset%*5," Down - Backward" Text 200,fontoffset%*6," Left" Text 200,fontoffset%*7," Right" Text 200,fontoffset%*8," PageUp - Up" Text 200,fontoffset%*9," PageDn - Down" Text 200,fontoffset%*10," J - Scale Width Down" Text 200,fontoffset%*11," K - Scale Width Up" Text 200,fontoffset%*12," I - Scale Length Up" Text 200,fontoffset%*13," M - Scale Length Down" Text 200,fontoffset%*14," Mouse B1 - Drop Markers" Color 255,255,255 Text 400,fontoffset%*3,"Edit Controls" Text 400,fontoffset%*4," E - Edit Mode On/Off" Text 400,fontoffset%*5," Mouse - Move Cursor" Text 400,fontoffset%*6," Mouse B1 - Select Markers" Text 400,fontoffset%*7," Mouse B2 - Deselect Markers" Text 400,fontoffset%*8," Movement:" Text 400,fontoffset%*9," Up - Forward" Text 400,fontoffset%*10," Down - Backward" Text 400,fontoffset%*11," Left" Text 400,fontoffset%*12," Right" Text 400,fontoffset%*13," PageUp - Up" Text 400,fontoffset%*14," PageDn - Down" Text 400,fontoffset%*15," M - Balance Height" Text 400,fontoffset%*16," Delete" Text 400,fontoffset%*17," F2 - Save" End Function |
Comments
None.
Code Archives Forum