254 lines
7.6 KiB
Haxe
254 lines
7.6 KiB
Haxe
package helper
|
|
{
|
|
import com.amanitadesign.steam.FRESteamWorks;
|
|
import com.amanitadesign.steam.SteamConstants;
|
|
import com.amanitadesign.steam.SteamEvent;
|
|
import flash.desktop.NativeApplication;
|
|
import flash.utils.ByteArray<Dynamic>;
|
|
import global.Registry;
|
|
import org.flixel.FlxG;
|
|
import org.flixel.FlxGame;
|
|
class Achievements
|
|
{
|
|
|
|
private static var IS_NEWGROUNDS:Bool=false;
|
|
public static var IS_KONG:Bool=false;
|
|
public static var KONG_LOADED:Bool=false;
|
|
public static var IS_STEAM:Bool=true;
|
|
|
|
public static inline var Card_1:Int=0;
|
|
public static inline var Card_7:Int=1;
|
|
public static inline var Extra_health_1:Int=2;
|
|
public static inline var Fast_fields:Int=3;
|
|
public static inline var No_damage_sunguy:Int=4;
|
|
public static inline var Trophy_1:Int=5;
|
|
public static inline var Greenlit:Int=6;
|
|
public static inline var Website:Int=7;
|
|
|
|
public static inline var A_GET_BROOM:Int=8;
|
|
public static inline var A_GET_WINDMILL_CARD:Int=9;
|
|
public static inline var A_DEFEAT_BRIAR:Int=10;
|
|
|
|
public static inline var A_100_PERCENT_ANY_TIME:Int=11;
|
|
public static inline var A_200_PERCENT:Int=12;
|
|
public static inline var A_GET_RED_CUBE:Int=13;
|
|
public static inline var A_GET_GREEN_CUBE:Int=14;
|
|
public static inline var A_GET_BLUE_CUBE:Int=15;
|
|
public static inline var A_GET_BW_CUBES:Int=16;
|
|
public static inline var A_CONSOLE:Int=17;
|
|
public static inline var A_GET_GOLDEN_POO:Int=18;
|
|
public static inline var A_GET_48_CARDS:Int=19;
|
|
public static inline var A_GET_49TH_CARD:Int=20;
|
|
|
|
public static inline var A_ENDING_SUB_15_M:Int=21;
|
|
public static inline var A_100_PERCENT_SUB_3_HR:Int=22;
|
|
|
|
public static inline var achvname:Dynamic={ 8:"broom", 9:"windmill", 10:"briar",
|
|
11:"100" , 12:"200" , 13:"red", 14:"green", 15:"blue", 16:"bw",
|
|
17:"console", 18:"poo", 19:"48", 20:"49", 21:"fast", 22:"100fast"};
|
|
|
|
public static var Steamworks:FRESteamWorks;
|
|
|
|
private static var did_init:Bool=false;
|
|
public static var DEBUG_TEXT:String="";
|
|
|
|
public static function init(root:Dynamic):Void {
|
|
if(did_init)return;
|
|
did_init=true;
|
|
|
|
}
|
|
|
|
public static function kong_loaded():Void {
|
|
KONG_LOADED=true;
|
|
}
|
|
|
|
public static function init_steam():Void {
|
|
DEBUG_TEXT +="In Init Steam\n";
|
|
if(IS_STEAM && Steamworks==null){
|
|
if(Intra.IS_LINUX){
|
|
//return;
|
|
}
|
|
DEBUG_TEXT +="LOADING STEAM\n";
|
|
Steamworks=new FRESteamWorks();
|
|
Steamworks.addEventListener(SteamEvent.STEAM_RESPONSE, onSteamResponse);
|
|
if(Steamworks.init()){
|
|
if(Steamworks.isReady){
|
|
if(false==Intra.IS_LINUX){
|
|
Steamworks.setCloudEnabledForApp(true);
|
|
}
|
|
DEBUG_TEXT +="STEAM LOADED\n";
|
|
}
|
|
//DEBUG_TEXT=DEBUG_TEXT + "atest:" + Steamworks.setAchievement("ACH_WIN_ONE_GAME").toString()+ "\n";
|
|
//Steamworks.clearAchievement("ACH_WIN_ONE_GAME");
|
|
//Steamworks.setStatFloat('FeetTraveled', 42.42);
|
|
//Steamworks.storeStats();
|
|
//DEBUG_TEXT=DEBUG_TEXT + Steamworks.getStatFloat('FeetTraveled').toString()+ "\n";
|
|
//
|
|
|
|
} else {
|
|
DEBUG_TEXT +="FAILED\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function get_completion_rate():Int {
|
|
|
|
// 36 Cards(+2)=72
|
|
// 10 health ups(+1)=10
|
|
// 4 broom upgrades(+4)=16
|
|
// Jump shoes(+2)=2
|
|
|
|
// 12 Cards
|
|
// 13 weird items - all + 5
|
|
|
|
var rate:Int=0;
|
|
|
|
for(i in 0...48){
|
|
if(Registry.card_states[i]==1){
|
|
if(i<36){
|
|
rate +=2;
|
|
} else {
|
|
rate +=4;
|
|
}
|
|
}
|
|
}
|
|
|
|
rate +=(Registry.MAX_HEALTH - 6);
|
|
|
|
if(Registry.inventory[Registry.IDX_BROOM])rate +=4;
|
|
if(Registry.inventory[Registry.IDX_WIDEN])rate +=4;
|
|
if(Registry.inventory[Registry.IDX_LENGTHEN])rate +=4;
|
|
if(Registry.inventory[Registry.IDX_TRANSFORMER])rate +=4;
|
|
|
|
if(Registry.inventory[Registry.IDX_JUMP])rate +=2;
|
|
|
|
for(i in 11...Registry.IDX_WHITE+1){
|
|
if(Registry.inventory[i]){
|
|
rate +=4;
|
|
}
|
|
}
|
|
|
|
Achievements.DEBUG_TEXT +=rate.toString()+ "\n";
|
|
return rate;
|
|
}
|
|
|
|
public static function set_steam_achievements():Void {
|
|
if(IS_STEAM && Steamworks !=null && Steamworks.isReady){
|
|
trace("Steam achievement state:", Registry.achivement_state);
|
|
for(i in 8...23){
|
|
if(Registry.achivement_state[i]){
|
|
Steamworks.setAchievement(achvname[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function writeFileToCloud(fileName:String, data:Dynamic):Bool {
|
|
var dataOut:ByteArray<Dynamic>=new ByteArray();
|
|
dataOut.writeObject(data);
|
|
return Steamworks.fileWrite(fileName, dataOut);
|
|
}
|
|
|
|
public static function readFileFromCloud(fileName:String):Dynamic {
|
|
var dataIn:ByteArray<Dynamic>=new ByteArray();
|
|
var dataOut:Dynamic=new Dynamic();
|
|
dataIn.position=0;
|
|
dataIn.length=Steamworks.getFileSize(fileName);
|
|
DEBUG_TEXT +=dataIn.length.toString();
|
|
|
|
if(dataIn.length>0 && Steamworks.fileRead(fileName,dataIn)){
|
|
return dataIn.readObject();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
public static function is_100_percent():Bool {
|
|
if(Registry.MAX_HEALTH>=16 && Registry.inventory[Registry.IDX_TRANSFORMER] && Registry.inventory[Registry.IDX_WIDEN] && Registry.inventory[Registry.IDX_LENGTHEN] && Registry.nr_growths>=37){
|
|
Achievements.unlock(Achievements.A_100_PERCENT_ANY_TIME);
|
|
if(Registry.playtime<3 * 60 * 60){
|
|
Achievements.unlock(Achievements.A_100_PERCENT_SUB_3_HR);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function is_200_percent():Bool {
|
|
var a:Array<Dynamic>=Registry.inventory;
|
|
if(is_100_percent()&& Registry.nr_growths>=49 && a[Registry.IDX_BLUE] && a[Registry.IDX_GREEN] && a[Registry.IDX_RED] && a[Registry.IDX_BLACK] && a[Registry.IDX_WHITE] && a[Registry.IDX_KITTY] && a[Registry.IDX_POO] && a[Registry.IDX_AUS_HEART] && a[Registry.IDX_ELECTRIC] && a[Registry.IDX_MARINA] && a[Registry.IDX_MELOS] && a[Registry.IDX_MISSINGNO] && a[Registry.IDX_SPAM]){
|
|
Achievements.unlock(Achievements.A_200_PERCENT);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function onSteamResponse(e:SteamEvent):Void {
|
|
//Achievements.DEBUG_TEXT=DEBUG_TEXT + "STEAMresponse type:" + e.req_type + " response:" + e.response + "\n";
|
|
switch(e.req_type){
|
|
case SteamConstants.RESPONSE_OnUserStatsStored:
|
|
//DEBUG_TEXT=DEBUG_TEXT + "RESPONSE_OnUserStatsStored:" + e.response + "\n";
|
|
break;
|
|
case SteamConstants.RESPONSE_OnUserStatsReceived:
|
|
//DEBUG_TEXT=DEBUG_TEXT + "RESPONSE_OnUserStatsReceived:" + e.response + "\n";
|
|
break;
|
|
case SteamConstants.RESPONSE_OnAchievementStored:
|
|
//DEBUG_TEXT=DEBUG_TEXT + "RESPONSE_OnAchievementStored:" + e.response + "\n";
|
|
break;
|
|
case 3:
|
|
//case SteamConstants.RESPONSE_OnGameOverlayActivated:
|
|
//FlxGame.HARD_PAUSED=!FlxGame.HARD_PAUSED;// This is probably not the right hting to do.
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public static function unlock_all():Void {
|
|
for(i in 8...23){
|
|
unlock(i);
|
|
}
|
|
}
|
|
public static function unlock(id:Int):Void {
|
|
if(!IS_STEAM && false==Intra.is_web)return;
|
|
|
|
if(IS_STEAM){
|
|
trace("Achievement:", id, achvname[id]);
|
|
|
|
|
|
if(Steamworks !=null && Steamworks.isReady){
|
|
switch(id){
|
|
case A_GET_BROOM://**
|
|
Registry.achivement_state[id]=true;
|
|
Steamworks.setAchievement(achvname[id]);
|
|
break;
|
|
case A_GET_WINDMILL_CARD://**
|
|
Registry.achivement_state[id]=true;
|
|
Steamworks.setAchievement(achvname[id]);
|
|
break;
|
|
Registry.achivement_state[id]=true;
|
|
Steamworks.setAchievement(achvname[id]);
|
|
break;
|
|
case A_100_PERCENT_ANY_TIME:// **
|
|
Registry.achivement_state[id]=true;
|
|
Steamworks.setAchievement(achvname[id]);
|
|
break;
|
|
case A_100_PERCENT_SUB_3_HR:// **
|
|
Registry.achivement_state[id]=true;
|
|
Steamworks.setAchievement(achvname[id]);
|
|
break;
|
|
case A_GET_48_CARDS://
|
|
Registry.achivement_state[id]=true;
|
|
Steamworks.setAchievement(achvname[id]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|