Nicholas Randall Forystek
unread,Jun 8, 2016, 9:39:18 PM6/8/16You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Private Sub MoveObject(ByRef Obj As MyObject)
On Error GoTo ObjectError
Dim objCollision As Long
objCollision = -1
Dim adjust As Single
Dim visType As Long
Dim bitType As Long
bitType = 1
visType = 2
adjust = 0.019
Dim pull As Boolean
Dim push As Boolean
Dim tmpset As D3DVECTOR
Dim newset As D3DVECTOR
Dim cnt As Long
Dim cnt2 As Long
Obj.States.IsMoving = Moving.None
For cnt = 0 To lngFaceCount - 1
sngFaceVis(3, cnt) = 0
Next
If (ObjectCount > 0) Then
For cnt = 1 To ObjectCount
If (Objects(cnt).Effect = Collides.Ladder) And
(Objects(cnt).CollideIndex > -1) And Objects(cnt).Visible Then
For cnt2 = Objects(cnt).CollideIndex To
(Objects(cnt).CollideIndex +
Meshes(Objects(cnt).MeshIndex).Mesh.GetNumFaces) - 1
sngFaceVis(3, cnt2) = bitType
Next
End If
Next
If Obj.States.OnLadder Then
Obj.States.OnLadder = TestCollision(Obj, Actions.None, bitType)
Else
Obj.States.OnLadder = TestCollision(Obj, Actions.None, bitType)
If Obj.States.OnLadder Then
Do
Loop Until Not DeleteActivity(Obj, JumpGUID)
For cnt = 1 To PortalCount
For cnt2 = 1 To Portals(cnt).ActivityCount
DeleteActivity Obj,
Portals(cnt).Activities(cnt2).Identity
Next
Next
End If
End If
For cnt = 1 To ObjectCount
If (Objects(cnt).Effect = Collides.Liquid) And
(Objects(cnt).CollideIndex > -1) And Objects(cnt).Visible Then
For cnt2 = Objects(cnt).CollideIndex To
(Objects(cnt).CollideIndex +
Meshes(Objects(cnt).MeshIndex).Mesh.GetNumFaces) - 1
sngFaceVis(3, cnt2) = bitType
Next
End If
Next
If Obj.States.InLiquid Then
Obj.States.InLiquid = TestCollision(Obj, Actions.None, bitType)
Else
Obj.States.InLiquid = TestCollision(Obj, Actions.None, bitType)
If Obj.States.InLiquid Then
Do
Loop Until Not DeleteActivity(Obj, JumpGUID)
For cnt = 1 To PortalCount
For cnt2 = 1 To Portals(cnt).ActivityCount
DeleteActivity Obj,
Portals(cnt).Activities(cnt2).Identity
Next
Next
End If
End If
End If
sngCamera(0, 0) = Obj.Origin.X
sngCamera(0, 1) = Obj.Origin.Y + 1
sngCamera(0, 2) = Obj.Origin.z
sngCamera(1, 0) = 1
sngCamera(1, 1) = -1
sngCamera(1, 2) = -1
sngCamera(2, 0) = -1
sngCamera(2, 1) = 1
sngCamera(2, 2) = -1
Obj.CulledFaces = Culling(visType, lngFaceCount, sngCamera, sngFaceVis,
sngVertexX, sngVertexY, sngVertexZ, sngScreenX, sngScreenY, sngScreenZ,
sngZBuffer)
lCullCalls = lCullCalls + 1
If (ObjectCount > 0) Then
For cnt = 1 To ObjectCount
If (Objects(cnt).Effect = Collides.Ladder) And
(Objects(cnt).CollideIndex > -1) Then
For cnt2 = Objects(cnt).CollideIndex To
(Objects(cnt).CollideIndex +
Meshes(Objects(cnt).MeshIndex).Mesh.GetNumFaces) - 1
sngFaceVis(3, cnt2) = 0
Next
ElseIf (Objects(cnt).Effect = Collides.Ground) And
(Objects(cnt).CollideIndex > -1) And Objects(cnt).Visible Then
For cnt2 = Objects(cnt).CollideIndex To
(Objects(cnt).CollideIndex +
Meshes(Objects(cnt).MeshIndex).Mesh.GetNumFaces) - 1
If Not (((sngFaceVis(0, cnt2) = 0) Or (sngFaceVis(0,
cnt2) = 1) Or (sngFaceVis(0, cnt2) = -1)) And _
((sngFaceVis(1, cnt2) = 0) Or (sngFaceVis(1, cnt2) =
1) Or (sngFaceVis(1, cnt2) = -1)) And _
((sngFaceVis(2, cnt2) = 0) Or (sngFaceVis(2, cnt2) =
1) Or (sngFaceVis(2, cnt2) = -1))) Then
sngFaceVis(3, cnt2) = visType
End If
Next
ElseIf (Objects(cnt).Effect = Collides.Liquid) And
(Objects(cnt).CollideIndex > -1) Then
For cnt2 = Objects(cnt).CollideIndex To
(Objects(cnt).CollideIndex +
Meshes(Objects(cnt).MeshIndex).Mesh.GetNumFaces) - 1
sngFaceVis(3, cnt2) = 0
Next
End If
Next
End If
tmpset = Obj.Direct
Obj.Direct.Y = tmpset.Y
Obj.Direct.X = 0
Obj.Direct.z = 0
If (Obj.Direct.Y <> 0) Then
If (TestCollision(Obj, Directing, visType, objCollision) = False)
Then
Obj.Origin.Y = Obj.Origin.Y + Obj.Direct.Y
If Obj.Direct.Y > 0 Then
If Not ((Obj.States.IsMoving And Moving.Flying) =
Moving.Flying) Then Obj.States.IsMoving = Obj.States.IsMoving +
Moving.Flying
ElseIf Obj.Direct.Y < 0 Then
If Not ((Obj.States.IsMoving And Moving.Falling) =
Moving.Falling) Then Obj.States.IsMoving = Obj.States.IsMoving +
Moving.Falling
End If
newset.Y = Obj.Direct.Y
ElseIf (Obj.Direct.Y < 0) Then
Do
Obj.Direct.Y = Obj.Direct.Y + adjust
If (Obj.Direct.Y >= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType, objCollision)
= False)
If (Obj.Direct.Y < 0) Then
Obj.Origin.Y = Obj.Origin.Y + Obj.Direct.Y
If Not ((Obj.States.IsMoving And Moving.Falling) =
Moving.Falling) Then Obj.States.IsMoving = Obj.States.IsMoving +
Moving.Falling
newset.Y = Obj.Direct.Y
End If
ElseIf (Obj.Direct.Y > 0) Then
Do
Obj.Direct.Y = Obj.Direct.Y - adjust
If (Obj.Direct.Y <= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType, objCollision)
= False)
If (Obj.Direct.Y > 0) Then
Obj.Origin.Y = Obj.Origin.Y + Obj.Direct.Y
If Not ((Obj.States.IsMoving And Moving.Flying) =
Moving.Flying) Then Obj.States.IsMoving = Obj.States.IsMoving +
Moving.Flying
newset.Y = Obj.Direct.Y
End If
End If
End If
If (ObjectCount > 0) Then
For cnt = 1 To ObjectCount
If (Objects(cnt).CollideObject = Obj.CollideObject) And
(Objects(cnt).CollideIndex > -1) Then
For cnt2 = Objects(cnt).CollideIndex To
(Objects(cnt).CollideIndex +
Meshes(Objects(cnt).MeshIndex).Mesh.GetNumFaces) - 1
sngFaceVis(3, cnt2) = visType
Next
ElseIf (Objects(cnt).Effect = Collides.Ladder) And
(Objects(cnt).CollideIndex > -1) Then
For cnt2 = Objects(cnt).CollideIndex To
(Objects(cnt).CollideIndex +
Meshes(Objects(cnt).MeshIndex).Mesh.GetNumFaces) - 1
sngFaceVis(3, cnt2) = 0
Next
ElseIf (Objects(cnt).Effect = Collides.Liquid) And
(Objects(cnt).CollideIndex > -1) Then
For cnt2 = Objects(cnt).CollideIndex To
(Objects(cnt).CollideIndex +
Meshes(Objects(cnt).MeshIndex).Mesh.GetNumFaces) - 1
sngFaceVis(3, cnt2) = 0
Next
End If
Next
End If
CoupleMove Obj, objCollision
Obj.Direct.Y = 0
Obj.Direct.X = tmpset.X
If (Obj.Direct.X <> 0) Then
If (TestCollision(Obj, Directing, visType, objCollision) = False)
Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
If Not ((Obj.States.IsMoving And Moving.Level) = Moving.Level)
Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
If (tmpset.X <> newset.X) And (tmpset.z <> newset.z) And (Not
(tmpset.Y = newset.Y)) And (Not tmpset.Y = 0) Then
If ((Obj.States.IsMoving And Moving.Falling) =
Moving.Falling) Then Obj.States.IsMoving = Obj.States.IsMoving -
Moving.Falling
End If
newset.X = Obj.Direct.X
ElseIf (Obj.Direct.X < 0) Then
Do
Obj.Direct.X = Obj.Direct.X + adjust
If (Obj.Direct.X >= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType, objCollision)
= False)
If (Obj.Direct.X < 0) Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
If (tmpset.X <> newset.X) And (tmpset.z <> newset.z) And
(Not (tmpset.Y = newset.Y)) And (Not tmpset.Y = 0) Then
If ((Obj.States.IsMoving And Moving.Falling) =
Moving.Falling) Then Obj.States.IsMoving = Obj.States.IsMoving -
Moving.Falling
End If
newset.X = Obj.Direct.X
End If
ElseIf (Obj.Direct.X > 0) Then
Do
Obj.Direct.X = Obj.Direct.X - adjust
If (Obj.Direct.X <= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType, objCollision)
= False)
If (Obj.Direct.X > 0) Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
If (tmpset.X <> newset.X) And (tmpset.z <> newset.z) And
(Not (tmpset.Y = newset.Y)) And (Not tmpset.Y = 0) Then
If ((Obj.States.IsMoving And Moving.Falling) =
Moving.Falling) Then Obj.States.IsMoving = Obj.States.IsMoving -
Moving.Falling
End If
newset.X = Obj.Direct.X
End If
End If
End If
Obj.Direct.X = 0
Obj.Direct.z = tmpset.z
If (Obj.Direct.z <> 0) Then
If (TestCollision(Obj, Directing, visType, objCollision) = False)
Then
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) = Moving.Level)
Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
If (tmpset.X <> newset.X) And (tmpset.z <> newset.z) And (Not
(tmpset.Y = newset.Y)) And (Not tmpset.Y = 0) Then
If ((Obj.States.IsMoving And Moving.Falling) =
Moving.Falling) Then Obj.States.IsMoving = Obj.States.IsMoving -
Moving.Falling
End If
newset.z = Obj.Direct.z
ElseIf (Obj.Direct.z < 0) Then
Do
Obj.Direct.z = Obj.Direct.z + adjust
If (Obj.Direct.z >= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType, objCollision)
= False)
If (Obj.Direct.z < 0) Then
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
If (tmpset.X <> newset.X) And (tmpset.z <> newset.z) And
(Not (tmpset.Y = newset.Y)) And (Not tmpset.Y = 0) Then
If ((Obj.States.IsMoving And Moving.Falling) =
Moving.Falling) Then Obj.States.IsMoving = Obj.States.IsMoving -
Moving.Falling
End If
newset.z = Obj.Direct.z
End If
ElseIf (Obj.Direct.z > 0) Then
Do
Obj.Direct.z = Obj.Direct.z - adjust
If (Obj.Direct.z <= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType, objCollision)
= False)
If (Obj.Direct.z > 0) Then
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
If (tmpset.X <> newset.X) And (tmpset.z <> newset.z) And
(Not (tmpset.Y = newset.Y)) And (Not tmpset.Y = 0) Then
If ((Obj.States.IsMoving And Moving.Falling) =
Moving.Falling) Then Obj.States.IsMoving = Obj.States.IsMoving -
Moving.Falling
End If
newset.z = Obj.Direct.z
End If
End If
End If
Obj.Direct = newset
CoupleMove Obj, objCollision
If (Not Obj.States.IsMoving = Moving.None) And _
(tmpset.X <> newset.X Or tmpset.z <> newset.z) And _
(Not ((Obj.States.IsMoving And Moving.Flying) = Moving.Flying)) And
_
(Not ((Obj.States.IsMoving And Moving.Falling) = Moving.Falling))
Then
Obj.Origin.Y = Obj.Origin.Y + 0.2
Obj.Direct.Y = 0
Obj.Direct.X = tmpset.X
Obj.Direct.z = tmpset.z
push = True
pull = False
If (Obj.Direct.X <> 0) Or (Obj.Direct.z <> 0) Then
If (TestCollision(Obj, Directing, visType, objCollision) =
False) Then
If Obj.Direct.X <> 0 Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
newset.X = Obj.Direct.X
pull = True
End If
If Obj.Direct.z <> 0 Then
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
newset.z = Obj.Direct.z
pull = True
End If
ElseIf (Obj.Direct.X < 0) And (Obj.Direct.z < 0) Then
Do
Obj.Direct.X = Obj.Direct.X + adjust
Obj.Direct.z = Obj.Direct.z + adjust
If ((Obj.Direct.X >= 0) Or (Obj.Direct.z >= 0)) Then
Exit Do
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = False)
If (Obj.Direct.X < 0) And (Obj.Direct.z < 0) Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.X = Obj.Direct.X
newset.z = Obj.Direct.z
pull = True
End If
ElseIf (Obj.Direct.X > 0) And (Obj.Direct.z > 0) Then
Do
Obj.Direct.X = Obj.Direct.X - adjust
Obj.Direct.z = Obj.Direct.z - adjust
If ((Obj.Direct.X <= 0) Or (Obj.Direct.z <= 0)) Then
Exit Do
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = False)
If (Obj.Direct.X > 0) And (Obj.Direct.z > 0) Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.X = Obj.Direct.X
newset.z = Obj.Direct.z
pull = True
End If
ElseIf (Obj.Direct.X < 0) And (Obj.Direct.z > 0) Then
Do
Obj.Direct.X = Obj.Direct.X + adjust
Obj.Direct.z = Obj.Direct.z - adjust
If ((Obj.Direct.X >= 0) Or (Obj.Direct.z <= 0)) Then
Exit Do
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = False)
If (Obj.Direct.X < 0) And (Obj.Direct.z > 0) Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.X = Obj.Direct.X
newset.z = Obj.Direct.z
pull = True
End If
ElseIf (Obj.Direct.X > 0) And (Obj.Direct.z < 0) Then
Do
Obj.Direct.X = Obj.Direct.X - adjust
Obj.Direct.z = Obj.Direct.z + adjust
If ((Obj.Direct.X <= 0) Or (Obj.Direct.z >= 0)) Then
Exit Do
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = False)
If (Obj.Direct.X > 0) And (Obj.Direct.z < 0) Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.X = Obj.Direct.X
newset.z = Obj.Direct.z
pull = True
End If
End If
End If
Obj.Origin.Y = Obj.Origin.Y - 0.2
If pull Then push = False
End If
Obj.Direct = tmpset
CoupleMove Obj, objCollision
If push And (Not Obj.States.IsMoving = Moving.None) And _
(tmpset.X <> newset.X Or tmpset.z <> newset.z) And _
(Not ((Obj.States.IsMoving And Moving.Flying) = Moving.Flying)) And
_
(Not ((Obj.States.IsMoving And Moving.Falling) = Moving.Falling))
Then
Obj.Origin.Y = Obj.Origin.Y + 0.2
Obj.Direct.Y = 0
Obj.Direct.X = tmpset.X
Obj.Direct.z = tmpset.z
push = False
If (Obj.Direct.X <> 0) Then
If (TestCollision(Obj, Directing, visType, objCollision) =
False) Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.X = Obj.Direct.X
push = True
ElseIf (Obj.Direct.X < 0) Then
Do
Obj.Direct.X = Obj.Direct.X + adjust
If (Obj.Direct.X >= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = False)
If (Obj.Direct.X < 0) Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.X = Obj.Direct.X
push = True
End If
ElseIf (Obj.Direct.X > 0) Then
Do
Obj.Direct.X = Obj.Direct.X - adjust
If (Obj.Direct.X <= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = False)
If (Obj.Direct.X > 0) Then
Obj.Origin.X = Obj.Origin.X + Obj.Direct.X
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.X = Obj.Direct.X
push = True
End If
End If
End If
If (Obj.Direct.z <> 0) Then
If (TestCollision(Obj, Directing, visType, objCollision) =
False) Then
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.z = Obj.Direct.z
push = True
ElseIf (Obj.Direct.z < 0) Then
Do
Obj.Direct.z = Obj.Direct.z + adjust
If (Obj.Direct.z >= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = False)
If (Obj.Direct.z < 0) Then
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.z = Obj.Direct.z
push = True
End If
ElseIf (Obj.Direct.z > 0) Then
Do
Obj.Direct.z = Obj.Direct.z - adjust
If (Obj.Direct.z <= 0) Then Exit Do
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = False)
If (Obj.Direct.z > 0) Then
Obj.Origin.z = Obj.Origin.z + Obj.Direct.z
If Not ((Obj.States.IsMoving And Moving.Level) =
Moving.Level) Then Obj.States.IsMoving = Obj.States.IsMoving + Moving.Level
newset.z = Obj.Direct.z
push = True
End If
End If
End If
Obj.Origin.Y = Obj.Origin.Y - 0.2
End If
If (pull Xor push) And (Not ((Obj.States.IsMoving And Moving.Flying) =
Moving.Flying)) And _
(Not ((Obj.States.IsMoving And Moving.Falling) = Moving.Falling))
And _
((Obj.States.IsMoving And Moving.Level) = Moving.Level) Then
Obj.Direct.Y = 0
Obj.Direct.X = 0
Obj.Direct.z = 0
Do While (TestCollision(Obj, Directing, visType, objCollision) =
True)
Obj.Direct.Y = Obj.Direct.Y + adjust
Loop
If ((Obj.Direct.Y >= 0) And (Obj.Direct.Y < 0.3)) Or _
((Obj.Direct.Y >= 0) And (Obj.Direct.Y <= 0.2)) Then
Obj.Origin.Y = Obj.Origin.Y + Obj.Direct.Y
If Not ((Obj.States.IsMoving And Moving.Stepping) =
Moving.Stepping) Then Obj.States.IsMoving = Obj.States.IsMoving +
Moving.Stepping
If ((Obj.States.IsMoving And Moving.Level) = Moving.Level) Then
Obj.States.IsMoving = Obj.States.IsMoving - Moving.Level
newset.Y = Obj.Direct.Y
End If
ElseIf ((Obj.States.IsMoving = Moving.None) And ((tmpset.X = 0 And
tmpset.z = 0) And (newset.X = 0 And newset.z = 0))) Then
push = False
pull = False
Obj.Direct.Y = -adjust
If Not push Then Obj.Direct.X = adjust
If (TestCollision(Obj, Directing, visType, objCollision) = False)
Then
pull = True
Else
pull = False
Obj.Direct.Y = 0
Obj.Direct.X = 0
End If
If Not pull Then Obj.Direct.Y = -adjust
Obj.Direct.z = adjust
If (TestCollision(Obj, Directing, visType, objCollision) = False)
Then
push = True
Else
push = False
Obj.Direct.Y = 0
Obj.Direct.z = 0
End If
If Not pull And Not push Then Obj.Direct.Y = -adjust
Obj.Direct.X = -adjust
If (TestCollision(Obj, Directing, visType, objCollision) = False)
Then
pull = (push And Not pull) Or (Not push And Not pull)
Else
Obj.Direct.Y = 0
Obj.Direct.X = 0
End If
If Not push And Not pull Then Obj.Direct.Y = -adjust
Obj.Direct.z = -adjust
If (TestCollision(Obj, Directing, visType, objCollision) = False)
Then
push = (pull And Not push) Or (Not push And Not pull)
Else
Obj.Direct.Y = 0
Obj.Direct.z = 0
End If
If (push Xor pull) Or (push And pull) Then
Obj.Direct.Y = 0
Do
Obj.Origin.Y = Obj.Origin.Y - adjust
If pull Then
Obj.Origin.X = Obj.Origin.X + adjust
If (TestCollision(Obj, Directing, visType, objCollision)
= True) Then
Obj.Origin.X = Obj.Origin.X - (adjust * 2)
If (TestCollision(Obj, Directing, visType,
objCollision) = True) Then
Obj.Origin.Y = Obj.Origin.Y + (adjust / 3)
Else
Do
If Obj.Origin.X + (adjust / 3) <> adjust
Then Exit Do
Obj.Origin.X = Obj.Origin.X + (adjust / 3)
Loop Until (TestCollision(Obj, Directing,
visType, objCollision) = True)
Obj.Origin.X = Obj.Origin.X - (adjust / 3)
End If
Else
Do
If Obj.Origin.X - (adjust / 3) <> adjust Then
Exit Do
Obj.Origin.X = Obj.Origin.X - (adjust / 3)
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = True)
Obj.Origin.X = Obj.Origin.X + (adjust / 3)
End If
ElseIf push Then
Obj.Origin.z = Obj.Origin.z + adjust
If (TestCollision(Obj, Directing, visType, objCollision)
= True) Then
Obj.Origin.z = Obj.Origin.z - (adjust * 2)
If (TestCollision(Obj, Directing, visType,
objCollision) = True) Then
Obj.Origin.Y = Obj.Origin.Y + (adjust / 3)
Else
Do
If Obj.Origin.z + (adjust / 3) <> adjust
Then Exit Do
Obj.Origin.z = Obj.Origin.z + (adjust / 3)
Loop Until (TestCollision(Obj, Directing,
visType, objCollision) = True)
Obj.Origin.z = Obj.Origin.z - (adjust / 3)
End If
Else
Do
If Obj.Origin.z - (adjust / 3) <> adjust Then
Exit Do
Obj.Origin.z = Obj.Origin.z - (adjust / 3)
Loop Until (TestCollision(Obj, Directing, visType,
objCollision) = True)
Obj.Origin.z = Obj.Origin.z + (adjust / 3)
End If
End If
Loop While (TestCollision(Obj, Directing, visType, objCollision)
= True)
End If
End If
Exit Sub
ObjectError:
If Err.Number = 6 Or Err.Number = 11 Then Resume
Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile,
Err.HelpContext
Resume
End Sub