Advertisement
FireDiver

A2D Game Engine v0.9a

Jul 22nd, 2016
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 22.00 KB | None | 0 0
  1. #cs ----------------------------------------------------------------------------
  2.  
  3.     AutoIt Version: 3.3.13.20 (Beta)
  4.     Author:         FireDiver
  5.     Engine-Version:  0.9a
  6.  
  7.     Script Function:
  8.     Simple Autoit 2D Game Engine
  9.  
  10. #ce ----------------------------------------------------------------------------
  11. ;Variable Obj:
  12. ;$Obj[Stationär(1) / Bewegend(2)][Nummer][X/Y/ETC.]
  13. #include <GDIPlus.au3>
  14. #include <GDIPlusConstants.au3>
  15. #include <ButtonConstants.au3>
  16. #include <EditConstants.au3>
  17. #include <GUIConstantsEx.au3>
  18. #include <StaticConstants.au3>
  19. #include <WindowsConstants.au3>
  20. #include <File.au3>
  21. #include <Array.au3>
  22. #include "QuickDraw.au3"
  23. OnAutoItExitRegister("_A2D_Shutdown") ;AIWP [   AINUMMER]   [   WEGPUNKTNUMMER   ]   [   X/Y/DIR   ]
  24. Dim $BUF, $BIT, $GUIWidth, $GUIHeight, $hGraphic, $Obj[3][50001][10], $Mlines, $Texture, $PEN, $coll[50001], $Proj[50001][12], $Pcount = 0, $ProjCleanCount = 0, $Block = 0, $MaxObjM = 0, $MaxObjS = 0, $width = 400, $height = 400, $Umode = 0, $Debug = 0, $hBrushBlue
  25. Dim $iFPS, $iFrames, $On, $OGUI = 1, $Font, $distance, $distance2, $iFPS, $AIWP[101][1000][6], $AISTATUS[101],$AWP[101], $MAXAI = 0, $AIBITMAP, $AINAME, $AINUM, $AIPOS[101][5], $MaxWP[101], $AISpeed[101],$apos[2],$SLine[100]
  26. Func _A2D_Startup($GUITitle, $GUIWidth, $GUIHeight, $GraWidth, $GraHeight, $Debug = 0, $OGUI = 1,$LWidth = 10,$hGUI = 0)
  27.     _GDIPlus_Startup()
  28.     ;$GUI = GUICreate($GUITitle, $GUIWidth,$GUIHeight)
  29.     If $Debug = 2 Then
  30.         _QuickDraw_Enable($GUITitle, $GUIWidth, $GUIHeight, 20,60, False)
  31.     Else
  32.         _QuickDraw_CreateSurface( $hGUI, 200, 200, $GUIWidth, $GUIHeight )
  33.     EndIf
  34.     _QuickDraw_SetLineWidth($LWidth)
  35.     ;_QuickDraw_SetRenderTarget($Normal_Buffer)
  36.     For $a2dcount = 1 To 50 Step +1
  37.         $Proj[$a2dcount][0] = 0
  38.     Next
  39.     $width = $GUIWidth
  40.     $height = $GUIHeight
  41.     If $Debug = 1 or 2 Then
  42.         $iFPS = 0 ;FramesPerSecond
  43.         $iFrames = 0 ;CurrentFrameCount
  44.         AdlibRegister(_FPS, 1000)
  45.     EndIf
  46.     _A2D_CreateFont("Arial")
  47. EndFunc   ;==>_A2D_Startup
  48. Func _Random($Min, $Max, $exclude)
  49.     $excludes = StringSplit($exclude, ";")
  50.     While 1
  51.         $snum = 0
  52.         $number = Random($Min, $Max, 1)
  53.         Switch $excludes[1]
  54.             Case 0
  55.                 Return $number
  56.             Case 1
  57.                 For $countR = 2 To _ArrayMax($excludes) Step +1
  58.                     If $excludes[$countR] = $number Then
  59.                         $snum = 1
  60.                     EndIf
  61.                 Next
  62.                 If $snum = 0 Then
  63.                     Return $number
  64.                 EndIf
  65.             Case 2
  66.                 If $excludes[2] = $number Then
  67.                     $snum = 1
  68.                 EndIf
  69.                 If $snum = 0 Then
  70.                     Return $number
  71.                 EndIf
  72.         EndSwitch
  73.     WEnd
  74. EndFunc   ;==>_Random
  75. Func _A2D_LoadImage($path)
  76.     Return _QuickDraw_LoadTexture($path)
  77. EndFunc   ;==>_A2D_LoadImage
  78. Func _A2D_ObjCreate($path, $XCoord, $YCoord, $ObjWidth, $ObjHeight, $ObjName,$Type2 = 1,$ExtraData = 0,$ExtraData2 = 0)
  79.     ;Typ 1 = Spieler/Freund
  80.     ;Typ 2 = Gegner
  81.     $Bitmap = $path;_QuickDraw_LoadTexture($path)
  82.     $MaxObjM += 1
  83.     $Obj[2][$MaxObjM][1] = "Obj;" & $XCoord & ";" & $YCoord & ";" & $ObjWidth & ";" & $ObjHeight & ";tr"
  84.     $Obj[2][$MaxObjM][2] = $Bitmap
  85.     $Obj[2][$MaxObjM][3] = "false"
  86.     $Obj[2][$MaxObjM][4] = $ObjName
  87.     $Obj[2][$MaxObjM][5] = $Type2
  88.     $Obj[2][$MaxObjM][6] = $ExtraData
  89.     $Obj[2][$MaxObjM][7] = $ExtraData2
  90.     ;Platz 9 ist aktivitätsstaus!
  91. EndFunc   ;==>_A2D_ObjCreate
  92. Func _A2D_ObjUpdate($ObjNameU,$Bitmap,$XCoord = 0, $YCoord = 0, $ObjWidth = 0, $ObjHeight = 0,$Type = 1,$ExtraData = 0,$ExtraData2 = 0)
  93.     For $1count = 1 To $MaxObjM Step +1
  94.         If $Obj[2][$1count][4] = $ObjNameU Then
  95.             $ONum = $1count
  96.             ExitLoop
  97.         EndIf
  98.     Next
  99.     $Obj[2][$ONum][1] = "Obj;" & $XCoord & ";" & $YCoord & ";" & $ObjWidth & ";" & $ObjHeight & ";tr"
  100.     $Obj[2][$ONum][2] = $Bitmap
  101.     $Obj[2][$ONum][4] = $ObjNameU
  102.     $Obj[2][$ONum][5] = $Type
  103.     $Obj[2][$ONum][6] = $ExtraData
  104.     $Obj[2][$ONum][7] = $ExtraData2
  105. EndFunc
  106. Func _A2D_ObjDraw($ObjNameU, $Umode = 0, $XCoord = 0, $YCoord = 0, $ObjWidth = 0, $ObjHeight = 0,$Type = 1,$ExtraData = 0,$ExtraData2 = 0,$Bitmap = 0)
  107.     For $1count = 1 To $MaxObjM Step +1
  108.         If $Obj[2][$1count][4] = $ObjNameU Then
  109.             $ONum = $1count
  110.             ExitLoop
  111.         EndIf
  112.     Next
  113.     If $Umode = 1  Then
  114.         If $Bitmap = 0 Then $Bitmap = $Obj[2][$ONum][2]
  115.         ;ConsoleWrite(@CRLF & $ObjNameU)
  116.         $Obj[2][$ONum][1] = "Obj;" & $XCoord & ";" & $YCoord & ";" & $ObjWidth & ";" & $ObjHeight & ";tr"
  117.         $Obj[2][$ONum][2] = $Bitmap
  118.         $Obj[2][$ONum][5] = $Type
  119.         $Obj[2][$ONum][6] = $ExtraData
  120.         $Obj[2][$ONum][7] = $ExtraData2
  121.     EndIf
  122.     $OSplit = StringSplit($Obj[2][$ONum][1], ";")
  123.     If Not @error Then
  124.         ;_GDIPlus_GraphicsDrawImageRect($BUF, $Obj[2][$ONum][2], $OSplit[2], $OSplit[3], $OSplit[4], $OSplit[5])
  125.         ;_QuickDraw_Rect($OSplit[2], $OSplit[3], $OSplit[4], $OSplit[5], $Obj[2][$ONum][2], 0xFFFFFFFF)
  126.         DllCall( $QuickDrawDLL, "bool:cdecl","RenderRect", "int", $OSplit[2], "int", $OSplit[3], "int", $OSplit[4], "int", $OSplit[5], "int", $Obj[2][$ONum][2], "long", 0xFFFFFFFF)
  127.     EndIf
  128. EndFunc   ;==>_A2D_ObjDraw
  129. Func _IntToBin($iValue)
  130.     Local $sOut
  131.     For $i = 31 To 0 Step -1
  132.         $sOut &= BitAND(BitShift($iValue, $i), 1)
  133.     Next
  134.     Return $sOut
  135. EndFunc
  136. Func _BinToInt($sValue)
  137.     Local $iOut = 0, $aValue = StringSplit($sValue, "")
  138.     For $i = 1 To $aValue[0]
  139.         $aValue[0] -= 1
  140.         If $aValue[$i] = "1" Then $iOut += 2 ^ ($aValue[0])
  141.     Next
  142.     Return $iOut
  143. EndFunc
  144. Func _A2D_Encrypt($data,$dpath)
  145.     $bin = _IntToBin($data)
  146.     $split = StringSplit($bin,"")
  147.     $var1 = ""
  148.     $var2 = ""
  149.     For $count = 1 to $split[0] Step +1
  150.         Switch $split[$count]
  151.             Case 0
  152.                 $var1 = $var1 & Random(0,4,1)
  153.             Case 1
  154.                 $var1 = $var1 & Random(5,9,1)
  155.         EndSwitch
  156.     Next
  157.     For $count = 1 to $split[0] Step +1
  158.         Switch $split[$count]
  159.             Case 0
  160.                 $var2 = $var2 & Random(5,9,1)
  161.             Case 1
  162.                 $var2 = $var2 & Random(0,4,1)
  163.         EndSwitch
  164.     Next
  165.     If FileExists($dpath) Then FileDelete($dpath)
  166.     FileWriteLine($dpath,$var1)
  167.     FileWriteLine($dpath,$var2)
  168. EndFunc
  169. Func _A2D_Decrypt($dpath)
  170.     ;Algorithmus von Digity
  171.     $Data1 = FileReadLine($dpath,1)
  172.     $Data2 = FileReadLine($dpath,2)
  173.     $Split1 = StringSplit($Data1,"")
  174.     $Split2 = StringSplit($Data2,"")
  175.     $var1 = ""
  176.     $var2 = ""
  177.     For $count = 1 to $Split1[0] Step +1
  178.         If $Split1[$count] < 5 Then
  179.             $var1 = $var1 & 0
  180.         ElseIf $Split1[$count] > 4 Then
  181.             $var1 = $var1 & 1
  182.         EndIf
  183.     Next
  184.     For $count = 1 to $Split2[0] Step +1
  185.         If $Split2[$count] > 4 Then
  186.             $var2 = $var2 & 0
  187.         ElseIf $Split2[$count] < 5 Then
  188.             $var2 = $var2 & 1
  189.         EndIf
  190.     Next
  191.     If $var1 = $var2 Then
  192.         Return _BinToInt($var1)
  193.     Else
  194.         Return "Fehler"
  195.     EndIf
  196. EndFunc
  197. Func _A2D_Buffer()
  198.     ;_GDIPlus_GraphicsDrawImage($hGraphic, $BIT, 0, 0)
  199.     ;_QuickDraw_SwapBuffers()
  200.     DllCall( $QuickDrawDLL, "bool:cdecl","Swap_Buffers")
  201. EndFunc   ;==>_A2D_Buffer
  202. Func _A2D_PlusDraw($XPlus, $YPlus)
  203.     ;Vertikale Linie
  204.     _QuickDraw_Line( $XPlus ,$YPlus - 10, $XPlus, $YPlus + 10, 0xFFD52B1E )
  205.     ;_GDIPlus_GraphicsDrawLine($BUF, $XPlus, $YPlus - 10, $XPlus, $YPlus + 10, $PEN)
  206.     ;Horizontale Linie
  207.     _QuickDraw_Line( $XPlus - 10 ,$YPlus , $XPlus + 10, $YPlus, 0xFFD52B1E )
  208.     ;_GDIPlus_GraphicsDrawLine($BUF, $XPlus - 10, $YPlus, $XPlus + 10, $YPlus, $PEN)
  209. EndFunc   ;==>_A2D_PlusDraw
  210. Func _A2D_LoadMap($MapPath)
  211.     $Mlines = _FileCountLines($MapPath)
  212.     For $a2dcount = 2 To $Mlines Step +1
  213.         $Line = FileReadLine($MapPath, $a2dcount)
  214.         $SLine = StringSplit($Line, ";")
  215.         If Not @error Then
  216.             If $SLine[1] = "Obj" Then
  217.                 $Obj[1][$a2dcount][1] = "Obj;" & $SLine[2] & ";" & $SLine[3] & ";" & $SLine[4] & ";" & $SLine[5] & ";" & $SLine[6]
  218.                 $Obj[1][$a2dcount][3] = "false"
  219.             EndIf
  220.             If $SLine[1] = "AI" Then
  221.                 $MAXAI += 1
  222.                 $MaxWP[$MAXAI] = 1
  223.                 $AIPOS[$MAXAI][1] = $SLine[2]
  224.                 $AIPOS[$MAXAI][2] = $SLine[3]
  225.                 $AIWP[$MAXAI][$SLine[5]][1] = $SLine[2] ;X
  226.                 $AIWP[$MAXAI][$SLine[5]][2] = $SLine[3] ;Y
  227.                 $AIWP[$MAXAI][$SLine[5]][3] = $SLine[4] ;Dir
  228.                 $AIWP[$MAXAI][$SLine[5]][4] = $SLine[6] ;Name
  229.                 $AWP[$MAXAI] = 1 ;Aktiver Wegpunkt
  230.                 $AISpeed[$MAXAI] = 2
  231.                 $AISTATUS[$MAXAI] = $SLine[7]
  232.             EndIf
  233.             If $SLine[1] = "WP" Then
  234.                 If $MAXAI > 0 Then
  235.                     $AINUM = 0
  236.                     For $a2dcount2 = 1 To $MAXAI Step +1
  237.                         If $AIWP[$a2dcount2][1][4] = $SLine[6] Then
  238.                             $AINUM = $a2dcount2
  239.                             ExitLoop
  240.                         EndIf
  241.                     Next
  242.                     $MaxWP[$AINUM] += 1
  243.                     $AIWP[$AINUM][$SLine[5]][1] = $SLine[2] ;X
  244.                     $AIWP[$AINUM][$SLine[5]][2] = $SLine[3] ;Y
  245.                     $AIWP[$AINUM][$SLine[5]][3] = $SLine[4] ;Dir
  246.                     $AIWP[$AINUM][$SLine[5]][4] = $SLine[6] ;Name
  247.                 EndIf
  248.             EndIf
  249.         EndIf
  250.     Next
  251.     $MaxObjS = $Mlines
  252. EndFunc   ;==>_A2D_LoadMap
  253. Func _A2D_SETAISTATUS($AINAME,$Status)
  254.     For $a2dcount2 = 1 To $MAXAI Step +1
  255.         If $AIWP[$a2dcount2][1][4] = $AINAME Then
  256.             $AISTATUS[$a2dcount2] = $Status
  257.             ExitLoop
  258.         EndIf
  259.     Next
  260. EndFunc
  261. Func _A2D_SETAISPEED($AINAME,$spd)
  262.     For $a2dcount2 = 1 To $MAXAI Step +1
  263.         If $AIWP[$a2dcount2][1][4] = $AINAME Then
  264.             $AISpeed[$a2dcount2] = $spd
  265.             ExitLoop
  266.         EndIf
  267.     Next
  268. EndFunc
  269. Func _A2D_SETAIPOS($AINAME, $WP)
  270.     For $a2dcount2 = 1 To $MAXAI Step +1
  271.         If $AIWP[$a2dcount2][1][4] = $AINAME Then
  272.             $AINUM = $a2dcount2
  273.             ExitLoop
  274.         EndIf
  275.     Next
  276.     $AWP[$AINUM] = $WP
  277.     $AIPOS[$AINUM][1] = $AIWP[$AINUM][$WP][1]
  278.     $AIPOS[$AINUM][2] = $AIWP[$AINUM][$WP][2]
  279. EndFunc   ;==>_A2D_SETAIPOS
  280. Func _A2D_AICOLL($AINAME, $XC, $YC, $WidthC, $HeightC)
  281.     For $a2dcount2 = 1 To $MAXAI Step +1
  282.         If $AIWP[$a2dcount2][1][4] = $AINAME Then
  283.             $AINUM = $a2dcount2
  284.             ExitLoop
  285.         EndIf
  286.     Next
  287.     $distance2 = Sqrt((Abs($AIPOS[$AINUM][1] - $XC)) ^ 2 + (Abs($AIPOS[$AINUM][2] - $YC)) ^ 2) ;Distanz zwischen AI-Position und benutzerdef. Koordinaten mit Pythagoras
  288.     If $distance2 < 25 Then
  289.         If $AIPOS[$AINUM][1] <= $XC + $WidthC Then
  290.             If $AIPOS[$AINUM][1] + 20 >= $XC Then
  291.                 If $AIPOS[$AINUM][2] <= $YC + $HeightC Then
  292.                     If $AIPOS[$AINUM][2] + 20 >= $YC Then Return 1
  293.                 EndIf
  294.             EndIf
  295.         EndIf
  296.     EndIf
  297. EndFunc   ;==>_A2D_AICOLL
  298. Func _A2D_GETAIPOS($AINAME,$type = 1)
  299.     For $a2dcount2 = 1 To $MAXAI Step +1
  300.         If $AIWP[$a2dcount2][1][4] = $AINAME Then
  301.             $AINUM = $a2dcount2
  302.             ExitLoop
  303.         EndIf
  304.     Next
  305.     Switch $type
  306.         Case 1
  307.             If $AWP[$AINUM] = $MaxWP[$AINUM] Then
  308.                 Return "Max"
  309.             Else
  310.                 Return $AWP[$AINUM]
  311.             EndIf
  312.         Case 2
  313.             $apos[0] = $AIPOS[$AINUM][1]
  314.             $apos[1] = $AIPOS[$AINUM][2]
  315.             Return $apos
  316.     EndSwitch
  317. EndFunc
  318. Func _A2D_DrawBitMap($Bitmap,$x,$y,$width,$height)
  319.     DllCall( $QuickDrawDLL, "bool:cdecl","RenderRect", "int", $x, "int", $y, "int", $width, "int", $height, "int", $Bitmap, "long", 0xFFFFFFFF)
  320.     ;_QuickDraw_Rect($x, $y, $width, $height, $Bitmap, 0xFFFFFFFF)
  321. EndFunc
  322. Func _A2D_DRAWAITXT($AINAME,$String,$Size,$Color = 0xFF000000,$LOCATION = "bot")
  323.     For $a2dcount2 = 1 To $MAXAI Step +1
  324.         If $AIWP[$a2dcount2][1][4] = $AINAME Then
  325.             $AINUM = $a2dcount2
  326.             ExitLoop
  327.         EndIf
  328.     Next
  329.     Switch $LOCATION
  330.         Case "bot"
  331.             _A2D_DrawString($String,$Size,$AIPOS[$AINUM][1], $AIPOS[$AINUM][2] + 15,$Color)
  332.         Case "mid"
  333.             _A2D_DrawString($String,$Size,$AIPOS[$AINUM][1] + 7.5, $AIPOS[$AINUM][2] + 7.5,$Color)
  334.     EndSwitch
  335. EndFunc
  336. Func _A2D_DRAWAIBIT($AINAME,$AIBITMAP,$WIDTH,$HEIGHT,$LOCATION = "bot")
  337.     For $a2dcount2 = 1 To $MAXAI Step +1
  338.         If $AIWP[$a2dcount2][1][4] = $AINAME Then
  339.             $AINUM = $a2dcount2
  340.             ExitLoop
  341.         EndIf
  342.     Next
  343.     Switch $LOCATION
  344.         Case "bot"
  345.             _QuickDraw_Rect($AIPOS[$AINUM][1], $AIPOS[$AINUM][2] + 20, $WIDTH, $HEIGHT, $AIBITMAP, 0xFFFFFFFF)
  346.         Case "mid"
  347.             _QuickDraw_Rect($AIPOS[$AINUM][1], $AIPOS[$AINUM][2] + 10, $WIDTH, $HEIGHT, $AIBITMAP, 0xFFFFFFFF)
  348.     EndSwitch
  349. EndFunc
  350. Func _A2D_AIUPDATE($AINAME, $AIBITMAP)
  351.     For $a2dcount2 = 1 To $MAXAI Step +1
  352.         If $AIWP[$a2dcount2][1][4] = $AINAME Then
  353.             $AINUM = $a2dcount2
  354.             ExitLoop
  355.         EndIf
  356.     Next
  357.     $NewPos = $AWP[$AINUM] + 1
  358.     For $fcount = 1 To  $AISpeed[$AINUM] Step +1
  359.         If $AIPOS[$AINUM][1] = $AIWP[$AINUM][$NewPos][1] Then
  360.             If $AIPOS[$AINUM][2] = $AIWP[$AINUM][$NewPos][2] Then
  361.                 If $NewPos <> $AWP[$AINUM] Then $AWP[$AINUM] += 1
  362.             EndIf
  363.         EndIf
  364.         Select
  365.             Case $AIWP[$AINUM][$AWP[$AINUM]][3] = 1 ;links
  366.                 $AIPOS[$AINUM][1] -= 1
  367.             Case $AIWP[$AINUM][$AWP[$AINUM]][3] = 2 ;hoch
  368.                 $AIPOS[$AINUM][2] -= 1
  369.             Case $AIWP[$AINUM][$AWP[$AINUM]][3] = 3 ;runter
  370.                 $AIPOS[$AINUM][2] += 1
  371.             Case $AIWP[$AINUM][$AWP[$AINUM]][3] = 4 ;rechts
  372.                 $AIPOS[$AINUM][1] += 1
  373.         EndSelect
  374.     Next
  375.     _QuickDraw_Rect($AIPOS[$AINUM][1], $AIPOS[$AINUM][2], 20, 20, $AIBITMAP, 0xFFFFFFFF)
  376.     If $AWP[$AINUM] = $MaxWP[$AINUM] Then
  377.         $AWP[$AINUM] = 1
  378.         $AIPOS[$AINUM][1] = $AIWP[$AINUM][$AWP[$AINUM]][1]
  379.         $AIPOS[$AINUM][2] = $AIWP[$AINUM][$AWP[$AINUM]][2]
  380.     EndIf
  381. EndFunc   ;==>_A2D_AIUPDATE
  382. Func _A2D_MapReset()
  383.     If $MaxObjM >= $MaxObjS Then
  384.         For $a2dcount = 0 To $MaxObjM Step +1
  385.             $Obj[1][$a2dcount][1] = ""
  386.             $Obj[1][$a2dcount][2] = ""
  387.             $Obj[1][$a2dcount][3] = ""
  388.             $Obj[2][$a2dcount][1] = ""
  389.             $Obj[2][$a2dcount][2] = ""
  390.             $Obj[2][$a2dcount][3] = ""
  391.         Next
  392.     ElseIf $MaxObjS > $MaxObjM Then
  393.         For $a2dcount = 0 To $MaxObjS Step +1
  394.             $Obj[1][$a2dcount][1] = ""
  395.             $Obj[1][$a2dcount][2] = ""
  396.             $Obj[1][$a2dcount][3] = ""
  397.             $Obj[2][$a2dcount][1] = ""
  398.             $Obj[2][$a2dcount][2] = ""
  399.             $Obj[2][$a2dcount][3] = ""
  400.         Next
  401.     EndIf
  402. EndFunc   ;==>_A2D_MapReset
  403. Func _A2D_DrawLine($x1, $y1, $x2, $y2)
  404.     _GDIPlus_GraphicsDrawLine($BUF, $x1, $y1, $x2, $y2, $PEN)
  405. EndFunc   ;==>_A2D_DrawLine
  406. Func _A2D_MapDraw($mbitmap, $mwidth, $mheight, $mtype = 1,$startx = 0,$starty = 0)
  407.     ;Nicht vergessen im Spiel die Figuren usw. vorher zu Zeichnen und den Buffer nach diesem Befehl wenn GDI+ verwendet wird
  408.     Switch $mtype
  409.         Case 1 ;MapBitmapOnly
  410.             ;_GDIPlus_GraphicsDrawImageRect($BUF, $mbitmap, 0, 0, $mwidth, $mheight)
  411.             ;_QuickDraw_Rect(0, 0, $mwidth, $mheight, $mbitmap, 0xFFFFFFFF)
  412.             DllCall( $QuickDrawDLL, "bool:cdecl","RenderRect", "int", $startx, "int", $starty, "int", $mwidth, "int", $mheight, "int", $mbitmap, "long",  0xFFFFFFFF)
  413.         Case 2 ;MapObjs (outdated)
  414.             For $a2dcount = 1 To $Mlines Step +1
  415.                 $SLine = StringSplit($Obj[1][$a2dcount], ";")
  416.                 If Not @error Then
  417.                     If Not $SLine[5] = "tr" Then
  418.                         If $Obj[1][$a2dcount][3] = "false" Then
  419.                             $Obj[1][$a2dcount][2] = _A2D_LoadImage(@ScriptDir & "\Data\" & $SLine[5])
  420.                             $Obj[1][$a2dcount][3] = "true"
  421.                         EndIf
  422.                         ;_GDIPlus_GraphicsDrawImageRect($BUF, $Obj[1][$count][2], $SLine[2], $SLine[3], $SLine[4], $SLine[5])
  423.                         _QuickDraw_Rect($SLine[2], $SLine[3], $SLine[4], $SLine[5], $Obj[1][$a2dcount][2], 0xFFFFFFFF)
  424.                     EndIf
  425.                 EndIf
  426.             Next
  427.     EndSwitch
  428. EndFunc   ;==>_A2D_MapDraw
  429. Func _A2D_ObjStatus($name,$status)
  430.     For $1count = 1 To $MaxObjM Step +1
  431.         If $Obj[2][$1count][4] = $name Then
  432.             $ONum = $1count
  433.             ExitLoop
  434.         EndIf
  435.     Next
  436.     $Obj[2][$ONum][9] = $status
  437. EndFunc
  438. Func _A2D_CCollision($type, $On = 0, $excl = 0, $aX = 0, $aY = 0, $aWidth = 0, $aHeight = 0, $bX = 0, $bY = 0, $bWidth = 0, $bHeight = 0)
  439.     If $type = "custom" Then
  440.         If $aX <= $bX + $bWidth Then
  441.             If $aX + $aWidth >= $bX Then
  442.                 If $aY <= $bY + $bHeight Then
  443.                     If $aY + $aHeight >= $bY Then
  444.                         Return 1
  445.                     EndIf
  446.                 EndIf
  447.             EndIf
  448.         EndIf
  449.     ElseIf $type = "obj:s" Then ;Stationäres Objekt (von der map)
  450.         For $a2dcount = 1 To $Mlines Step +1
  451.             $SLine = StringSplit($Obj[1][$a2dcount][1], ";")
  452.             If Not @error Then
  453.                 ;$distance = Sqrt((Abs($aX - ($SLine[2] + $SLine[4] / 2))) ^ 2 + (Abs($aY - ($SLine[3] + $SLine[5] / 2))) ^ 2)
  454.                 ;If $distance < 100 Then
  455.                     If $aX <= $SLine[2] + $SLine[4] Then
  456.                         If $aX + $aWidth >= $SLine[2] Then
  457.                             If $aY <= $SLine[3] + $SLine[5] Then
  458.                                 If $aY + $aHeight >= $SLine[3] Then
  459.                                     Return 1
  460.                                 EndIf
  461.                             EndIf
  462.                         EndIf
  463.                     EndIf
  464.                     ;If _A2D_CCollision("custom",0,0,$aX,$aY,$aWidth,$aHeight,$SLine[2], $SLine[3], $SLine[4], $SLine[5]) Then Return 1
  465.                 ;EndIf
  466.             EndIf
  467.         Next
  468.     ElseIf $type = "ai:m" Then ;2 Benutzerdefinierte Objekte
  469.         ;blub
  470.     ElseIf $type = "objM:all" Then ;Prüft mögliche Kollision mit allen anderen bewegbaren Objekten
  471.         For $1count = 1 To $MaxObjM Step +1
  472.             If $Obj[2][$1count][4] = $On Then
  473.                 $ONum = $1count
  474.                 ExitLoop
  475.             EndIf
  476.         Next
  477.         $SLine = StringSplit($Obj[2][$ONum][1], ";")
  478.         If Not @error Then
  479.             For $a2dcount = 1 To $MaxObjM Step +1
  480.                 If $Obj[2][$a2dcount][4] <> $On Then
  481.                     $SLine2 = StringSplit($Obj[2][$a2dcount][1], ";")
  482.                     If Not @error Then
  483.                         If $SLine[2] <= $SLine2[2] + $SLine2[4] Then
  484.                             If $SLine[2] + $SLine[4] >= $SLine2[2] Then
  485.                                 If $SLine[3] <= $SLine2[3] + $SLine2[5] Then
  486.                                     If $SLine[3] + $SLine[5] >= $SLine2[3] Then Return $a2dcount
  487.                                 EndIf
  488.                             EndIf
  489.                         EndIf
  490.                     EndIf
  491.                 EndIf
  492.             Next
  493.         EndIf
  494.     ElseIf $type = "objM:single" Then
  495.         For $a2dcount = 1 To $MaxObjM Step +1
  496.             If $Obj[2][$a2dcount][5] = $excl and $Obj[2][$a2dcount][9] = 1 Then ;Wenn objtyp = feind dann kollisionscheck
  497.                 $SLine2 = StringSplit($Obj[2][$a2dcount][1], ";")
  498.                 If $aX <= $SLine2[2] + $SLine2[4] Then
  499.                     If $aX + $aWidth >= $SLine2[2] Then
  500.                         If $aY <= $SLine2[3] + $SLine2[5] Then
  501.                             If $aY + $aHeight >= $SLine2[3] Then
  502.                                 Return $Obj[2][$a2dcount][7]
  503.                             EndIf
  504.                         EndIf
  505.                     EndIf
  506.                 EndIf
  507.             ElseIf $Obj[2][$a2dcount][5] = $excl and $Obj[2][$a2dcount][9] = 1337 Then
  508.                 $SLine2 = StringSplit($Obj[2][$a2dcount][1], ";")
  509.                 If $aX <= $SLine2[2] + $SLine2[4] Then
  510.                     If $aX + $aWidth >= $SLine2[2] Then
  511.                         If $aY <= $SLine2[3] + $SLine2[5] Then
  512.                             If $aY + $aHeight >= $SLine2[3] Then
  513.                                 Return $Obj[2][$a2dcount][6]
  514.                             EndIf
  515.                         EndIf
  516.                     EndIf
  517.                 EndIf
  518.             EndIf
  519.         Next
  520.     EndIf
  521. EndFunc   ;==>_A2D_CCollision
  522. Func _A2D_ProjectileCreate($startx = 5, $starty = 5, $targetx = 5, $targety = 5,$pspeed = 100, $image = 0,$excl = 0, $cfp = 0)
  523.     ;Direction:
  524.     ;1 = oben y-
  525.     ;2 = unten y+
  526.     ;3 = links x-
  527.     ;4 = rechts x+
  528.     ;41 = nach rechts & oben
  529.     ;42 = mach rechts & unten
  530.     ;31 = nach links & oben
  531.     ;32 = nach links & unten
  532.     ;0 = custom
  533.     $distance=sqrt((abs($targetx-$startx))^2+(abs($targety-$starty))^2)
  534.     $dirX = ($targetx-$startx) / $distance
  535.     $dirY = ($targety-$starty) / $distance
  536.     #cs
  537.     If $cfp = 1 Then
  538.         $Testx = $startx
  539.         $Testy = $starty
  540.         While $Testx < $width and $Testx > 0 and $Testy < $height and $Testy > 0
  541.             If _A2D_CCollision("obj:s", 0, 0, $Testx, $Testy, 5, 5) Then
  542.                 Return -1
  543.             Else
  544.                 $Testx += $dirX
  545.                 $Testy += $dirY
  546.                 ;ConsoleWrite(@CRLF & "X: " & $Testx)
  547.                 ;ConsoleWrite(@CRLF & "Y: " & $Testy)
  548.             EndIf
  549.         WEnd
  550.     EndIf
  551.     #ce
  552.     If $Pcount < 50 Then
  553.         $Pcount += 1
  554.         $Proj[$Pcount][6] = 0
  555.         $Proj[$Pcount][1] = $startx
  556.         $Proj[$Pcount][2] = $starty
  557.         $Proj[$Pcount][3] = 0 ;Unbenutzt momentan
  558.         $Proj[$Pcount][4] = $pspeed
  559.         $Proj[$Pcount][5] = $dirX
  560.         $Proj[$Pcount][7] = $dirY
  561.         $Proj[$Pcount][8] = 0 ;elapsed
  562.         $Proj[$Pcount][9] = $excl
  563.         $Proj[$Pcount][10] = 0
  564.         $Proj[$Pcount][11] = $image
  565.     ElseIf $Pcount = 50 Then
  566.         For $a2dcount = 1 To $Pcount Step +1
  567.             If $Proj[$a2dcount][6] = 1 Then
  568.                 $Proj[$a2dcount][6] = 0
  569.                 $Proj[$a2dcount][1] = $startx
  570.                 $Proj[$a2dcount][2] = $starty
  571.                 $Proj[$a2dcount][3] = 0 ;Unbenutzt momentan
  572.                 $Proj[$a2dcount][4] = $pspeed
  573.                 $Proj[$a2dcount][5] = $dirX
  574.                 $Proj[$a2dcount][7] = $dirY
  575.                 $Proj[$a2dcount][8] = 0 ;elapsed
  576.                 $Proj[$a2dcount][9] = $excl
  577.                 $Proj[$a2dcount][10] = 0
  578.                 $Proj[$a2dcount][11] = $image
  579.                 ExitLoop
  580.             EndIf
  581.         Next
  582.     EndIf
  583.     Return 1
  584.     ;ConsoleWrite(@CRLF & $Pcount)
  585. EndFunc   ;==>_A2D_ProjectileCreate
  586. Func _A2D_ProjectileUpdate($width, $height, $ctype = 0) ;ctype = 0 keine kollision ;= 1 kollision mit obj ;= 2 kollision mit ai
  587.     For $a2dcount = 1 To $Pcount Step +1
  588.         If not $Proj[$a2dcount][6] = 1 Then
  589.             Switch $ctype
  590.                 Case 0
  591.                     $Proj[$a2dcount][8] += 0.001 ;elapsed += 0.001s
  592.                     $Proj[$a2dcount][1] += $Proj[$a2dcount][5]*$Proj[$a2dcount][4]*$Proj[$a2dcount][8] ;$x += $directionX*$mspeed*$elapsed
  593.                     $Proj[$a2dcount][2] += $Proj[$a2dcount][7]*$Proj[$a2dcount][4]*$Proj[$a2dcount][8] ;$y += $directionY*$mspeed*$elapsed
  594.                     _QuickDraw_Rect($Proj[$a2dcount][1], $Proj[$a2dcount][2],5,5, $Proj[$a2dcount][11], 0xFFFFFFFF)
  595.                     If $Proj[$a2dcount][2] > $height Or $Proj[$a2dcount][2] < 0 Or $Proj[$a2dcount][1] > $width Or $Proj[$a2dcount][1] < 0 Then
  596.                         $Proj[$a2dcount][6] = 1
  597.                     EndIf
  598.                 Case 1
  599.                     If _A2D_CCollision("obj:s", 0, $Proj[$a2dcount][9], $Proj[$a2dcount][1], $Proj[$a2dcount][2], 5, 5) Then
  600.                         $Proj[$a2dcount][6] = 1
  601.                         Return -1
  602.                     Else
  603.                         If _A2D_CCollision("objM:single", 0, $Proj[$a2dcount][9], $Proj[$a2dcount][1], $Proj[$a2dcount][2], 5, 5) Then
  604.                             $Proj[$a2dcount][6] = 1
  605.                             Return $Proj[$a2dcount][9]
  606.                         Else
  607.                             $Proj[$a2dcount][8] += 0.001 ;elapsed += 0.001s
  608.                             $Proj[$a2dcount][1] += $Proj[$a2dcount][5]*$Proj[$a2dcount][4]*$Proj[$a2dcount][8] ;$x += $directionX*$mspeed*$elapsed
  609.                             $Proj[$a2dcount][2] += $Proj[$a2dcount][7]*$Proj[$a2dcount][4]*$Proj[$a2dcount][8] ;$y += $directionY*$mspeed*$elapsed
  610.                             _QuickDraw_Rect($Proj[$a2dcount][1], $Proj[$a2dcount][2],5,5, $Proj[$a2dcount][11], 0xFFFFFFFF)
  611.                             If $Proj[$a2dcount][2] > $height Or $Proj[$a2dcount][2] < 0 Or $Proj[$a2dcount][1] > $width Or $Proj[$a2dcount][1] < 0 Then
  612.                                 $Proj[$a2dcount][6] = 1
  613.                             EndIf
  614.                         EndIf
  615.                     EndIf
  616.             EndSwitch
  617.         EndIf
  618.     Next
  619. EndFunc   ;==>_A2D_ProjectileUpdate
  620. Func _A2D_CreateFont($FName)
  621.     $Font = _QuickDraw_CreateFont($FName, False, False, False)
  622. EndFunc   ;==>_A2D_CreateFont
  623. Func _A2D_DrawString($String,$FSize,$X = 10, $Y = 10,$StringColor = 0xFF000000)
  624.     _QuickDraw_Text($X, $Y, $String, $FSize, $Font, $Draw_Fill, $StringColor)
  625.     ;_GDIPlus_GraphicsDrawString($BUF, $String, $X, $Y)
  626. EndFunc   ;==>_A2D_DrawString
  627. Func _A2D_FPS()
  628.     ;_GDIPlus_GraphicsClear($BUF, 0xFFFFFFFF)
  629.     ;_GDIPlus_GraphicsFillEllipse($BUF, 99, 99, 200, 200, $hBrushBlue)
  630.     _A2D_DrawString("FPS: " & $iFPS,10,10,12)
  631.     $iFrames += 1
  632. EndFunc   ;==>_A2D_FPS
  633. Func _FPS()
  634.     $iFPS = $iFrames
  635.     ;FileWriteLine("Debug.txt","FPS:" & $iFPS & "             DIST:" & $distance)
  636.     $iFrames = 0
  637. EndFunc   ;==>FPS
  638. Func _A2D_Shutdown()
  639.     ;_GDIPlus_GraphicsDispose($hGraphic);Grafikobjekt freigeben
  640.     ;_GDIPlus_GraphicsDispose($BUF);----------------- geändert ----------------------
  641.     ;_GDIPlus_BitmapDispose($BIT);----------------- geändert ----------------------
  642.     ;_GDIPlus_Shutdown()
  643.     For $a2dcount = 1 To $MaxObjM Step +1
  644.         _QuickDraw_FreeTexture($Obj[2][$MaxObjM][2])
  645.     Next
  646.     _QuickDraw_FreeFont($Font)
  647.     _QuickDraw_Disable()
  648.     Exit
  649. EndFunc   ;==>_A2D_Shutdown
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement