[bb] Project PLASMA FPS 2004: Markerset.bb by Techlord [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:38

Previous topic - Next topic

BlitzBot

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</a> for demos and more code!


Code :
Code (blitzbasic) Select
;============================
;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
thisid%=0
this ypeid%=0
thiswidth%=0
thislength%=0
thisspacing#=0.0
thiscostfactor%=0
thisscale#=0.0
this hreshholds%=0
thiswaypoints%=0
thiscomplete%=0
thisid%=StackPop(markersetIndex.stack)
markersetId(thisid)=this
Return this
End Function

Function markersetDelete(this.markerset)
markersetId(thisid)=Null
StackPush(markersetIndex.stack,thisid%)
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 thiswaypoints%
If thiswaypoint[loop]state%=1
For loop2 = 1 To this hreshholds%
If EntityY#(thiswaypoint[loop]entity%)=this hreshhold#[loop2]
thiscomplete%=thiscomplete%+1
thiswaypoint[loop]state%=0
HideEntity thiswaypoint[loop]entity%
stackPush(waypointAvail,thiswaypoint[loop]id%)
EndIf
Next
thiswaypoint[loop]e%=thiswaypoint[loop]e%+5;terrain cost testing
TranslateEntity thiswaypoint[loop]entity%,0,-thisscale#,0
If EntityCollided(thiswaypoint[loop]entity%,1)
thiscomplete%=thiscomplete%+1
thiswaypoint[loop]state%=2
EntityColor thiswaypoint[loop]entity%,0,255,0;testing
EntityType thiswaypoint[loop]entity%,0
EndIf
EndIf
Next
If thiscomplete%=thiswaypoints% markersetDelete(this);remove waypoint
Next
End Function

Function markersetSave(filename$)
file=WriteFile(filename$+".markerset")
For waypoint.waypoint= Each waypoint
If waypointstate%=2
waypointpositionx#=EntityX(waypointentity%)
waypointpositiony#=EntityY(waypointentity%)
waypointpositionz#=EntityZ(waypointentity%)
waypointWrite(file,waypoint)
EndIf
Next
CloseFile(file)
End Function

Function markersetSave2(filename$)
file=WriteFile(filename$+".waypoints.bin")
For waypoint.waypoint= Each waypoint
If waypointstate%=2
waypointpositionx#=EntityX(waypointentity%)
waypointpositiony#=EntityY(waypointentity%)
waypointpositionz#=EntityZ(waypointentity%)
vectorWrite(file,waypointposition)
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()
waypointentity%=waypointId(waypointid)entity%
waypointDelete(waypointId(waypointid))
waypointId(stackPop(waypointIndex))=waypoint
PositionEntity waypointentity%,waypointpositionx#,waypointpositiony#,waypointpositionz#
EntityColor waypointentity%,0,255,0
ShowEntity waypointentity%
ScaleEntity waypointentity%,.5,.1,.5
Until Eof(file)
CloseFile(file)
;correct WaypointAvail
waypointAvailpointer=reset
For waypoint.waypoint=Each waypoint
If waypointstate%=0 stackPush(waypointAvail,waypointid%)
Next
EndIf
End Function

Function markersetCreate.markerset(scale#,costfactor%,spacing#)
;waypoint generate
this.markerset=markersetNew()
this ypeid%=1
thiswidth%=Ceil(Abs(markersetGuideWidth#)/spacing#)
thislength%=Ceil(Abs(markersetGuideLength#)/spacing#)
thisspacing#=spacing#
thiscostfactor%=costfactor%
thisscale#=scale#
fontoffset%=FontHeight()+2
Locate 0,fontoffset%*5
FlushKeys()
this hreshholds%=Input("Threshholds [Use 1]:")
For loop = 1 To this hreshholds%
markersetThreshholdSet(this,loop,Input("Threshhold Height Value#"+Str(loop)+":"));
Next
For loop = 0 To thiswidth%
For loop2 = 0 To thislength%
thiswaypoints%=thiswaypoints%+1
thiswaypoint.waypoint[thiswaypoints%]=waypointID(stackPop(waypointAvail))
thiswaypoint[thiswaypoints%]state%=1
ShowEntity thiswaypoint[thiswaypoints%]entity%
PositionEntity thiswaypoint[thiswaypoints%]entity%,EntityX(markersetGuide)+loop*thisspacing#,EntityY#(markersetGuide),EntityZ#(markersetGuide)+loop2*thisspacing#
ScaleEntity thiswaypoint[thiswaypoints%]entity%,thisscale#,.1,thisscale#
EntityColor thiswaypoint[thiswaypoints%]entity%,255,0,0
EntityType thiswaypoint[thiswaypoints%]entity%,3
EntityRadius thiswaypoint[thiswaypoints%]entity%,thisscale#
Next
Next
Return this
End Function

Function markersetThreshholdSet(this.markerset,index%,threshhold#)
this hreshhold#[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(cameraentity%)),Ceil(EntityY(cameraentity%)),Ceil(EntityZ(cameraentity%))
End Function

Function markersetEdit()
ShowPointer()
While Not KeyHit(markersetkeymap(11))
If MouseDown(1)=True
CameraPick(cameraentity,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 waypointstate%=2
EntityColor waypointentity,0,255,0
waypointpositionX#=EntityX(waypointentity%)
waypointpositiony#=EntityY(waypointentity%)
waypointpositionz#=EntityZ(waypointentity%)
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...