Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Array.au3>
- #include <File.au3>
- #include <GDIPlus.au3>
- #include <WindowsConstants.au3>
- #include <Misc.au3>
- #region Renderer_Variables
- Global $Renderer_hWnd = ""
- Global $LootDetail_hWnd, $LootDetail_BuildingName, $LootDetail_Edit
- Global $hGraphic
- Global $hCanvas, $hCanvasBuffer
- Global $hMap, $hMapBuffer
- Global $hLootSpots, $hLootSpotsBuffer
- Global $hUI, $hUIBuffer
- Global $hDebugBrush, $hDebugPen
- #endregion
- #region Renderer_Settings
- Global $Renderer_WindowWidth = 1200
- Global $Renderer_WindowHeight = 720
- #endregion
- #region Camera
- Global $iCameraX, $iCameraY, $iCameraZoom
- Global $iCameraOffsetX, $iCameraOffsetY
- Global $iMapLeftX, $iMapLeftY, $iMapRightX, $iMapRightY
- #endregion
- #region InputHandler
- Global $Mouse_LBUTTONTRIGGER = False
- Global $Mouse_LBUTTONDOWN = False
- Global $Mouse_LBUTTONCameraPosTrigger[2]
- Global $Mouse_LBUTTONCursorInfoTrigger[5]
- Global $Mouse_LBUTTONCursorInfoCurrent[5]
- Global $hUser32DLL = DllOpen("user32.dll")
- Global $MouseOverEvents = ObjCreate("System.Collections.ArrayList")
- #endregion
- #region DayZ_Map
- Global $DayZMap_TileSize = 256
- Global $iMapSizeX = 30
- Global $iMapSizeY = 30
- Global $aMapTiles[$iMapSizeX][$iMapSizeY]
- #endregion
- #region DayZ_LootSpots
- Global $DayZLootSpots[$iMapSizeX][$iMapSizeY]
- Global $DayZLootSpot_SizeModificator = 0
- Global $DayZLootSpots_Count = 0
- #endregion
- Renderer_Start()
- _Camera(0, 0)
- _LoadDayZMapTiles()
- _LoadDayZLootSpots()
- WinSetTitle($Renderer_hWnd, "", "v0.01 Alpha | DayZ Standalone Map")
- While 1
- InputHandler()
- Render()
- Sleep(10)
- WEnd
- #region DayZ_Map
- Func _LoadDayZMapTiles()
- For $i = 0 To $iMapSizeX - 1
- For $s = 0 To $iMapSizeY - 1
- $aMapTiles[$i][$s] = _GDIPlus_ImageLoadFromFile(@ScriptDir&"\data\map\"&$i&"_"&$s&".png")
- Next
- Next
- EndFunc
- Func _Render_DayZMap()
- _GDIPlus_GraphicsClear($hMapBuffer, 0xFF000000)
- For $iX = $iMapLeftX To $iMapRightX
- For $iY = $iMapLeftY To $iMapRightY
- If $iX < 0 Or $iY < 0 Or $iX > $iMapSizeX - 1 Or $iY > $iMapSizeY - 1 Then ContinueLoop
- ;ConsoleWrite("Render "&$iX&":"&$iY&@CRLF)
- $iFieldX = ($iX * $DayZMap_TileSize) + $iCameraOffsetX - $iCameraX
- $iFieldY = ($iY * $DayZMap_TileSize) + $iCameraOffsetY - $iCameraY
- _GDIPlus_GraphicsDrawImage($hMapBuffer, $aMapTiles[$iX][$iY], $iFieldX, $iFieldY)
- ;ConsoleWrite("_GDIPlus_GraphicsDrawImage($hMapBuffer, $aMapTiles["&$iX&"]["&$iY&"], "&$iFieldX&", "&$iFieldY&")")
- Next
- Next
- EndFunc
- #endregion
- #region DayZ_LootSpots
- Func _LoadDayZLootSpots()
- $DayZLootSpot_SizeModificator = $iMapSizeX * $DayZMap_TileSize / 15360
- $DayZLootSpots_Count = IniRead(@ScriptDir&"\data\output\world\coordinates.ini", "general", "objectCount", 0)
- Local $DayZLootSpotsTemp[$DayZLootSpots_Count][5]
- For $i = 0 To $DayZLootSpots_Count - 1
- $aTemp = IniReadSection(@ScriptDir&"\data\output\world\coordinates.ini", $i)
- For $s = 1 To 5
- $DayZLootSpotsTemp[$i][$s-1] = $aTemp[$s][1]
- Next
- $DayZLootSpotsTemp[$i][1] *= $DayZLootSpot_SizeModificator
- $DayZLootSpotsTemp[$i][2] = 15360 - $DayZLootSpotsTemp[$i][2]
- $DayZLootSpotsTemp[$i][2] *= $DayZLootSpot_SizeModificator
- $DayZLootSpotsTemp[$i][3] *= $DayZLootSpot_SizeModificator
- Next
- For $i = 0 To $iMapSizeX - 1
- For $s = 0 To $iMapSizeY - 1
- $DayZLootSpots[$i][$s] = ObjCreate("System.Collections.ArrayList")
- Next
- Next
- Local $aTemp[5]
- For $i = 0 To $DayZLootSpots_Count - 1
- $iX = Floor($DayZLootSpotsTemp[$i][1]/256)
- $iY = Floor($DayZLootSpotsTemp[$i][2]/256)
- For $s = 0 To 4
- $aTemp[$s] = $DayZLootSpotsTemp[$i][$s]
- Next
- $DayZLootSpots[$iX][$iY].Add($aTemp)
- Next
- EndFunc
- Func _Render_DayZLootSpots()
- _GDIPlus_GraphicsClear($hLootSpotsBuffer, 0x00000000)
- $MouseOverEvents.clear
- Local $aTemp[3]
- For $iX = $iMapLeftX To $iMapRightX
- For $iY = $iMapLeftY To $iMapRightY
- If $iX < 0 Or $iY < 0 Or $iX > $iMapSizeX - 1 Or $iY > $iMapSizeY - 1 Then ContinueLoop
- ;ConsoleWrite("Render "&$iX&":"&$iY&@CRLF)
- For $Element in $DayZLootSpots[$iX][$iY]
- ;~ _ArrayDisplay($Element)
- $iFieldX = $Element[1] + $iCameraOffsetX - $iCameraX
- $iFieldY = $Element[2] + $iCameraOffsetY - $iCameraY
- $aTemp[0] = $Element[0]
- $aTemp[1] = $iFieldX
- $aTemp[2] = $iFieldY
- $MouseOverEvents.add($aTemp)
- $iSize = _DayZLoot_GetLootSpotValue($Element[0])
- _GDIPlus_GraphicsFillEllipse($hLootSpotsBuffer, $iFieldX - $iSize/2, $iFieldY - $iSize/2, $iSize, $iSize, $hDebugBrush)
- _GDIPlus_GraphicsDrawEllipse($hLootSpotsBuffer, $iFieldX - $iSize/2, $iFieldY - $iSize/2, $iSize, $iSize, $hDebugPen)
- Next
- ;ConsoleWrite("_GDIPlus_GraphicsDrawImage($hMapBuffer, $aMapTiles["&$iX&"]["&$iY&"], "&$iFieldX&", "&$iFieldY&")")
- Next
- Next
- EndFunc
- Func _DayZLoot_GetLootSpotValue($sBuildingName)
- $iTemp = FileGetSize(@ScriptDir&"\data\output\"&$sBuildingName&".ini")/1024
- If $iTemp < 8 Then
- Return 4
- ElseIf $iTemp < 20 Then
- Return 6
- ElseIf $iTemp < 30 Then
- Return 8
- Else
- Return 10
- EndIf
- EndFunc
- #endregion
- #region LootDetailGUI
- Func _LootDetailUpdate($sBuildingName)
- GUICtrlSetData($LootDetail_BuildingName, $sBuildingName)
- Local $aTemp = IniReadSectionNames(@ScriptDir&"\data\output\"&$sBuildingName&".ini")
- Local $aTemp2, $sTemp
- For $i = 1 To $aTemp[0]
- $aTemp2 = IniReadSection(@ScriptDir&"\data\output\"&$sBuildingName&".ini", $aTemp[$i])
- $sTemp &= $aTemp[$i] & ":"& @CRLF
- For $s = 1 To $aTemp2[0][0]
- $sTemp &= $aTemp2[$s][0] & ": "&StringReplace($aTemp2[$s][1], ",", " - ")&" %" & @CRLF
- Next
- $sTemp &= @CRLF
- Next
- GUICtrlSetData($LootDetail_Edit, $sTemp)
- EndFunc
- #endregion
- #region Windows & Renderer
- Func Renderer_Start()
- _CreateWindow($Renderer_WindowWidth, $Renderer_WindowHeight)
- _InitializeGDI()
- EndFunc
- Func _CreateWindow($iWidth, $iHeight)
- Opt("GUIOnEventMode", 1)
- $Renderer_hWnd = GUICreate("v0.01 Alpha | DayZ Standalone Map - Loading...", $iWidth, $iHeight)
- GUISetOnEvent(-3, "OnAutoItExit")
- GUISetState()
- GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")
- GUIRegisterMsg($WM_LBUTTONUP, "_WM_LBUTTONUP")
- Local $aTemp = WinGetPos($Renderer_hWnd)
- $LootDetail_hWnd = GUICreate("Loot Detail", 250, 454, $aTemp[0]+$aTemp[2]+25, $aTemp[1], -1, BitOR($WS_EX_TOOLWINDOW,$WS_EX_WINDOWEDGE))
- $LootDetail_BuildingName = GUICtrlCreateLabel("Building Name", 8, 8, 234, 17)
- GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
- $LootDetail_Edit = GUICtrlCreateEdit("", 8, 40, 233, 401)
- GUISetState(@SW_SHOW)
- EndFunc
- Func _InitializeGDI()
- _GDIPlus_Startup()
- $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Renderer_hWnd)
- $hCanvas = _GDIPlus_BitmapCreateFromGraphics($Renderer_WindowWidth, $Renderer_WindowWidth, $hGraphic)
- $hCanvasBuffer = _GDIPlus_ImageGetGraphicsContext($hCanvas)
- $hMap = _GDIPlus_BitmapCreateFromGraphics($Renderer_WindowWidth, $Renderer_WindowWidth, $hGraphic)
- $hMapBuffer = _GDIPlus_ImageGetGraphicsContext($hMap)
- $hLootSpots = _GDIPlus_BitmapCreateFromGraphics($Renderer_WindowWidth, $Renderer_WindowWidth, $hGraphic)
- $hLootSpotsBuffer = _GDIPlus_ImageGetGraphicsContext($hLootSpots)
- $hUI = _GDIPlus_BitmapCreateFromGraphics($Renderer_WindowWidth, $Renderer_WindowWidth, $hGraphic)
- $hUIBuffer = _GDIPlus_ImageGetGraphicsContext($hUI)
- $hDebugBrush = _GDIPlus_BrushCreateSolid(0xFFFF4D4D)
- $hDebugPen = _GDIPlus_PenCreate(0xFF000000)
- EndFunc ;==>_DemoInitializeGDI
- Func Render()
- _GDIPlus_GraphicsClear($hCanvasBuffer, 0xFF000000)
- _Camera_UpdateRenderData()
- _Render_DayZMap()
- _Render_DayZLootSpots()
- _GDIPlus_GraphicsDrawImageRect($hCanvasBuffer, $hMap, 0, 0, $Renderer_WindowWidth, $Renderer_WindowWidth)
- _GDIPlus_GraphicsDrawImageRect($hCanvasBuffer, $hLootSpots, 0, 0, $Renderer_WindowWidth, $Renderer_WindowWidth)
- _GDIPlus_GraphicsDrawImageRect($hGraphic, $hCanvas, 0, 0, $Renderer_WindowWidth, $Renderer_WindowWidth)
- EndFunc
- #endregion
- #region Renderer_Camera
- ; #FUNCTION# ====================================================================================================================
- ; Name...........: _Camera
- ; Description ...: Setzt die Kamera an die gegebene Position. (Zoom wird noch nicht verwendet)
- ; Pixelgenaue Angabe, keine Felder!
- ; Syntax.........: _Camera($iX, $iY, $iZoom = 1)
- ; Parameters ....: $iX - X Coord in Pixel
- ; $iY - Y Coord in Pixel
- ; Return values .:
- ; Author ........:
- ; Modified.......:
- ; Remarks .......:
- ; Related .......:
- ; Link ..........:
- ; Example .......:
- ; ===============================================================================================================================
- Func _Camera_UpdateRenderData()
- $iCameraOffsetX = ($Renderer_WindowWidth / 2)
- $iCameraOffsetY = ($Renderer_WindowHeight / 2)
- $iMapLeftX = Floor(($iCameraX - $iCameraOffsetX) / $DayZMap_TileSize)
- $iMapLeftY = Floor(($iCameraY - $iCameraOffsetY) / $DayZMap_TileSize)
- $iMapRightX = Floor(($iCameraX + $iCameraOffsetX) / $DayZMap_TileSize)
- $iMapRightY = Floor(($iCameraY + $iCameraOffsetY) / $DayZMap_TileSize)
- EndFunc
- Func _Camera($iX, $iY, $iZoom = 1)
- $iCameraX = $iX
- $iCameraY = $iY
- $iCameraZoom = $iZoom
- EndFunc
- Func _Camera_GetPos()
- Local $aRet[2] = [$iCameraX, $iCameraY]
- Return $aRet
- EndFunc
- Func _Camera_SetX($iX)
- $iCameraX = $iX
- EndFunc
- Func _Camera_SetY($iY)
- $iCameraY = $iY
- EndFunc
- #endregion
- #region Renderer_InputHandler
- ; #FUNCTION# ====================================================================================================================
- ; Name...........: InputHandler
- ; Description ...: Verarbeitet Benutzereingabe.
- ; ===============================================================================================================================
- Func InputHandler()
- If $Mouse_LBUTTONTRIGGER = True Then
- $Mouse_LBUTTONCameraPosTrigger = _Camera_GetPos()
- $Mouse_LBUTTONCursorInfoTrigger = GUIGetCursorInfo($Renderer_hWnd)
- $Mouse_LBUTTONTRIGGER = False
- $Mouse_LBUTTONDOWN = True
- EndIf
- If $Mouse_LBUTTONDOWN Then
- $Mouse_LBUTTONCursorInfoCurrent = GUIGetCursorInfo($Renderer_hWnd)
- ;~ ConsoleWrite("_Camera_SetX("&$Mouse_LBUTTONCameraPosTrigger[0]&" - ("&$Mouse_LBUTTONCursorInfoCurrent[0]&" - "&$Mouse_LBUTTONCursorInfoTrigger[0]&"))")
- _Camera_SetX($Mouse_LBUTTONCameraPosTrigger[0] - ($Mouse_LBUTTONCursorInfoCurrent[0] - $Mouse_LBUTTONCursorInfoTrigger[0]))
- _Camera_SetY($Mouse_LBUTTONCameraPosTrigger[1] - ($Mouse_LBUTTONCursorInfoCurrent[1] - $Mouse_LBUTTONCursorInfoTrigger[1]))
- EndIf
- Local $Mouse_MOVER = GUIGetCursorInfo($Renderer_hWnd)
- For $element In $MouseOverEvents
- If _IsNear($Mouse_MOVER[0], $element[1], _DayZLoot_GetLootSpotValue($element[0])) And _IsNear($Mouse_MOVER[1], $element[2], _DayZLoot_GetLootSpotValue($element[0])) Then
- _LootDetailUpdate($element[0])
- EndIf
- Next
- EndFunc
- Func _IsNear($i1, $i2, $iTolerance = 2)
- $iTolerance = $iTolerance/2
- If ($i1 - $iTolerance <= $i2) And ($i1 + $iTolerance >= $i2) Then Return True
- EndFunc
- #endregion
- Func OnAutoItExit()
- Exit
- EndFunc
- Func _WM_LBUTTONDOWN()
- $Mouse_LBUTTONTRIGGER = True
- EndFunc
- Func _WM_LBUTTONUP()
- $Mouse_LBUTTONDOWN = False
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement