Here's what I'm using. ZoomFactor is either 1 or 5. When it's 5, the hit point moves on the screen.
I never move the camera, only angle it. CPV is of type Vector.
I never move the camera, only angle it. CPV is of type Vector.
Type Vector Field x#, y#, z# End Type Function SetCPV() ; CameraPointingVector Local length#, temp# CPV\y# = -Sin(Altitude) temp# = Cos(Altitude) CPV\x# = -Sin(Azimuth) * temp# CPV\z# = Cos(Azimuth) * temp# length# = Sqr(CPV\x# * CPV\x# + CPV\y# * CPV\y# + CPV\z# * CPV\z#) CPV\x# = CPV\x# / length CPV\y# = CPV\y# / length CPV\z# = CPV\z# / length AlignToVector(theCamera, 0, 1, 0, 2) AlignToVector(theCamera, CPV\x#, CPV\y#, CPV\z#, 3) End Function ;end SetCPV Function SetZoomFactor(inzoom#) ZoomFactor# = inzoom CameraZoom(theCamera, ZoomFactor#) If inzoom = 1 Then ASDActivateSprite(SightSprite, 0) ASDActivateSprite(ScopeSprite, 0) Else ASDActivateSprite(SightSprite, 1) ASDActivateSprite(ScopeSprite, 1) Azimuth# = Azimuth# + Rnd(-2, 2) Altitude# = Altitude# + Rnd(-2, 2) EndIf End Function ;end SetZoomFactor Function Shoot() Local tempx#, tempy#, tempz# tempx# = EntityX(theCamera) tempy# = EntityY(theCamera) tempz# = EntityZ(theCamera) LinePick(tempx#, tempy#, tempz#, tempx# + CPV\x# * 50000, tempy# + CPV\y# * 50000, tempz# + CPV\z# * 50000) AddSmak(PickedX(), PickedY(), PickedZ()) PlaySound(ShotSound) BeforeZoomOutFramesLeft = BeforeZoomOutDelay ReloadFramesLeft = ReloadDelay End Function ;end Shoot Function AddSmak(inx#, iny#, inz#) PositionEntity(Smaks(SmakPointer)\Entity, inx#, iny#, inz#) ShowEntity(Smaks(SmakPointer)\Entity) Smaks(SmakPointer)\FramesLeft = 45 Smaks(SmakPointer)\Active = 1 SmakPointer = SmakPointer + 1 If SmakPointer > NumSmaks Then SmakPointer = 1 End Function ;end AddSmak