Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #cs ----------------------------------------------------------------------------
- AutoIt Version: 3.3.13.20 (Beta)
- Author: FireDiver
- Engine-Version: 0.9a
- Script Function:
- Simple Autoit 2D Game Engine
- #ce ----------------------------------------------------------------------------
- ;Variable Obj:
- ;$Obj[Stationär(1) / Bewegend(2)][Nummer][X/Y/ETC.]
- #include <GDIPlus.au3>
- #include <GDIPlusConstants.au3>
- #include <ButtonConstants.au3>
- #include <EditConstants.au3>
- #include <GUIConstantsEx.au3>
- #include <StaticConstants.au3>
- #include <WindowsConstants.au3>
- #include <File.au3>
- #include <Array.au3>
- #include "QuickDraw.au3"
- OnAutoItExitRegister("_A2D_Shutdown") ;AIWP [ AINUMMER] [ WEGPUNKTNUMMER ] [ X/Y/DIR ]
- 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
- 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]
- Func _A2D_Startup($GUITitle, $GUIWidth, $GUIHeight, $GraWidth, $GraHeight, $Debug = 0, $OGUI = 1,$LWidth = 10,$hGUI = 0)
- _GDIPlus_Startup()
- ;$GUI = GUICreate($GUITitle, $GUIWidth,$GUIHeight)
- If $Debug = 2 Then
- _QuickDraw_Enable($GUITitle, $GUIWidth, $GUIHeight, 20,60, False)
- Else
- _QuickDraw_CreateSurface( $hGUI, 200, 200, $GUIWidth, $GUIHeight )
- EndIf
- _QuickDraw_SetLineWidth($LWidth)
- ;_QuickDraw_SetRenderTarget($Normal_Buffer)
- For $a2dcount = 1 To 50 Step +1
- $Proj[$a2dcount][0] = 0
- Next
- $width = $GUIWidth
- $height = $GUIHeight
- If $Debug = 1 or 2 Then
- $iFPS = 0 ;FramesPerSecond
- $iFrames = 0 ;CurrentFrameCount
- AdlibRegister(_FPS, 1000)
- EndIf
- _A2D_CreateFont("Arial")
- EndFunc ;==>_A2D_Startup
- Func _Random($Min, $Max, $exclude)
- $excludes = StringSplit($exclude, ";")
- While 1
- $snum = 0
- $number = Random($Min, $Max, 1)
- Switch $excludes[1]
- Case 0
- Return $number
- Case 1
- For $countR = 2 To _ArrayMax($excludes) Step +1
- If $excludes[$countR] = $number Then
- $snum = 1
- EndIf
- Next
- If $snum = 0 Then
- Return $number
- EndIf
- Case 2
- If $excludes[2] = $number Then
- $snum = 1
- EndIf
- If $snum = 0 Then
- Return $number
- EndIf
- EndSwitch
- WEnd
- EndFunc ;==>_Random
- Func _A2D_LoadImage($path)
- Return _QuickDraw_LoadTexture($path)
- EndFunc ;==>_A2D_LoadImage
- Func _A2D_ObjCreate($path, $XCoord, $YCoord, $ObjWidth, $ObjHeight, $ObjName,$Type2 = 1,$ExtraData = 0,$ExtraData2 = 0)
- ;Typ 1 = Spieler/Freund
- ;Typ 2 = Gegner
- $Bitmap = $path;_QuickDraw_LoadTexture($path)
- $MaxObjM += 1
- $Obj[2][$MaxObjM][1] = "Obj;" & $XCoord & ";" & $YCoord & ";" & $ObjWidth & ";" & $ObjHeight & ";tr"
- $Obj[2][$MaxObjM][2] = $Bitmap
- $Obj[2][$MaxObjM][3] = "false"
- $Obj[2][$MaxObjM][4] = $ObjName
- $Obj[2][$MaxObjM][5] = $Type2
- $Obj[2][$MaxObjM][6] = $ExtraData
- $Obj[2][$MaxObjM][7] = $ExtraData2
- ;Platz 9 ist aktivitätsstaus!
- EndFunc ;==>_A2D_ObjCreate
- Func _A2D_ObjUpdate($ObjNameU,$Bitmap,$XCoord = 0, $YCoord = 0, $ObjWidth = 0, $ObjHeight = 0,$Type = 1,$ExtraData = 0,$ExtraData2 = 0)
- For $1count = 1 To $MaxObjM Step +1
- If $Obj[2][$1count][4] = $ObjNameU Then
- $ONum = $1count
- ExitLoop
- EndIf
- Next
- $Obj[2][$ONum][1] = "Obj;" & $XCoord & ";" & $YCoord & ";" & $ObjWidth & ";" & $ObjHeight & ";tr"
- $Obj[2][$ONum][2] = $Bitmap
- $Obj[2][$ONum][4] = $ObjNameU
- $Obj[2][$ONum][5] = $Type
- $Obj[2][$ONum][6] = $ExtraData
- $Obj[2][$ONum][7] = $ExtraData2
- EndFunc
- Func _A2D_ObjDraw($ObjNameU, $Umode = 0, $XCoord = 0, $YCoord = 0, $ObjWidth = 0, $ObjHeight = 0,$Type = 1,$ExtraData = 0,$ExtraData2 = 0,$Bitmap = 0)
- For $1count = 1 To $MaxObjM Step +1
- If $Obj[2][$1count][4] = $ObjNameU Then
- $ONum = $1count
- ExitLoop
- EndIf
- Next
- If $Umode = 1 Then
- If $Bitmap = 0 Then $Bitmap = $Obj[2][$ONum][2]
- ;ConsoleWrite(@CRLF & $ObjNameU)
- $Obj[2][$ONum][1] = "Obj;" & $XCoord & ";" & $YCoord & ";" & $ObjWidth & ";" & $ObjHeight & ";tr"
- $Obj[2][$ONum][2] = $Bitmap
- $Obj[2][$ONum][5] = $Type
- $Obj[2][$ONum][6] = $ExtraData
- $Obj[2][$ONum][7] = $ExtraData2
- EndIf
- $OSplit = StringSplit($Obj[2][$ONum][1], ";")
- If Not @error Then
- ;_GDIPlus_GraphicsDrawImageRect($BUF, $Obj[2][$ONum][2], $OSplit[2], $OSplit[3], $OSplit[4], $OSplit[5])
- ;_QuickDraw_Rect($OSplit[2], $OSplit[3], $OSplit[4], $OSplit[5], $Obj[2][$ONum][2], 0xFFFFFFFF)
- DllCall( $QuickDrawDLL, "bool:cdecl","RenderRect", "int", $OSplit[2], "int", $OSplit[3], "int", $OSplit[4], "int", $OSplit[5], "int", $Obj[2][$ONum][2], "long", 0xFFFFFFFF)
- EndIf
- EndFunc ;==>_A2D_ObjDraw
- Func _IntToBin($iValue)
- Local $sOut
- For $i = 31 To 0 Step -1
- $sOut &= BitAND(BitShift($iValue, $i), 1)
- Next
- Return $sOut
- EndFunc
- Func _BinToInt($sValue)
- Local $iOut = 0, $aValue = StringSplit($sValue, "")
- For $i = 1 To $aValue[0]
- $aValue[0] -= 1
- If $aValue[$i] = "1" Then $iOut += 2 ^ ($aValue[0])
- Next
- Return $iOut
- EndFunc
- Func _A2D_Encrypt($data,$dpath)
- $bin = _IntToBin($data)
- $split = StringSplit($bin,"")
- $var1 = ""
- $var2 = ""
- For $count = 1 to $split[0] Step +1
- Switch $split[$count]
- Case 0
- $var1 = $var1 & Random(0,4,1)
- Case 1
- $var1 = $var1 & Random(5,9,1)
- EndSwitch
- Next
- For $count = 1 to $split[0] Step +1
- Switch $split[$count]
- Case 0
- $var2 = $var2 & Random(5,9,1)
- Case 1
- $var2 = $var2 & Random(0,4,1)
- EndSwitch
- Next
- If FileExists($dpath) Then FileDelete($dpath)
- FileWriteLine($dpath,$var1)
- FileWriteLine($dpath,$var2)
- EndFunc
- Func _A2D_Decrypt($dpath)
- ;Algorithmus von Digity
- $Data1 = FileReadLine($dpath,1)
- $Data2 = FileReadLine($dpath,2)
- $Split1 = StringSplit($Data1,"")
- $Split2 = StringSplit($Data2,"")
- $var1 = ""
- $var2 = ""
- For $count = 1 to $Split1[0] Step +1
- If $Split1[$count] < 5 Then
- $var1 = $var1 & 0
- ElseIf $Split1[$count] > 4 Then
- $var1 = $var1 & 1
- EndIf
- Next
- For $count = 1 to $Split2[0] Step +1
- If $Split2[$count] > 4 Then
- $var2 = $var2 & 0
- ElseIf $Split2[$count] < 5 Then
- $var2 = $var2 & 1
- EndIf
- Next
- If $var1 = $var2 Then
- Return _BinToInt($var1)
- Else
- Return "Fehler"
- EndIf
- EndFunc
- Func _A2D_Buffer()
- ;_GDIPlus_GraphicsDrawImage($hGraphic, $BIT, 0, 0)
- ;_QuickDraw_SwapBuffers()
- DllCall( $QuickDrawDLL, "bool:cdecl","Swap_Buffers")
- EndFunc ;==>_A2D_Buffer
- Func _A2D_PlusDraw($XPlus, $YPlus)
- ;Vertikale Linie
- _QuickDraw_Line( $XPlus ,$YPlus - 10, $XPlus, $YPlus + 10, 0xFFD52B1E )
- ;_GDIPlus_GraphicsDrawLine($BUF, $XPlus, $YPlus - 10, $XPlus, $YPlus + 10, $PEN)
- ;Horizontale Linie
- _QuickDraw_Line( $XPlus - 10 ,$YPlus , $XPlus + 10, $YPlus, 0xFFD52B1E )
- ;_GDIPlus_GraphicsDrawLine($BUF, $XPlus - 10, $YPlus, $XPlus + 10, $YPlus, $PEN)
- EndFunc ;==>_A2D_PlusDraw
- Func _A2D_LoadMap($MapPath)
- $Mlines = _FileCountLines($MapPath)
- For $a2dcount = 2 To $Mlines Step +1
- $Line = FileReadLine($MapPath, $a2dcount)
- $SLine = StringSplit($Line, ";")
- If Not @error Then
- If $SLine[1] = "Obj" Then
- $Obj[1][$a2dcount][1] = "Obj;" & $SLine[2] & ";" & $SLine[3] & ";" & $SLine[4] & ";" & $SLine[5] & ";" & $SLine[6]
- $Obj[1][$a2dcount][3] = "false"
- EndIf
- If $SLine[1] = "AI" Then
- $MAXAI += 1
- $MaxWP[$MAXAI] = 1
- $AIPOS[$MAXAI][1] = $SLine[2]
- $AIPOS[$MAXAI][2] = $SLine[3]
- $AIWP[$MAXAI][$SLine[5]][1] = $SLine[2] ;X
- $AIWP[$MAXAI][$SLine[5]][2] = $SLine[3] ;Y
- $AIWP[$MAXAI][$SLine[5]][3] = $SLine[4] ;Dir
- $AIWP[$MAXAI][$SLine[5]][4] = $SLine[6] ;Name
- $AWP[$MAXAI] = 1 ;Aktiver Wegpunkt
- $AISpeed[$MAXAI] = 2
- $AISTATUS[$MAXAI] = $SLine[7]
- EndIf
- If $SLine[1] = "WP" Then
- If $MAXAI > 0 Then
- $AINUM = 0
- For $a2dcount2 = 1 To $MAXAI Step +1
- If $AIWP[$a2dcount2][1][4] = $SLine[6] Then
- $AINUM = $a2dcount2
- ExitLoop
- EndIf
- Next
- $MaxWP[$AINUM] += 1
- $AIWP[$AINUM][$SLine[5]][1] = $SLine[2] ;X
- $AIWP[$AINUM][$SLine[5]][2] = $SLine[3] ;Y
- $AIWP[$AINUM][$SLine[5]][3] = $SLine[4] ;Dir
- $AIWP[$AINUM][$SLine[5]][4] = $SLine[6] ;Name
- EndIf
- EndIf
- EndIf
- Next
- $MaxObjS = $Mlines
- EndFunc ;==>_A2D_LoadMap
- Func _A2D_SETAISTATUS($AINAME,$Status)
- For $a2dcount2 = 1 To $MAXAI Step +1
- If $AIWP[$a2dcount2][1][4] = $AINAME Then
- $AISTATUS[$a2dcount2] = $Status
- ExitLoop
- EndIf
- Next
- EndFunc
- Func _A2D_SETAISPEED($AINAME,$spd)
- For $a2dcount2 = 1 To $MAXAI Step +1
- If $AIWP[$a2dcount2][1][4] = $AINAME Then
- $AISpeed[$a2dcount2] = $spd
- ExitLoop
- EndIf
- Next
- EndFunc
- Func _A2D_SETAIPOS($AINAME, $WP)
- For $a2dcount2 = 1 To $MAXAI Step +1
- If $AIWP[$a2dcount2][1][4] = $AINAME Then
- $AINUM = $a2dcount2
- ExitLoop
- EndIf
- Next
- $AWP[$AINUM] = $WP
- $AIPOS[$AINUM][1] = $AIWP[$AINUM][$WP][1]
- $AIPOS[$AINUM][2] = $AIWP[$AINUM][$WP][2]
- EndFunc ;==>_A2D_SETAIPOS
- Func _A2D_AICOLL($AINAME, $XC, $YC, $WidthC, $HeightC)
- For $a2dcount2 = 1 To $MAXAI Step +1
- If $AIWP[$a2dcount2][1][4] = $AINAME Then
- $AINUM = $a2dcount2
- ExitLoop
- EndIf
- Next
- $distance2 = Sqrt((Abs($AIPOS[$AINUM][1] - $XC)) ^ 2 + (Abs($AIPOS[$AINUM][2] - $YC)) ^ 2) ;Distanz zwischen AI-Position und benutzerdef. Koordinaten mit Pythagoras
- If $distance2 < 25 Then
- If $AIPOS[$AINUM][1] <= $XC + $WidthC Then
- If $AIPOS[$AINUM][1] + 20 >= $XC Then
- If $AIPOS[$AINUM][2] <= $YC + $HeightC Then
- If $AIPOS[$AINUM][2] + 20 >= $YC Then Return 1
- EndIf
- EndIf
- EndIf
- EndIf
- EndFunc ;==>_A2D_AICOLL
- Func _A2D_GETAIPOS($AINAME,$type = 1)
- For $a2dcount2 = 1 To $MAXAI Step +1
- If $AIWP[$a2dcount2][1][4] = $AINAME Then
- $AINUM = $a2dcount2
- ExitLoop
- EndIf
- Next
- Switch $type
- Case 1
- If $AWP[$AINUM] = $MaxWP[$AINUM] Then
- Return "Max"
- Else
- Return $AWP[$AINUM]
- EndIf
- Case 2
- $apos[0] = $AIPOS[$AINUM][1]
- $apos[1] = $AIPOS[$AINUM][2]
- Return $apos
- EndSwitch
- EndFunc
- Func _A2D_DrawBitMap($Bitmap,$x,$y,$width,$height)
- DllCall( $QuickDrawDLL, "bool:cdecl","RenderRect", "int", $x, "int", $y, "int", $width, "int", $height, "int", $Bitmap, "long", 0xFFFFFFFF)
- ;_QuickDraw_Rect($x, $y, $width, $height, $Bitmap, 0xFFFFFFFF)
- EndFunc
- Func _A2D_DRAWAITXT($AINAME,$String,$Size,$Color = 0xFF000000,$LOCATION = "bot")
- For $a2dcount2 = 1 To $MAXAI Step +1
- If $AIWP[$a2dcount2][1][4] = $AINAME Then
- $AINUM = $a2dcount2
- ExitLoop
- EndIf
- Next
- Switch $LOCATION
- Case "bot"
- _A2D_DrawString($String,$Size,$AIPOS[$AINUM][1], $AIPOS[$AINUM][2] + 15,$Color)
- Case "mid"
- _A2D_DrawString($String,$Size,$AIPOS[$AINUM][1] + 7.5, $AIPOS[$AINUM][2] + 7.5,$Color)
- EndSwitch
- EndFunc
- Func _A2D_DRAWAIBIT($AINAME,$AIBITMAP,$WIDTH,$HEIGHT,$LOCATION = "bot")
- For $a2dcount2 = 1 To $MAXAI Step +1
- If $AIWP[$a2dcount2][1][4] = $AINAME Then
- $AINUM = $a2dcount2
- ExitLoop
- EndIf
- Next
- Switch $LOCATION
- Case "bot"
- _QuickDraw_Rect($AIPOS[$AINUM][1], $AIPOS[$AINUM][2] + 20, $WIDTH, $HEIGHT, $AIBITMAP, 0xFFFFFFFF)
- Case "mid"
- _QuickDraw_Rect($AIPOS[$AINUM][1], $AIPOS[$AINUM][2] + 10, $WIDTH, $HEIGHT, $AIBITMAP, 0xFFFFFFFF)
- EndSwitch
- EndFunc
- Func _A2D_AIUPDATE($AINAME, $AIBITMAP)
- For $a2dcount2 = 1 To $MAXAI Step +1
- If $AIWP[$a2dcount2][1][4] = $AINAME Then
- $AINUM = $a2dcount2
- ExitLoop
- EndIf
- Next
- $NewPos = $AWP[$AINUM] + 1
- For $fcount = 1 To $AISpeed[$AINUM] Step +1
- If $AIPOS[$AINUM][1] = $AIWP[$AINUM][$NewPos][1] Then
- If $AIPOS[$AINUM][2] = $AIWP[$AINUM][$NewPos][2] Then
- If $NewPos <> $AWP[$AINUM] Then $AWP[$AINUM] += 1
- EndIf
- EndIf
- Select
- Case $AIWP[$AINUM][$AWP[$AINUM]][3] = 1 ;links
- $AIPOS[$AINUM][1] -= 1
- Case $AIWP[$AINUM][$AWP[$AINUM]][3] = 2 ;hoch
- $AIPOS[$AINUM][2] -= 1
- Case $AIWP[$AINUM][$AWP[$AINUM]][3] = 3 ;runter
- $AIPOS[$AINUM][2] += 1
- Case $AIWP[$AINUM][$AWP[$AINUM]][3] = 4 ;rechts
- $AIPOS[$AINUM][1] += 1
- EndSelect
- Next
- _QuickDraw_Rect($AIPOS[$AINUM][1], $AIPOS[$AINUM][2], 20, 20, $AIBITMAP, 0xFFFFFFFF)
- If $AWP[$AINUM] = $MaxWP[$AINUM] Then
- $AWP[$AINUM] = 1
- $AIPOS[$AINUM][1] = $AIWP[$AINUM][$AWP[$AINUM]][1]
- $AIPOS[$AINUM][2] = $AIWP[$AINUM][$AWP[$AINUM]][2]
- EndIf
- EndFunc ;==>_A2D_AIUPDATE
- Func _A2D_MapReset()
- If $MaxObjM >= $MaxObjS Then
- For $a2dcount = 0 To $MaxObjM Step +1
- $Obj[1][$a2dcount][1] = ""
- $Obj[1][$a2dcount][2] = ""
- $Obj[1][$a2dcount][3] = ""
- $Obj[2][$a2dcount][1] = ""
- $Obj[2][$a2dcount][2] = ""
- $Obj[2][$a2dcount][3] = ""
- Next
- ElseIf $MaxObjS > $MaxObjM Then
- For $a2dcount = 0 To $MaxObjS Step +1
- $Obj[1][$a2dcount][1] = ""
- $Obj[1][$a2dcount][2] = ""
- $Obj[1][$a2dcount][3] = ""
- $Obj[2][$a2dcount][1] = ""
- $Obj[2][$a2dcount][2] = ""
- $Obj[2][$a2dcount][3] = ""
- Next
- EndIf
- EndFunc ;==>_A2D_MapReset
- Func _A2D_DrawLine($x1, $y1, $x2, $y2)
- _GDIPlus_GraphicsDrawLine($BUF, $x1, $y1, $x2, $y2, $PEN)
- EndFunc ;==>_A2D_DrawLine
- Func _A2D_MapDraw($mbitmap, $mwidth, $mheight, $mtype = 1,$startx = 0,$starty = 0)
- ;Nicht vergessen im Spiel die Figuren usw. vorher zu Zeichnen und den Buffer nach diesem Befehl wenn GDI+ verwendet wird
- Switch $mtype
- Case 1 ;MapBitmapOnly
- ;_GDIPlus_GraphicsDrawImageRect($BUF, $mbitmap, 0, 0, $mwidth, $mheight)
- ;_QuickDraw_Rect(0, 0, $mwidth, $mheight, $mbitmap, 0xFFFFFFFF)
- DllCall( $QuickDrawDLL, "bool:cdecl","RenderRect", "int", $startx, "int", $starty, "int", $mwidth, "int", $mheight, "int", $mbitmap, "long", 0xFFFFFFFF)
- Case 2 ;MapObjs (outdated)
- For $a2dcount = 1 To $Mlines Step +1
- $SLine = StringSplit($Obj[1][$a2dcount], ";")
- If Not @error Then
- If Not $SLine[5] = "tr" Then
- If $Obj[1][$a2dcount][3] = "false" Then
- $Obj[1][$a2dcount][2] = _A2D_LoadImage(@ScriptDir & "\Data\" & $SLine[5])
- $Obj[1][$a2dcount][3] = "true"
- EndIf
- ;_GDIPlus_GraphicsDrawImageRect($BUF, $Obj[1][$count][2], $SLine[2], $SLine[3], $SLine[4], $SLine[5])
- _QuickDraw_Rect($SLine[2], $SLine[3], $SLine[4], $SLine[5], $Obj[1][$a2dcount][2], 0xFFFFFFFF)
- EndIf
- EndIf
- Next
- EndSwitch
- EndFunc ;==>_A2D_MapDraw
- Func _A2D_ObjStatus($name,$status)
- For $1count = 1 To $MaxObjM Step +1
- If $Obj[2][$1count][4] = $name Then
- $ONum = $1count
- ExitLoop
- EndIf
- Next
- $Obj[2][$ONum][9] = $status
- EndFunc
- Func _A2D_CCollision($type, $On = 0, $excl = 0, $aX = 0, $aY = 0, $aWidth = 0, $aHeight = 0, $bX = 0, $bY = 0, $bWidth = 0, $bHeight = 0)
- If $type = "custom" Then
- If $aX <= $bX + $bWidth Then
- If $aX + $aWidth >= $bX Then
- If $aY <= $bY + $bHeight Then
- If $aY + $aHeight >= $bY Then
- Return 1
- EndIf
- EndIf
- EndIf
- EndIf
- ElseIf $type = "obj:s" Then ;Stationäres Objekt (von der map)
- For $a2dcount = 1 To $Mlines Step +1
- $SLine = StringSplit($Obj[1][$a2dcount][1], ";")
- If Not @error Then
- ;$distance = Sqrt((Abs($aX - ($SLine[2] + $SLine[4] / 2))) ^ 2 + (Abs($aY - ($SLine[3] + $SLine[5] / 2))) ^ 2)
- ;If $distance < 100 Then
- If $aX <= $SLine[2] + $SLine[4] Then
- If $aX + $aWidth >= $SLine[2] Then
- If $aY <= $SLine[3] + $SLine[5] Then
- If $aY + $aHeight >= $SLine[3] Then
- Return 1
- EndIf
- EndIf
- EndIf
- EndIf
- ;If _A2D_CCollision("custom",0,0,$aX,$aY,$aWidth,$aHeight,$SLine[2], $SLine[3], $SLine[4], $SLine[5]) Then Return 1
- ;EndIf
- EndIf
- Next
- ElseIf $type = "ai:m" Then ;2 Benutzerdefinierte Objekte
- ;blub
- ElseIf $type = "objM:all" Then ;Prüft mögliche Kollision mit allen anderen bewegbaren Objekten
- For $1count = 1 To $MaxObjM Step +1
- If $Obj[2][$1count][4] = $On Then
- $ONum = $1count
- ExitLoop
- EndIf
- Next
- $SLine = StringSplit($Obj[2][$ONum][1], ";")
- If Not @error Then
- For $a2dcount = 1 To $MaxObjM Step +1
- If $Obj[2][$a2dcount][4] <> $On Then
- $SLine2 = StringSplit($Obj[2][$a2dcount][1], ";")
- If Not @error Then
- If $SLine[2] <= $SLine2[2] + $SLine2[4] Then
- If $SLine[2] + $SLine[4] >= $SLine2[2] Then
- If $SLine[3] <= $SLine2[3] + $SLine2[5] Then
- If $SLine[3] + $SLine[5] >= $SLine2[3] Then Return $a2dcount
- EndIf
- EndIf
- EndIf
- EndIf
- EndIf
- Next
- EndIf
- ElseIf $type = "objM:single" Then
- For $a2dcount = 1 To $MaxObjM Step +1
- If $Obj[2][$a2dcount][5] = $excl and $Obj[2][$a2dcount][9] = 1 Then ;Wenn objtyp = feind dann kollisionscheck
- $SLine2 = StringSplit($Obj[2][$a2dcount][1], ";")
- If $aX <= $SLine2[2] + $SLine2[4] Then
- If $aX + $aWidth >= $SLine2[2] Then
- If $aY <= $SLine2[3] + $SLine2[5] Then
- If $aY + $aHeight >= $SLine2[3] Then
- Return $Obj[2][$a2dcount][7]
- EndIf
- EndIf
- EndIf
- EndIf
- ElseIf $Obj[2][$a2dcount][5] = $excl and $Obj[2][$a2dcount][9] = 1337 Then
- $SLine2 = StringSplit($Obj[2][$a2dcount][1], ";")
- If $aX <= $SLine2[2] + $SLine2[4] Then
- If $aX + $aWidth >= $SLine2[2] Then
- If $aY <= $SLine2[3] + $SLine2[5] Then
- If $aY + $aHeight >= $SLine2[3] Then
- Return $Obj[2][$a2dcount][6]
- EndIf
- EndIf
- EndIf
- EndIf
- EndIf
- Next
- EndIf
- EndFunc ;==>_A2D_CCollision
- Func _A2D_ProjectileCreate($startx = 5, $starty = 5, $targetx = 5, $targety = 5,$pspeed = 100, $image = 0,$excl = 0, $cfp = 0)
- ;Direction:
- ;1 = oben y-
- ;2 = unten y+
- ;3 = links x-
- ;4 = rechts x+
- ;41 = nach rechts & oben
- ;42 = mach rechts & unten
- ;31 = nach links & oben
- ;32 = nach links & unten
- ;0 = custom
- $distance=sqrt((abs($targetx-$startx))^2+(abs($targety-$starty))^2)
- $dirX = ($targetx-$startx) / $distance
- $dirY = ($targety-$starty) / $distance
- #cs
- If $cfp = 1 Then
- $Testx = $startx
- $Testy = $starty
- While $Testx < $width and $Testx > 0 and $Testy < $height and $Testy > 0
- If _A2D_CCollision("obj:s", 0, 0, $Testx, $Testy, 5, 5) Then
- Return -1
- Else
- $Testx += $dirX
- $Testy += $dirY
- ;ConsoleWrite(@CRLF & "X: " & $Testx)
- ;ConsoleWrite(@CRLF & "Y: " & $Testy)
- EndIf
- WEnd
- EndIf
- #ce
- If $Pcount < 50 Then
- $Pcount += 1
- $Proj[$Pcount][6] = 0
- $Proj[$Pcount][1] = $startx
- $Proj[$Pcount][2] = $starty
- $Proj[$Pcount][3] = 0 ;Unbenutzt momentan
- $Proj[$Pcount][4] = $pspeed
- $Proj[$Pcount][5] = $dirX
- $Proj[$Pcount][7] = $dirY
- $Proj[$Pcount][8] = 0 ;elapsed
- $Proj[$Pcount][9] = $excl
- $Proj[$Pcount][10] = 0
- $Proj[$Pcount][11] = $image
- ElseIf $Pcount = 50 Then
- For $a2dcount = 1 To $Pcount Step +1
- If $Proj[$a2dcount][6] = 1 Then
- $Proj[$a2dcount][6] = 0
- $Proj[$a2dcount][1] = $startx
- $Proj[$a2dcount][2] = $starty
- $Proj[$a2dcount][3] = 0 ;Unbenutzt momentan
- $Proj[$a2dcount][4] = $pspeed
- $Proj[$a2dcount][5] = $dirX
- $Proj[$a2dcount][7] = $dirY
- $Proj[$a2dcount][8] = 0 ;elapsed
- $Proj[$a2dcount][9] = $excl
- $Proj[$a2dcount][10] = 0
- $Proj[$a2dcount][11] = $image
- ExitLoop
- EndIf
- Next
- EndIf
- Return 1
- ;ConsoleWrite(@CRLF & $Pcount)
- EndFunc ;==>_A2D_ProjectileCreate
- Func _A2D_ProjectileUpdate($width, $height, $ctype = 0) ;ctype = 0 keine kollision ;= 1 kollision mit obj ;= 2 kollision mit ai
- For $a2dcount = 1 To $Pcount Step +1
- If not $Proj[$a2dcount][6] = 1 Then
- Switch $ctype
- Case 0
- $Proj[$a2dcount][8] += 0.001 ;elapsed += 0.001s
- $Proj[$a2dcount][1] += $Proj[$a2dcount][5]*$Proj[$a2dcount][4]*$Proj[$a2dcount][8] ;$x += $directionX*$mspeed*$elapsed
- $Proj[$a2dcount][2] += $Proj[$a2dcount][7]*$Proj[$a2dcount][4]*$Proj[$a2dcount][8] ;$y += $directionY*$mspeed*$elapsed
- _QuickDraw_Rect($Proj[$a2dcount][1], $Proj[$a2dcount][2],5,5, $Proj[$a2dcount][11], 0xFFFFFFFF)
- If $Proj[$a2dcount][2] > $height Or $Proj[$a2dcount][2] < 0 Or $Proj[$a2dcount][1] > $width Or $Proj[$a2dcount][1] < 0 Then
- $Proj[$a2dcount][6] = 1
- EndIf
- Case 1
- If _A2D_CCollision("obj:s", 0, $Proj[$a2dcount][9], $Proj[$a2dcount][1], $Proj[$a2dcount][2], 5, 5) Then
- $Proj[$a2dcount][6] = 1
- Return -1
- Else
- If _A2D_CCollision("objM:single", 0, $Proj[$a2dcount][9], $Proj[$a2dcount][1], $Proj[$a2dcount][2], 5, 5) Then
- $Proj[$a2dcount][6] = 1
- Return $Proj[$a2dcount][9]
- Else
- $Proj[$a2dcount][8] += 0.001 ;elapsed += 0.001s
- $Proj[$a2dcount][1] += $Proj[$a2dcount][5]*$Proj[$a2dcount][4]*$Proj[$a2dcount][8] ;$x += $directionX*$mspeed*$elapsed
- $Proj[$a2dcount][2] += $Proj[$a2dcount][7]*$Proj[$a2dcount][4]*$Proj[$a2dcount][8] ;$y += $directionY*$mspeed*$elapsed
- _QuickDraw_Rect($Proj[$a2dcount][1], $Proj[$a2dcount][2],5,5, $Proj[$a2dcount][11], 0xFFFFFFFF)
- If $Proj[$a2dcount][2] > $height Or $Proj[$a2dcount][2] < 0 Or $Proj[$a2dcount][1] > $width Or $Proj[$a2dcount][1] < 0 Then
- $Proj[$a2dcount][6] = 1
- EndIf
- EndIf
- EndIf
- EndSwitch
- EndIf
- Next
- EndFunc ;==>_A2D_ProjectileUpdate
- Func _A2D_CreateFont($FName)
- $Font = _QuickDraw_CreateFont($FName, False, False, False)
- EndFunc ;==>_A2D_CreateFont
- Func _A2D_DrawString($String,$FSize,$X = 10, $Y = 10,$StringColor = 0xFF000000)
- _QuickDraw_Text($X, $Y, $String, $FSize, $Font, $Draw_Fill, $StringColor)
- ;_GDIPlus_GraphicsDrawString($BUF, $String, $X, $Y)
- EndFunc ;==>_A2D_DrawString
- Func _A2D_FPS()
- ;_GDIPlus_GraphicsClear($BUF, 0xFFFFFFFF)
- ;_GDIPlus_GraphicsFillEllipse($BUF, 99, 99, 200, 200, $hBrushBlue)
- _A2D_DrawString("FPS: " & $iFPS,10,10,12)
- $iFrames += 1
- EndFunc ;==>_A2D_FPS
- Func _FPS()
- $iFPS = $iFrames
- ;FileWriteLine("Debug.txt","FPS:" & $iFPS & " DIST:" & $distance)
- $iFrames = 0
- EndFunc ;==>FPS
- Func _A2D_Shutdown()
- ;_GDIPlus_GraphicsDispose($hGraphic);Grafikobjekt freigeben
- ;_GDIPlus_GraphicsDispose($BUF);----------------- geändert ----------------------
- ;_GDIPlus_BitmapDispose($BIT);----------------- geändert ----------------------
- ;_GDIPlus_Shutdown()
- For $a2dcount = 1 To $MaxObjM Step +1
- _QuickDraw_FreeTexture($Obj[2][$MaxObjM][2])
- Next
- _QuickDraw_FreeFont($Font)
- _QuickDraw_Disable()
- Exit
- EndFunc ;==>_A2D_Shutdown
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement