1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-18 10:38:31 +02:00
VVVVVV/mobile_version/src/starling/utils/SystemUtil.as
Terry Cavanagh 72d018ea04 Update mobile version to mobile v2.2.1
The android version just got a much needed update to fix some resolution issues on devices with cutouts.

It turns out the mobile source was actually pretty out of date, like 3 versions out of date! This commit brings it up to date.

All the changes have just been about keeping the game running on modern devices, though. The biggest change was adding the Starling library to the project, which made the game GPU powered and sped the whole thing up.
2022-12-02 18:19:58 +01:00

197 lines
7.8 KiB
ActionScript

// =================================================================================================
//
// Starling Framework
// Copyright Gamua GmbH. All Rights Reserved.
//
// This program is free software. You can redistribute and/or modify it
// in accordance with the terms of the accompanying license agreement.
//
// =================================================================================================
package starling.utils
{
import flash.display3D.Context3D;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.system.Capabilities;
import flash.text.Font;
import flash.text.FontStyle;
import flash.utils.getDefinitionByName;
import starling.errors.AbstractClassError;
/** A utility class with methods related to the current platform and runtime. */
public class SystemUtil
{
private static var sInitialized:Boolean = false;
private static var sApplicationActive:Boolean = true;
private static var sWaitingCalls:Array = [];
private static var sPlatform:String;
private static var sDesktop:Boolean;
private static var sVersion:String;
private static var sAIR:Boolean;
private static var sEmbeddedFonts:Array = null;
private static var sSupportsDepthAndStencil:Boolean = true;
/** @private */
public function SystemUtil() { throw new AbstractClassError(); }
/** Initializes the <code>ACTIVATE/DEACTIVATE</code> event handlers on the native
* application. This method is automatically called by the Starling constructor. */
public static function initialize():void
{
if (sInitialized) return;
sInitialized = true;
sPlatform = Capabilities.version.substr(0, 3);
sVersion = Capabilities.version.substr(4);
sDesktop = /(WIN|MAC|LNX)/.exec(sPlatform) != null;
try
{
var nativeAppClass:Object = getDefinitionByName("flash.desktop::NativeApplication");
var nativeApp:EventDispatcher = nativeAppClass["nativeApplication"] as EventDispatcher;
nativeApp.addEventListener(Event.ACTIVATE, onActivate, false, 0, true);
nativeApp.addEventListener(Event.DEACTIVATE, onDeactivate, false, 0, true);
var appDescriptor:XML = nativeApp["applicationDescriptor"];
var ns:Namespace = appDescriptor.namespace();
var ds:String = appDescriptor.ns::initialWindow.ns::depthAndStencil.toString().toLowerCase();
sSupportsDepthAndStencil = (ds == "true");
sAIR = true;
}
catch (e:Error)
{
sAIR = false;
}
}
private static function onActivate(event:Object):void
{
sApplicationActive = true;
for each (var call:Array in sWaitingCalls)
{
try { call[0].apply(null, call[1]); }
catch (e:Error)
{
trace("[Starling] Error in 'executeWhenApplicationIsActive' call:", e.message);
}
}
sWaitingCalls = [];
}
private static function onDeactivate(event:Object):void
{
sApplicationActive = false;
}
/** Executes the given function with its arguments the next time the application is active.
* (If it <em>is</em> active already, the call will be executed right away.) */
public static function executeWhenApplicationIsActive(call:Function, ...args):void
{
initialize();
if (sApplicationActive) call.apply(null, args);
else sWaitingCalls.push([call, args]);
}
/** Indicates if the application is currently active. On Desktop, this means that it has
* the focus; on mobile, that it is in the foreground. In the Flash Plugin, always
* returns true. */
public static function get isApplicationActive():Boolean
{
initialize();
return sApplicationActive;
}
/** Indicates if the code is executed in an Adobe AIR runtime (true)
* or Flash plugin/projector (false). */
public static function get isAIR():Boolean
{
initialize();
return sAIR;
}
/** Indicates if the code is executed on a Desktop computer with Windows, OS X or Linux
* operating system. If the method returns 'false', it's probably a mobile device
* or a Smart TV. */
public static function get isDesktop():Boolean
{
initialize();
return sDesktop;
}
/** Returns the three-letter platform string of the current system. These are
* the most common platforms: <code>WIN, MAC, LNX, IOS, AND, QNX</code>. Except for the
* last one, which indicates "Blackberry", all should be self-explanatory. */
public static function get platform():String
{
initialize();
return sPlatform;
}
/** Returns the Flash Player/AIR version string. The format of the version number is:
* <em>majorVersion,minorVersion,buildNumber,internalBuildNumber</em>. */
public static function get version():String
{
initialize();
return sVersion;
}
/** Returns the value of the 'initialWindow.depthAndStencil' node of the application
* descriptor, if this in an AIR app; otherwise always <code>true</code>. */
public static function get supportsDepthAndStencil():Boolean
{
return sSupportsDepthAndStencil;
}
/** Indicates if Context3D supports video textures. At the time of this writing,
* video textures are only supported on Windows, OS X and iOS, and only in AIR
* applications (not the Flash Player). */
public static function get supportsVideoTexture():Boolean
{
return Context3D["supportsVideoTexture"];
}
/** Updates the list of embedded fonts. To be called when a font is loaded at runtime. */
public static function updateEmbeddedFonts():void
{
sEmbeddedFonts = null; // will be updated in 'isEmbeddedFont()'
}
/** Figures out if an embedded font with the specified style is available.
* The fonts are enumerated only once; if you load a font at runtime, be sure to call
* 'updateEmbeddedFonts' before calling this method.
*
* @param fontName the name of the font
* @param bold indicates if the font has a bold style
* @param italic indicates if the font has an italic style
* @param fontType the type of the font (one of the constants defined in the FontType class)
*/
public static function isEmbeddedFont(fontName:String, bold:Boolean=false, italic:Boolean=false,
fontType:String="embedded"):Boolean
{
if (sEmbeddedFonts == null)
sEmbeddedFonts = Font.enumerateFonts(false);
for each (var font:Font in sEmbeddedFonts)
{
var style:String = font.fontStyle;
var isBold:Boolean = style == FontStyle.BOLD || style == FontStyle.BOLD_ITALIC;
var isItalic:Boolean = style == FontStyle.ITALIC || style == FontStyle.BOLD_ITALIC;
if (fontName == font.fontName && bold == isBold && italic == isItalic &&
fontType == font.fontType)
{
return true;
}
}
return false;
}
}
}