Public Class RotationTile Inherits Entity Public Enum RotationTypes StartSpin StopSpin End Enum Dim RotationType As RotationTypes Dim RotateTo As Integer = 0 Public Overrides Sub Initialize() MyBase.Initialize() Select Case Me.ActionValue Case 0 Me.RotationType = RotationTypes.StartSpin Case 1 Me.RotationType = RotationTypes.StopSpin End Select Me.RotateTo = CInt(Me.AdditionalValue) Me.NeedsUpdate = True End Sub Public Overrides Sub Update() If Me.RotationType = RotationTypes.StartSpin Then If Core.CurrentScreen.Identification = Screen.Identifications.OverworldScreen Then If CType(Core.CurrentScreen, OverworldScreen).ActionScript.IsReady = True Then If Me.Position.X = Screen.Camera.Position.X And CInt(Me.Position.Y) = CInt(Screen.Camera.Position.Y) And Me.Position.Z = Screen.Camera.Position.Z Then Dim steps As Integer = GetSteps() Dim s As String = "version=2" & Environment.NewLine & "@player.move(0)" & Environment.NewLine & "@player.turnto(" & Me.RotateTo.ToString() & ")" & Environment.NewLine & "@player.move(" & steps & ")" & Environment.NewLine & ":end" CType(Core.CurrentScreen, OverworldScreen).ActionScript.StartScript(s, 2) End If End If End If End If End Sub Private Function GetSteps() As Integer Dim steps As Integer = 0 Dim direction As Vector2 = New Vector2(0) Select Case Me.RotateTo Case 0 direction.Y = -1 Case 1 direction.X = -1 Case 2 direction.Y = 1 Case 3 direction.X = 1 End Select Dim stepY As Integer = CInt(direction.Y) If stepY = 0 Then stepY = 1 End If For x = 0 To direction.X * 100 Step direction.X For y = 0 To direction.Y * 100 Step stepY Dim p As Vector3 = New Vector3(x, 0, y) + Me.Position For Each e As Entity In Screen.Level.Entities If e.Equals(Me) = False Then If e.EntityID.ToLower() = "rotationtile" Then If CInt(e.Position.X) = CInt(p.X) And CInt(e.Position.Y) = CInt(p.Y) And CInt(e.Position.Z) = CInt(p.Z) Then GoTo theend End If End If End If Next steps += 1 Next Next theend: Return steps End Function Public Overrides Sub Render() If Me.Model Is Nothing Then Me.Draw(Me.BaseModel, Textures, False) Else UpdateModel() Draw(Me.BaseModel, Me.Textures, True, Me.Model) End If End Sub Public Overrides Function LetPlayerMove() As Boolean Return Me.RotationType = RotationTypes.StopSpin End Function Public Overrides Function WalkIntoFunction() As Boolean If Me.RotationType = RotationTypes.StartSpin Then CType(Screen.Camera, OverworldCamera).YawLocked = True End If Return False End Function End Class