Extended API by GarBenjamin5th Sep 2018 3:59
|
---|
Summary Implements some fundamental functionality that is not contained within the native API. Description Implements some fundamental functionality that is not contained within the native API. Ideally, in time, this will be split out into 3 different files: APIGeneral.agc, API2D.agc and API3D.agc Currently, I have put everything into the APIGeneral.agc file even though there are a few sprite functions. Implements the following... CONSTANT DECLARATIONS: TRUE, FALSE, TRANSPARENCY_MODE_OFF, TRANSPARENCY_MODE_ALPHA, TRANSPARENCY_MODE_ADDITIVE, KEY_LEFT, KEY_A, KEY_RIGHT, KEY_D, KEY_UP, KEY_W, KEY_DOWN, KEY_S, KEY_T, KEY_E, KEY_SPACE, KEY_N, KEY_ESC, KEY_Z, KEY_X, KEY_C, KEY_SHIFT, KEY_ENTER, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_F1, KEY_F2, KEY_F3 and KEY_F4. TYPES: TVector2D. GENERAL FUNCTIONS: InitDisplay(title as string, width as integer, height as integer, maxFrameRate as float, allowResize as integer, fullscreen as integer), MinF(value1 as float, value2 as float), Min(value1 as integer, value2 as integer), MaxF(value1 as float, value2 as float), Max(value1 as integer, value2 as integer), SgnF(value as float), Sgn(value as integer) and GetFormatedInteger(value as integer, totalLength as integer). 2D VECTOR FUNCTIONS: Vector2DGetRatios(v2d ref as TVector2D) and Vector2DNormalize(v2d ref as TVector2D). ANGLE FUNCTIONS: AngleGetDistanceToAngle(fromAngle as float, toAngle as float), AngleGetShortestDistanceToAngle(fromAngle as float, toAngle as float), AngleIsWithin(testAngle as float, AngleToCompareTo as float, degrees as float), AngleIsBetween(testAngle as float, Angle1 as float, Angle2 as float) and AngleAddWithLimits(angle as float, valueToAdd as float, angleMin as float, angleMax as float). SPRITE FUNCTIONS: SetSpriteFaceSprite(sprite as integer, SpriteToFace as integer), SetSpriteFacePosition(sprite as integer, targetX as float, targetY as float) and SetSpriteFaceMouse(sprite as integer). Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com // *********************************************************************** // CONSTANT REFERENCES // *********************************************************************** #constant TRUE 1 #constant FALSE 0 #constant TRANSPARENCY_MODE_OFF 0 #constant TRANSPARENCY_MODE_ALPHA 1 #constant TRANSPARENCY_MODE_ADDITIVE 2 #constant KEY_LEFT 37 #constant KEY_A 65 #constant KEY_RIGHT 39 #constant KEY_D 68 #constant KEY_UP 38 #constant KEY_W 87 #constant KEY_DOWN 40 #constant KEY_S 83 #constant KEY_T 84 #constant KEY_E 69 #constant KEY_SPACE 32 #constant KEY_N 78 #constant KEY_ESC 27 #constant KEY_Z 90 #constant KEY_X 88 #constant KEY_C 67 #constant KEY_SHIFT 16 #constant KEY_ENTER 13 #constant KEY_1 49 #constant KEY_2 50 #constant KEY_3 51 #constant KEY_4 52 #constant KEY_5 53 #constant KEY_6 54 #constant KEY_F1 112 #constant KEY_F2 113 #constant KEY_F3 114 #constant KEY_F4 115 // *********************************************************************** // TYPES // *********************************************************************** type TVector2D x as float y as float endtype // *********************************************************************** // GENERAL FUNCTIONS // *********************************************************************** function InitDisplay(title as string, width as integer, height as integer, maxFrameRate as float, allowResize as integer, fullscreen as integer) SetWindowTitle(title) SetWindowSize(width, height, fullscreen) SetWindowAllowResize(allowResize) SetVirtualResolution(width, height) SetOrientationAllowed(1, 1, 1, 1) SetScissor(0,0,0,0) UseNewDefaultFonts(1) SetVSync(1) if maxFrameRate > 0 then SetSyncRate(maxFrameRate, 0) sync() sync() sleep(500) endfunction function MinF(value1 as float, value2 as float) result as float if value1 < value2 result = value1 else result = value2 endif endfunction result function Min(value1 as integer, value2 as integer) result as integer if value1 < value2 result = value1 else result = value2 endif endfunction result function MaxF(value1 as float, value2 as float) result as float if value1 > value2 result = value1 else result = value2 endif endfunction result function Max(value1 as integer, value2 as integer) result as integer if value1 > value2 result = value1 else result = value2 endif endfunction result function SgnF(value as float) result as float if value < 0 result = -1 elseif value > 0 result = 1 endif endfunction result function Sgn(value as integer) result as integer if value < 0 result = -1 elseif value > 0 result = 1 endif endfunction result function GetFormatedInteger(value as integer, totalLength as integer) formatted as String formatted = right("0000000000" + str(value), totalLength) endfunction formatted // *********************************************************************** // 2D VECTOR FUNCTIONS // *********************************************************************** function Vector2DGetRatios(v2d ref as TVector2D) sgnX as integer sgnY as integer if v2d.x < 0 sgnX = -1 elseif v2d.x > 1 sgnX = 1 endif if v2d.y < 0 sgnY = -1 elseif v2d.y > 1 sgnY = 1 endif if v2d.x = 0 v2d.y = sgnY exitfunction endif if v2d.y = 0 v2d.x = sgnX exitfunction endif if abs(v2d.x) > abs(v2d.y) v2d.y = v2d.y / abs(v2d.x) v2d.x = sgnX v2d.x = v2d.x v2d.y = v2d.y elseif abs(v2d.x) < abs(v2d.y) v2d.x = v2d.x / abs(v2d.y) v2d.y = sgnY v2d.x = v2d.x v2d.y = v2d.y else v2d.x = sgnX v2d.y = sgnY v2d.x = v2d.x v2d.y = v2d.y endif endfunction function Vector2DNormalize(v2d ref as TVector2D) length as float length = sqrt((v2d.x * v2d.x) + (v2d.y * v2d.y)) v2d.x = v2d.x / length v2d.y = v2d.y / length endfunction // *********************************************************************** // ANGLE FUNCTIONS // *********************************************************************** function AngleGetDistanceToAngle(fromAngle as float, toAngle as float) distance as float if fromAngle < 0 then inc fromAngle, 360 if toAngle < 0 then inc toAngle, 360 distance = toAngle - fromAngle endfunction distance function AngleGetShortestDistanceToAngle(fromAngle as float, toAngle as float) distance as float reverseDistance as float shortest as float distance = AngleGetDistanceToAngle(fromAngle, toAngle) if distance < 0 reverseDistance = distance + 360 else reverseDistance = distance - 360 endif if abs(distance) <= abs(reverseDistance) shortest = distance else shortest = reverseDistance endif endfunction shortest function AngleIsWithin(testAngle as float, AngleToCompareTo as float, degrees as float) result as integer if abs(AngleGetShortestDistanceToAngle(testAngle, AngleToCompareTo)) <= degrees then result = 1 endfunction result function AngleIsBetween(testAngle as float, Angle1 as float, Angle2 as float) result as integer if testAngle < 0 then inc testAngle, 360 testAngle = mod(testAngle, 360) if Angle1 < 0 then inc Angle1, 360 Angle1 = mod(Angle1, 360) if Angle2 < 0 then inc Angle2, 360 Angle2 = mod(Angle2, 360) if Angle1 < Angle2 result = (Angle1 <= testAngle and testAngle <= Angle2) else result = (Angle1 <= testAngle or testAngle <= Angle2) endif endfunction result function AngleAddWithLimits(angle as float, valueToAdd as float, angleMin as float, angleMax as float) result as integer newa as float a1 as float a2 as float newa = angle a1 = angleMin a2 = angleMax if newa < 0 then inc newa, 360 if a1 < 0 inc a1, 360 inc a2, 360 elseif a2 < 0 inc a1, 360 inc a2, 360 endif inc newa, valueToAdd if newa < a1 newa = angleMin elseif newa > a2 newa = angleMax endif if newa >= 360 dec newa, 360 elseif newa < 0 inc newa, 360 endif endfunction newa // *********************************************************************** // SPRITE FUNCTIONS // *********************************************************************** function SetSpriteFaceSprite(sprite as integer, SpriteToFace as integer) SetSpriteAngle(sprite, ATanFull(GetSpriteXByOffset(SpriteToFace)-GetSpriteXByOffset(sprite), GetSpriteYByOffset(SpriteToFace)-GetSpriteYByOffset(sprite))) endfunction function SetSpriteFacePosition(sprite as integer, targetX as float, targetY as float) SetSpriteAngle(sprite, ATanFull(targetX-GetSpriteXByOffset(sprite), targetY-GetSpriteYByOffset(sprite))) endfunction function SetSpriteFaceMouse(sprite as integer) SetSpriteAngle(sprite, ATanFull(GetRawMouseX()-GetSpriteXByOffset(sprite), GetRawMouseY()-GetSpriteYByOffset(sprite))) endfunction |