Advertisement
ecobayod

Untitled

Jun 11th, 2024
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Public Class Form1
  2.     Dim mode = 0
  3.     Dim playing = False
  4.     Dim currentTime = 12.0
  5.     Dim playbackSpeed = 1.0
  6.     Dim selectedLayer = 0
  7.     Dim level = 0.0
  8.     Dim location As Point = Nothing
  9.  
  10.     Dim floodMap As Bitmap
  11.     Dim isFloodMapStale = True
  12.  
  13.     Private Function clampFlood(level As Integer) As Bitmap
  14.         Dim flood = My.Resources.flood
  15.         Dim width As Integer = flood.Width
  16.         Dim height As Integer = flood.Height
  17.         Dim clamped As New Bitmap(width, height)
  18.  
  19.         For y As Integer = 0 To height - 1
  20.             For x As Integer = 0 To width - 1
  21.                 Dim color As Color = flood.GetPixel(x, y)
  22.  
  23.  
  24.                 Dim value As Integer = color.R
  25.  
  26.                 Dim gradientColor As Color
  27.                 If color.A < 120 OrElse value >= level Then
  28.                     gradientColor = Color.FromArgb(0, 0, 0, 0)
  29.                 Else
  30.                     gradientColor = Color.FromArgb(200, 30, 30, Int(color.R * 0.6))
  31.                 End If
  32.                 clamped.SetPixel(x, y, gradientColor)
  33.             Next
  34.         Next
  35.  
  36.         Return clamped
  37.     End Function
  38.  
  39.  
  40.     Private Sub updateImage()
  41.         Dim map As Bitmap
  42.         If selectedLayer = 1 Then
  43.             map = My.Resources.distance
  44.         ElseIf selectedLayer = 2 Then
  45.             map = My.Resources.elevation
  46.         Else
  47.             map = My.Resources.bitmap
  48.         End If
  49.  
  50.         Using g = Graphics.FromImage(map)
  51.             If isFloodMapStale Then
  52.                 floodMap = clampFlood(Int(255 * level))
  53.                 isFloodMapStale = False
  54.             End If
  55.             g.DrawImage(floodMap, 0, 0, 512, 512)
  56.  
  57.             If location <> Nothing Then
  58.                 Dim marker = My.Resources.location
  59.                 g.DrawImage(marker, location.X - 9, location.Y - 24, 18, 24)
  60.             End If
  61.         End Using
  62.  
  63.         ptrMap.Image = map
  64.     End Sub
  65.  
  66.     Private Sub updateView()
  67.         If playing Then
  68.             btnPlay.Text = "Pause"
  69.             tmrPlayback.Enabled = True
  70.         Else
  71.             btnPlay.Text = "Play"
  72.             tmrPlayback.Enabled = False
  73.         End If
  74.  
  75.         rbNone.Checked = (selectedLayer = 0)
  76.         rbDist.Checked = (selectedLayer = 1)
  77.         rbElev.Checked = (selectedLayer = 2)
  78.  
  79.         If mode = 1 Then
  80.             tmrPlayback.Enabled = False
  81.             trbTime.Enabled = False
  82.         Else
  83.             trbTime.Enabled = True
  84.             level = currentTime / 24.0
  85.         End If
  86.  
  87.         If location <> Nothing Then
  88.             Dim pixel = My.Resources.flood.GetPixel(location.X, location.Y)
  89.             Dim heightMap = My.Resources.height.Clone()
  90.             Dim value = pixel.R
  91.  
  92.             If pixel.A > 127 AndAlso value < Int(255 * level) Then
  93.                 Dim height = (Int(255 * level) - value) / 255
  94.                 Dim y As Integer = Int(height * 157)
  95.                 Dim offset As Integer = 157 - y
  96.  
  97.  
  98.                 Using g = Graphics.FromImage(heightMap)
  99.                     Dim col = Color.FromArgb(128, Color.Blue)
  100.                     Using brush As New SolidBrush(col)
  101.                         g.FillRectangle(brush, 0, offset, 242, y)
  102.                     End Using
  103.                 End Using
  104.             End If
  105.  
  106.             ptrHeight.Image = heightMap
  107.         End If
  108.  
  109.         trbSpeed.Value = Int(10.0 * playbackSpeed)
  110.         trbTime.Value = Int(3.0 * currentTime)
  111.  
  112.         updateImage()
  113.     End Sub
  114.  
  115.     Private Sub btnPlay_Click(sender As Object, e As EventArgs) Handles btnPlay.Click
  116.         playing = Not playing
  117.         updateView()
  118.     End Sub
  119.  
  120.     Private Sub btnCurrent_Click(sender As Object, e As EventArgs) Handles btnCurrent.Click
  121.         playing = False
  122.         currentTime = 12.0
  123.         updateView()
  124.     End Sub
  125.  
  126.     Private Sub tmrPlayback_Tick(sender As Object, e As EventArgs) Handles tmrPlayback.Tick
  127.         currentTime = (currentTime + playbackSpeed) Mod 24
  128.         updateView()
  129.     End Sub
  130.  
  131.     Private Sub trbSpeed_Scroll(sender As Object, e As EventArgs) Handles trbSpeed.Scroll
  132.         playbackSpeed = trbSpeed.Value / 10.0
  133.         updateView()
  134.     End Sub
  135.  
  136.     Private Sub trbTime_Scroll(sender As Object, e As EventArgs) Handles trbTime.Scroll
  137.         currentTime = trbTime.Value / 3.0
  138.         updateView()
  139.     End Sub
  140.  
  141.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  142.         updateView()
  143.     End Sub
  144.  
  145.     Private Sub rbNone_CheckedChanged(sender As Object, e As EventArgs) Handles rbNone.CheckedChanged, rbDist.CheckedChanged, rbElev.CheckedChanged
  146.         If rbNone.Checked Then
  147.             selectedLayer = 0
  148.         ElseIf rbDist.Checked Then
  149.             selectedLayer = 1
  150.         Else
  151.             selectedLayer = 2
  152.         End If
  153.  
  154.         updateView()
  155.     End Sub
  156.  
  157.     Private Sub tmrRefresh_Tick(sender As Object, e As EventArgs) Handles tmrRefresh.Tick
  158.         isFloodMapStale = True
  159.     End Sub
  160.  
  161.     Private Sub trbHeight_Scroll(sender As Object, e As EventArgs) Handles trbHeight.Scroll
  162.         level = trbHeight.Value / 30.0
  163.         updateView()
  164.     End Sub
  165.  
  166.     Private Sub TabPage1_Enter(sender As Object, e As EventArgs) Handles TabPage1.Enter
  167.         mode = 0
  168.         updateView()
  169.     End Sub
  170.  
  171.     Private Sub TabPage2_Enter(sender As Object, e As EventArgs) Handles TabPage2.Enter
  172.         mode = 1
  173.         updateView()
  174.     End Sub
  175.  
  176.     Private Sub ptrMap_MouseClick(sender As Object, e As MouseEventArgs) Handles ptrMap.MouseClick
  177.         location = New Point(e.X, e.Y)
  178.         updateView()
  179.     End Sub
  180. End Class
  181.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement