How do you tell whether a particular entity is picked or not? I tried doing this but it doesn't work.
EntityPickMode e\shape,1
If weaponout=1
picked=CameraPick(camera,378,278)
If picked<>0 Then
makehole(hole,holes)
makespark(spark,sparks)
EndIf
If picked=1
ShowEntity ball
EntityShininess ball,1
EntityColor ball,200,0,0
ScaleEntity ball,1,1,1
PositionEntity ball,PickedX(),PickedY(),PickedZ(),True
EntityType ball,1
Animate ball,3,.2
UpdateWorld()
EndIf
EndIf
try EntityPickMode e\shape,2
also, why are you giving absolute coordinates to camerapick, try using MouseX and MouseY ?
also, why are you giving absolute coordinates to camerapick, try using MouseX and MouseY ?
That would only apply if he's picking at the mouse pointer position. If he's picking at the position of a stationary crosshair, for example, and using a fixed viewport size, using absolute coordinates should be no problem.
true... however, if no entity is at those coords the pick won't work.
Also, just noticed, this is wrong:
if picked = 1
camerapick returns an object handle, or 0
The variable e\shape is assigned to a sphere (eventually to be replaced with a model) in a separate function. I tried setting its pickmode to -2 and the environments pickmode to 2 like this:
Function
e\shape=createsphere()
EntityPickMode e\shape,-2
EntityPickMode city1,2
blah blah blah
End Function
Function
If weaponout=1
picked=CameraPick(camera,378,278)
If picked>0 Then
makehole(hole,holes)
makespark(spark,sparks)
EndIf
If picked<0
ShowEntity ball
EntityShininess ball,1
EntityColor ball,200,0,0
ScaleEntity ball,1,1,1
PositionEntity ball,PickedX(),PickedY(),PickedZ(),True
EntityType ball,1
Animate ball,3,.2
EndIf
EndIf
End Function
I still get no response when I shoot the sphere.
Picked can never be < 0 as it will either return 0 or an integer reference to the picked mesh.
You can't set the pickmode to -2 as this is not a recognised option. The mode must be > 0 for this to work.
Post some working code and someone will fix it for you.
Stevie
This code works, I need to generate the "blood sphere" at the location of the picked sphere but I can only seem to pick the environment.
Graphics3D 800,600,32,1
Dither True
AntiAlias True
BackBuffer()
Type enemy
Field X
Field Y
Field Z
Field shape
End Type
Global pistolselected=0
Global Gravity# = -.5
Global WalkSpeed#=.5
Global FlyMode=0
Global weaponout=0
Global pistolammo=15
Global CamPivot = CreatePivot( )
Global Camera = CreateCamera( )
PositionEntity CamPivot,1010,50,1010
EntityType CamPivot, 1
EntityRadius CamPivot, 3
EntityType Camera, 1
EntityRadius Camera, 2
Global pistol=CreateCylinder()
EntityParent pistol,camera
PositionEntity pistol,EntityX(Camera)+1.5,EntityY(Camera)-2,EntityZ(Camera)+2
RotateEntity pistol,100,0,0
HideEntity pistol
Global muzzleglow2=CreateLight(pistol)
LightRange muzzleglow2,.0005
HideEntity muzzleglow2
LightColor muzzleglow2,255,255,0
Global t=0
Collisions 1,2,2,3
Function Loadlevel1()
light=CreateLight(2)
PositionEntity light,600,100,600
RotateEntity light,90,0,0
LightColor light,100,255,255
terrain=CreateTerrain(32)
PositionEntity terrain,0,-.02,0
ScaleEntity terrain,50,20,50
EntityType terrain,2
EntityPickMode terrain,2
city1=CreateCube()
PositionEntity city1,1000,1.5,1000
EntityType city1,2
EntityPickMode city1,2
ScaleEntity city1,50,20,50
enemies=0
SeedRnd 4
Repeat
e.enemy=New enemy
e\x=Rnd(1,1000)
e\y=4
e\z=Rnd(1,1000)
e\shape=CreateSphere()
PositionEntity e\shape,e\x,e\y,e\z
ScaleEntity e\shape,4,4,4
EntityType e\shape,3
EntityPickMode e\shape,3
enemies=enemies+1
Until enemies=10
CameraRange Camera,.2,1000
CameraFogMode Camera,1
CameraFogRange Camera,.2,999
CameraFogColor Camera,19,164,149
CameraClsColor Camera,0,255,255
While Not KeyHit(1)
controls()
Wend
Return
End Function
Function controls()
Color 255,0,0
If pistolselected=1
WritePixel 355,255,0
EndIf
If KeyDown( 42 ) =1
WalkSpeed# = 1.5
Else
WalkSpeed# = .5
EndIf
If KeyHit(2)
ShowEntity pistol
pistolselected=1
weaponout=1
End If
If FlyMode=0
If KeyDown(17) =1 Then MoveEntity CamPivot, 0, 0, WalkSpeed#
If KeyDown(31) =1 Then MoveEntity CamPivot, 0, 0, 0-WalkSpeed#
PositionEntity Camera, EntityX#( CamPivot ), EntityY#( CamPivot )+8, EntityZ#( CamPivot )
EndIf
If KeyDown(30) =1 Then MoveEntity CamPivot, -1, 0, 0
If KeyDown(32) =1 Then MoveEntity CamPivot, 1, 0, 0
If EntityCollided(CamPivot,2)
Gravity#=0
Else
Gravity#=-.5
EndIf
TranslateEntity CamPivot, 0, Gravity#, 0
TurnEntity CamPivot, 0, 0 -MouseXSpeed(), 0
TurnEntity Camera, MouseYSpeed(), 0, 0
RotateEntity CamPivot, EntityPitch#( CamPivot ), EntityYaw#( CamPivot ), 0
MoveMouse GraphicsWidth()/2, GraphicsHeight()/2
RotateEntity Camera, EntityPitch#( Camera ), EntityYaw#( CamPivot ), 0
If MouseHit(1)And pistolselected=1 And pistolammo>0
createbullet()
pistolammo=pistolammo-1
EndIf
If t=1
Text 0,20,"Enviroment picked"
EndIf
Text 0,40,"Press 1 to pull out pistol, aim with the dot"
Flip
UpdateWorld()
RenderWorld
HideEntity muzzleglow2
Return
ClearCollisions
End Function
Function createbullet( )
If pistolselected=1
ShowEntity muzzleglow2
EndIf
If weaponout=1
picked=CameraPick(camera,378,278)
If picked>1 Then
t=1
EndIf
If picked<2
blood=CreateSphere()
ShowEntity blood
EntityShininess blood,1
EntityColor blood,200,0,0
ScaleEntity blood,1,1,1
PositionEntity blood,PickedX(),PickedY(),PickedZ()
EntityType blood,1
EndIf
EndIf
End Function
not sure exactly what you are trying to achieve as I havent read the entire post, however.
to make an entity NON pickable set entitypickmode to 0
else use entitypickmode,2 for most situations.
example
create a level called level1 and an enemy called enemy.
do your camerapick then
if pick=something non pickable goto endofpick
if pick-level1 then
do something
if pick=enemy
then do something else
.endofpick
to show a sprite where you picked like a bullethole or similar, use something like below to position the sprite
obviously the "whatever" will be referenced as a type for the sprite loaded earlier. Hope this makes some sense.
positionentity whatever,PickedX(),PickedY(),PickedZ()
aligntovector whatever,-PickedNX(),-PickedNY(),-PickedNZ(),3
That's pretty much what I have already, only I don't use a goto. The problem is to tell the difference between the environment and the enemy. Their pickmodes are different, but it always seems to choose the environment. The code works (its only a mock up of first level, the cylinder used to be an animated arm with a handgun, for example) you can run it to see what I mean about the pickmode. The real game also has bullet holes and sparks.
You code is a mess so I've tidied it up a bit. You should really be using indentation to make it more readable. Anyway, this is what you want ( I think ) ..
Graphics3D 800,600,32,1
Dither True
AntiAlias True
BackBuffer()
Type enemy
Field ID
Field X
Field Y
Field Z
Field shape
End Type
Global pistolselected=0
Global Gravity# = -.5
Global WalkSpeed#=.5
Global FlyMode=0
Global weaponout=0
Global pistolammo=15
Global CamPivot = CreatePivot( )
Global Camera = CreateCamera( )
PositionEntity CamPivot,1010,50,1010
EntityType CamPivot, 1
EntityRadius CamPivot, 3
EntityType Camera, 1
EntityRadius Camera, 2
Global pistol=CreateCylinder()
EntityParent pistol,camera
PositionEntity pistol,EntityX(Camera)+1.5,EntityY(Camera)-2,EntityZ(Camera)+2
RotateEntity pistol,100,0,0
HideEntity pistol
Global muzzleglow2=CreateLight(pistol)
LightRange muzzleglow2,.0005
HideEntity muzzleglow2
LightColor muzzleglow2,255,255,0
Global city1, terrain, t$
Collisions 1,2,2,3
LoadLevel1()
While Not KeyDown(1)
Controls()
Wend
;=====================================================================================
;=====================================================================================
;=====================================================================================
;=====================================================================================
;=====================================================================================
;=====================================================================================
Function Loadlevel1()
light=CreateLight(2)
PositionEntity light,600,100,600
RotateEntity light,90,0,0
LightColor light,100,255,255
terrain=CreateTerrain(32)
PositionEntity terrain,0,-.02,0
ScaleEntity terrain,50,20,50
EntityType terrain,2
EntityPickMode terrain,2
city1=CreateCube()
PositionEntity city1,1000,1.5,1000
EntityType city1,2
EntityPickMode city1,2
ScaleEntity city1,50,20,50
SeedRnd 4
For enemies = 1 To 10
e.enemy=New enemy
e\ID = enemies
e\x=Rnd(1,1000)
e\y=4
e\z=Rnd(1,1000)
e\shape=CreateSphere()
PositionEntity e\shape,e\x,e\y,e\z
ScaleEntity e\shape,4,4,4
EntityType e\shape,3
EntityRadius e\shape, 4
EntityPickMode e\shape,1
NameEntity e\shape, Handle(e)
Next
CameraRange Camera,.2,1000
CameraFogMode Camera,1
CameraFogRange Camera,.2,999
CameraFogColor Camera,19,164,149
CameraClsColor Camera,0,255,255
End Function
;=====================================================================================
;=====================================================================================
;=====================================================================================
Function controls()
If KeyDown( 42 ) =1
WalkSpeed# = 1.5
Else
WalkSpeed# = .5
EndIf
If KeyHit(2)
ShowEntity pistol
pistolselected=1
weaponout=1
End If
If FlyMode=0
If KeyDown(17) =1 Then MoveEntity CamPivot, 0, 0, WalkSpeed#
If KeyDown(31) =1 Then MoveEntity CamPivot, 0, 0, 0-WalkSpeed#
PositionEntity Camera, EntityX#( CamPivot ), EntityY#( CamPivot )+8, EntityZ#( CamPivot )
EndIf
If KeyDown(30) =1 Then MoveEntity CamPivot, -1, 0, 0
If KeyDown(32) =1 Then MoveEntity CamPivot, 1, 0, 0
If EntityCollided(CamPivot,2)
Gravity#=0
Else
Gravity#=-.5
EndIf
TranslateEntity CamPivot, 0, Gravity#, 0
TurnEntity CamPivot, 0, 0 -MouseXSpeed(), 0
TurnEntity Camera, MouseYSpeed(), 0, 0
RotateEntity CamPivot, EntityPitch#( CamPivot ), EntityYaw#( CamPivot ), 0
MoveMouse GraphicsWidth()/2, GraphicsHeight()/2
RotateEntity Camera, EntityPitch#( Camera ), EntityYaw#( CamPivot ), 0
If MouseHit(1) And pistolselected = 1 And pistolammo > 0
createbullet()
pistolammo=pistolammo-1
EndIf
UpdateWorld()
RenderWorld()
Color 255,0,255
Text 0,20,"Picked : "+t$
Text 0,40,"Press 1 to pull out pistol, aim with the dot"
;dot
Color 255,0,0
Rect 378-2,278-2,5,5,0
Flip
HideEntity muzzleglow2
End Function
;=====================================================================================
;=====================================================================================
;=====================================================================================
Function createbullet( )
ShowEntity muzzleglow2
If weaponout = 1
picked = CameraPick(camera,378,278)
If Picked > 0
Select Picked
Case City1
t$ = "City1"
Case Terrain
t$ = "Terrain"
Default
t$ = "Enemy "
blood=CreateSphere()
ShowEntity blood
EntityShininess blood,1
EntityColor blood,200,0,0
ScaleEntity blood,1,1,1
PositionEntity blood,PickedX(),PickedY(),PickedZ()
;get picked enemy type
e.enemy = Object.enemy( EntityName( Picked ) )
t$ = t$ + e\ID
End Select
Else
t$ = "Nothing"
EndIf
EndIf
End Function