Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * KongregateFlashAPI.hx - A Haxe implementation of Kongregate's Client API.
- *
- * Copyright 2014 Joseph Cloutier
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- import flash.display.Loader;
- import flash.display.Stage;
- import flash.events.Event;
- import flash.events.EventDispatcher;
- import flash.events.IOErrorEvent;
- import flash.Lib;
- import flash.net.URLRequest;
- import flash.Vector;
- /**
- * @usage
- * var api:KongregateFlashAPI = new KongregateFlashAPI();
- * api.submit("myStatName", myStatValue);
- *
- * @usage
- * var api = new KongregateFlashAPI();
- * api.addEventListener(KongregateFlashAPI.EVENT_LOAD_COMPLETE, function(e) { api.showRegistrationBox(); } );
- * api.addEventListener(KongregateFlashAPI.EVENT_LOGIN, myLoginCallback);
- */
- class KongregateFlashAPI extends EventDispatcher {
- public static var EVENT_LOAD_COMPLETE:String = Event.COMPLETE;
- public static var EVENT_IO_ERROR:String = IOErrorEvent.IO_ERROR;
- public static inline var EVENT_LOGIN:String = "login";
- public var kongregate(default, null):Dynamic;
- private var loader:Loader;
- private var statsBacklog:Vector< {name:String, value:Int} >;
- public function new() {
- super();
- statsBacklog = new Vector< {name:String, value:Int} >();
- var stage:Stage = Lib.current.stage;
- var apiUrl:String = stage.loaderInfo.parameters.kongregate_api_path;
- //Note: the shadow API does work, but the folder containing your
- //.swf file has to be marked as a "Trusted location." For more
- //information, refer to this ridiculously long url:
- //http://help.adobe.com/en_US/FlashPlayer/LSM/WS6aa5ec234ff3f285139dc56112e3786b68c-7ff0.html
- //Also, rather than printing to the screen, it prints to Flash's
- //log file, which is documented here:
- //http://help.adobe.com/en_US/flex/using/WSda78ed3a750d6b8f-4867184d1239f9d0558-8000.html
- if(apiUrl == null) {
- apiUrl = "http://www.kongregate.com/flash/API_AS3_Local.swf";
- }
- var urlRequest:URLRequest = new URLRequest(apiUrl);
- loader = new Loader();
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
- loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
- loader.load(urlRequest);
- stage.addChild(loader);
- }
- private function onLoadError(e:IOErrorEvent):Void {
- Lib.current.stage.removeChild(loader);
- loader = null;
- dispatchEvent(e);
- }
- private function onLoadComplete(e:Event):Void {
- Lib.current.stage.removeChild(loader);
- loader = null;
- kongregate = e.target.content;
- kongregate.services.connect();
- kongregate.services.addEventListener(EVENT_LOGIN, onLogin);
- for(stat in statsBacklog) {
- kongregate.stats.submit(stat.name, stat.value);
- }
- dispatchEvent(e);
- }
- public function isReady():Bool {
- return kongregate != null;
- }
- public function submit(name:String, value:Int):Void {
- if(kongregate != null) {
- kongregate.stats.submit(name, value);
- } else if(statsBacklog != null) {
- statsBacklog.push( {name:name, value:value} );
- }
- }
- private function onLogin(e:Event):Void {
- dispatchEvent(e);
- }
- public function showRegistrationBox():Void {
- if(kongregate != null && isGuest()) {
- if(Reflect.hasField(kongregate.services, "showRegistrationBox")) {
- kongregate.services.showRegistrationBox();
- } else {
- //Just pretend that this exists in the shadow API, ok?
- Lib.trace("Kongregate API: IKongregateServices.showRegistrationBox()");
- }
- }
- }
- public function getUsername():String {
- if(kongregate != null) {
- return kongregate.services.getUsername();
- } else {
- return "Guest";
- }
- }
- public function isGuest():Bool {
- if(kongregate != null) {
- return kongregate.services.isGuest();
- }
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement