Beispiel #1
0
        public void Disconnect()
        {
            try
            {
                SAMLog.Debug($"AndroidBilling.Disconnect");

                if (IsConnected)
                {
                    _serviceConnection.Disconnect();
                }
            }
            catch (Exception e)
            {
                SAMLog.Error("IAB::Disconnect", e);
            }
        }
Beispiel #2
0
        public void Cancel()
        {
            if (_stopped)
            {
                return;
            }

            try
            {
                mmServerSocket.Close();
            }
            catch (Java.IO.IOException e)
            {
                SAMLog.Error("ABTA::Thread3_Cancel", e);
            }
        }
        private bool ProcessForwardLaserCannons(ref int p, byte[] d, long bseq, float sendertime)
        {
            int count = d[p];

            p++;

            for (int i = 0; i < count; i++)
            {
                var id     = NetworkDataTools.GetByte(d[p + 0]);
                var ifrac  = NetworkDataTools.GetHighBits(d[p + 1], 3);
                var boost  = NetworkDataTools.GetLowBits(d[p + 1], 5);
                var rotA   = NetworkDataTools.GetSingle(d[p + 2], d[p + 3], d[p + 4], d[p + 5]);
                var rotT   = NetworkDataTools.GetSingle(d[p + 6], d[p + 7], d[p + 8], d[p + 9]);
                var hp     = NetworkDataTools.GetByte(d[p + 10]) / 255f;
                var ct     = NetworkDataTools.GetByteFloorRange(d[p + 11], 0, Cannon.LASER_CHARGE_COOLDOWN_MAX);
                var shield = NetworkDataTools.GetByteFloorRange(d[p + 12], 0, Cannon.MAX_SHIELD_TIME);

                var frac = Screen.GetFractionByID(ifrac, out bool gfbiError);
                if (gfbiError)
                {
                    SAMLog.Error("SNS-COMMON::PFLC_GFBI", "GetFractionByID returned error: Unknown Fraction " + ifrac + "\nData:\n" + ByteUtils.CompressBytesForStorage(d));
                    return(false);
                }

                Cannon c;
                if (Screen.CannonMap.TryGetValue(id, out c))
                {
                    LaserCannon bc = c as LaserCannon;
                    if (bc != null && ShouldRecieveData(frac, bc))
                    {
                        if (ShouldRecieveRotationData(frac, bc))
                        {
                            bc.RemoteRotationUpdate(rotA, rotT, sendertime);
                        }

                        if (ShouldRecieveStateData(frac, bc))
                        {
                            bc.RemoteUpdate(frac, hp, boost, ct, shield, sendertime);
                        }
                    }
                }

                p += PLEN_LASERCANNON;
            }

            return(true);
        }
Beispiel #4
0
        private async Task CreateNewUserLevelInternal(HUDElement spinner)
        {
            try
            {
                var r = await MainGame.Inst.Backend.GetNewCustomLevelID(MainGame.Inst.Profile);

                if (!r.Item1)
                {
                    MonoSAMGame.CurrentInst.DispatchBeginInvoke(() =>
                    {
                        spinner.Remove();
                        HUD.AddModal(new HUDFadeOutInfoBox(5, 2, 0.3f)
                        {
                            L10NText   = L10NImpl.STR_CPP_COMERR,
                            TextColor  = FlatColors.Clouds,
                            Background = HUDBackgroundDefinition.CreateRounded(FlatColors.Alizarin, 16),

                            CloseOnClick = true,
                        }, true);
                    });
                    return;
                }

                MonoSAMGame.CurrentInst.DispatchBeginInvoke(() =>
                {
                    spinner.Remove();
                    MainGame.Inst.SetLevelEditorScreen(new SCCMLevelData(r.Item2, MainGame.Inst.Profile.OnlineUserID));
                });
            }
            catch (Exception e)
            {
                SAMLog.Error("SCCMLENUL::DL", e);

                MonoSAMGame.CurrentInst.DispatchBeginInvoke(() =>
                {
                    spinner.Remove();
                    HUD.AddModal(new HUDFadeOutInfoBox(5, 2, 0.3f)
                    {
                        L10NText   = L10NImpl.STR_CPP_COMERR,
                        TextColor  = FlatColors.Clouds,
                        Background = HUDBackgroundDefinition.CreateRounded(FlatColors.Alizarin, 16),

                        CloseOnClick = true,
                    }, true);
                });
            }
        }
        private bool ProcessForwardMiniguns(ref int p, byte[] d, long bseq, float sendertime)
        {
            int count = d[p];

            p++;

            for (int i = 0; i < count; i++)
            {
                var id     = NetworkDataTools.GetByte(d[p + 0]);
                var ifrac  = NetworkDataTools.GetHighBits(d[p + 1], 3);
                var boost  = NetworkDataTools.GetLowBits(d[p + 1], 5);
                var rotA   = NetworkDataTools.ConvertToRadians(NetworkDataTools.GetByte(d[p + 2]), 8);
                var rotT   = NetworkDataTools.ConvertToRadians(NetworkDataTools.GetByte(d[p + 3]), 8);
                var hp     = NetworkDataTools.GetByte(d[p + 4]) / 255f;
                var chrg   = NetworkDataTools.GetByte(d[p + 5]) / 255f;
                var shield = NetworkDataTools.GetByteFloorRange(d[p + 6], 0, Cannon.MAX_SHIELD_TIME);

                var frac = Screen.GetFractionByID(ifrac, out bool gfbiError);
                if (gfbiError)
                {
                    SAMLog.Error("SNS-COMMON::PFMG_GFBI", "GetFractionByID returned error: Unknown Fraction " + ifrac + "\nData:\n" + ByteUtils.CompressBytesForStorage(d));
                    return(false);
                }

                Cannon c;
                if (Screen.CannonMap.TryGetValue(id, out c))
                {
                    MinigunCannon bc = c as MinigunCannon;
                    if (bc != null && ShouldRecieveData(frac, bc))
                    {
                        if (ShouldRecieveRotationData(frac, bc))
                        {
                            bc.RemoteRotationUpdate(rotA, rotT, sendertime);
                        }

                        if (ShouldRecieveStateData(frac, bc))
                        {
                            bc.RemoteUpdate(frac, hp, boost, chrg, shield, sendertime);
                        }
                    }
                }

                p += PLEN_MINIGUN;
            }

            return(true);
        }
Beispiel #6
0
        private bool SaveToDisk()
        {
            var sdata = SerializeToString();

            try
            {
                FileHelper.Inst.WriteData(Filename, sdata);
            }
            catch (IOException e)
            {
                if (e.Message.Contains("Disk full"))
                {
                    MainGame.Inst.DispatchBeginInvoke(() =>
                    {
                        MainGame.Inst.ShowToast("SCCMLD::OOM", L10N.T(L10NImpl.STR_ERR_OUTOFMEMORY), 32, FlatColors.Flamingo, FlatColors.Foreground, 3f);
                    });
                    return(false);
                }
                else
                {
                    SAMLog.Error("SCCMLD::WRITE", e);
                    return(false);
                }
            }

#if DEBUG
            SAMLog.Debug($"SCCM saved ({sdata.Length})");

            try
            {
                var p = new SCCMLevelData();
                p.DeserializeFromString(sdata);
                var sdata2 = p.SerializeToString();

                if (sdata2 != sdata)
                {
                    SAMLog.Error("SCCMLD:Serialization_mismatch", "Serialization test mismatch", $"Data_1:\n{sdata}\n\n----------------\n\nData_2:\n{sdata2}");
                }
            }
            catch (Exception e)
            {
                SAMLog.Error("SCCMLD:Serialization-Ex", "Serialization test mismatch", e.ToString());
            }
#endif

            return(true);
        }
Beispiel #7
0
        protected override void Initialize()
        {
            try
            {
                base.Initialize();

                OnInitialize();

                screens = new ScreenManager(this);

                OnAfterInitialize();
            }
            catch (Exception e)
            {
                SAMLog.FatalError("Game::Initialize", e);
            }
        }
Beispiel #8
0
        public ushort AssignBulletID(Bullet bullet)
        {
            lastBulletID = (ushort)((lastBulletID + 1) % MAX_BULLET_ID);

            if (!IsNetwork)
            {
                return(lastBulletID);
            }

            for (ushort i = 0; i < MAX_BULLET_ID; i++)
            {
                var ti = (ushort)((lastBulletID + i) % MAX_BULLET_ID);
                if (BulletMapping[ti].Bullet == null || (BulletMapping[ti].State != RemoteBullet.RemoteBulletState.Normal && BulletMapping[ti].RemainingPostDeathTransmitions <= 0))
                {
                    BulletMapping[ti].Bullet = bullet;
                    BulletMapping[ti].State  = RemoteBullet.RemoteBulletState.Normal;
                    BulletMapping[ti].RemainingPostDeathTransmitions = RemoteBullet.POST_DEATH_TRANSMITIONCOUNT;

                    lastBulletID = ti;
                    return(ti);
                }
            }

            SAMLog.Info("GDGS::TMB1", "Too many bullets+artifacts, no free fully-dead BulletID");

            for (ushort i = 0; i < MAX_BULLET_ID; i++)
            {
                var ti = (ushort)((lastBulletID + i) % MAX_BULLET_ID);
                if (BulletMapping[ti].Bullet == null || BulletMapping[ti].State != RemoteBullet.RemoteBulletState.Normal)
                {
                    BulletMapping[ti].Bullet = bullet;
                    BulletMapping[ti].State  = RemoteBullet.RemoteBulletState.Normal;
                    BulletMapping[ti].RemainingPostDeathTransmitions = RemoteBullet.POST_DEATH_TRANSMITIONCOUNT;

                    lastBulletID = ti;
                    return(ti);
                }
            }

            SAMLog.Error("GDGS::TMB2", "Too many bullets, no free BulletID");
            BulletMapping[lastBulletID].Bullet = bullet;
            BulletMapping[lastBulletID].State  = RemoteBullet.RemoteBulletState.Normal;
            BulletMapping[lastBulletID].RemainingPostDeathTransmitions = RemoteBullet.POST_DEATH_TRANSMITIONCOUNT;

            return(lastBulletID);
        }
        public GDGameScreen_MPClient(MainGame game, GraphicsDeviceManager gdm, LevelBlueprint bp, GameSpeedModes speed, int music, GDMultiplayerClient server)
            : base(game, gdm, bp, FractionDifficulty.DIFF_3, false, true, false)
        {
            musicIdx      = music;
            GameSpeedMode = speed;
            _server       = server;
            CanPause      = false;

            _server.Screen = this;

            if (server.SessionUserID == 1)
            {
                _localPlayerFraction = GetFractionByID(2);
            }
            else if (server.SessionUserID == 2)
            {
                _localPlayerFraction = GetFractionByID(3);
            }
            else if (server.SessionUserID == 3)
            {
                _localPlayerFraction = GetFractionByID(4);
            }
            else if (server.SessionUserID == 4)
            {
                _localPlayerFraction = GetFractionByID(5);
            }
            else if (server.SessionUserID == 5)
            {
                _localPlayerFraction = GetFractionByID(6);
            }
            else
            {
                SAMLog.Error("GDGSMPC", "Client with SSID: " + server.SessionUserID);
            }

            foreach (var c in GetEntities <Cannon>())
            {
                c.ForceUpdateController();
            }

            GameHUD = new GDMultiplayerGameHUD(this, server);

#if DEBUG
            _server.AddDebugLine(this);
#endif
        }
        public PurchaseQueryResult IsPurchased(string id)
        {
            if (!IsConnected)
            {
                return(PurchaseQueryResult.NotConnected);
            }

            id = PREFIX + id;

            lock (_purchases)
            {
                if (_purchases.TryGetValue(id.ToLower(), out var purchase))
                {
                    switch (purchase.State)
                    {
                    case PurchaseState.Purchased:
                    case PurchaseState.FreeTrial:
                    case PurchaseState.Restored:
                        return(PurchaseQueryResult.Purchased);

                    case PurchaseState.Canceled:
                        return(PurchaseQueryResult.Cancelled);

                    case PurchaseState.Refunded:
                        return(PurchaseQueryResult.Refunded);

                    case PurchaseState.PaymentPending:
                    case PurchaseState.Purchasing:
                    case PurchaseState.Deferred:
                        return(PurchaseQueryResult.Pending);

                    case PurchaseState.Failed:
                    case PurchaseState.Unknown:
                        return(PurchaseQueryResult.Error);

                    default:
                        SAMLog.Error("IAB_IOS::IP_EnumSwitch", "purchase.State := " + purchase.State);
                        return(PurchaseQueryResult.Error);
                    }
                }
                else
                {
                    return(PurchaseQueryResult.NotPurchased);
                }
            }
        }
        public void HandleActivityResult(int requestCode, Result resultCode, Intent data)
        {
            if (requestCode == REQUEST_ENABLE_BT)
            {
                if (resultCode == Result.Ok)
                {
                    SAMLog.Debug("Bluetooth enabled");

                    State = BluetoothAdapterState.Active;
                }
                else
                {
                    SAMLog.Warning("ABTA::BNE", "Bluetooth [[not]] enabled");
                    State = BluetoothAdapterState.NotEnabledByUser;
                }
            }
        }
Beispiel #12
0
        public PurchaseQueryResult IsPurchased(string id)
        {
            try
            {
                if (_isInitializing)
                {
                    return(PurchaseQueryResult.CurrentlyInitializing);
                }

                if (!IsConnected || _purchases == null)
                {
                    return(PurchaseQueryResult.NotConnected);
                }

                int result = -1;
                foreach (var purch in _purchases.Where(p => p.ProductId == id).OrderBy(p => p.PurchaseTime))
                {
                    result = purch.PurchaseState;
                    if (purch.PurchaseState == AndroidBillingHelper.STATE_PURCHASED)
                    {
                        return(PurchaseQueryResult.Purchased);
                    }
                }

                if (result == -1)
                {
                    return(PurchaseQueryResult.NotPurchased);
                }
                if (result == AndroidBillingHelper.STATE_CANCELLED)
                {
                    return(PurchaseQueryResult.Cancelled);
                }
                if (result == AndroidBillingHelper.STATE_REFUNDED)
                {
                    return(PurchaseQueryResult.Refunded);
                }

                SAMLog.Error("IAB::IsPurchased-Inv", "result has invalid value: " + result);
                return(PurchaseQueryResult.Error);
            }
            catch (Exception e)
            {
                SAMLog.Error("IAB::IsPurchased-Ex", e);
                return(PurchaseQueryResult.Error);
            }
        }
Beispiel #13
0
 public static string MakeTextSafeWithWarn(SpriteFont font, string s, char c)
 {
     char[] cc = new char[s.Length];
     for (int i = 0; i < s.Length; i++)
     {
         if (!font.Characters.Contains(s[i]) && s[i] != 0x0A && s[i] != 0x0D)
         {
             SAMLog.Warning("FRH::MC", $"Cant render char with font: 0x{((int)s[i]):X2}");
             cc[i] = c;
         }
         else
         {
             cc[i] = s[i];
         }
     }
     return(new string(cc));
 }
Beispiel #14
0
        protected override void OnDraw(IBatchRenderer sbatch)
        {
            if (GDOwner.Selection == this)
            {
                if (ObstacleType == ObstacleStubType.MirrorBlock || ObstacleType == ObstacleStubType.GlassBlock)
                {
                    var a = FRotatedRectangle.CreateByCenter(Position, Width, Height, Rotation).GetBoundingRectangle();
                    sbatch.DrawCentered(Textures.TexPixel, Position, a.Width + GDConstants.TILE_WIDTH, a.Height + GDConstants.TILE_WIDTH, Color.Black * 0.333f);
                }
                else
                {
                    sbatch.DrawCentered(Textures.TexPixel, Position, Width + GDConstants.TILE_WIDTH, Height + GDConstants.TILE_WIDTH, Color.Black * 0.333f);
                }
            }

            switch (ObstacleType)
            {
            case ObstacleStubType.BlackHole:
                CommonObstacleRenderer.DrawBlackHole(sbatch, Position, Lifetime, Width, -Power);
                break;

            case ObstacleStubType.WhiteHole:
                CommonObstacleRenderer.DrawBlackHole(sbatch, Position, Lifetime, Width, Power);
                break;

            case ObstacleStubType.GlassBlock:
                CommonObstacleRenderer.DrawGlassBlock(sbatch, FRotatedRectangle.CreateByCenter(Position, Width, Height, Rotation));
                break;

            case ObstacleStubType.MirrorBlock:
                CommonObstacleRenderer.DrawMirrorBlock(sbatch, FRotatedRectangle.CreateByCenter(Position, Width, Height, Rotation));
                break;

            case ObstacleStubType.MirrorCircle:
                CommonObstacleRenderer.DrawMirrorCircle(sbatch, Position, Width);
                break;

            case ObstacleStubType.VoidVircle:
                CommonObstacleRenderer.DrawVoidCircle_BG(sbatch, Position, Width);
                break;

            default:
                SAMLog.Error("LEOS::EnumSwitch_CS_OD", "ObstacleType = " + ObstacleType);
                break;
            }
        }
Beispiel #15
0
        private async Task DoLoad(int page, int reqid, bool async)
        {
            _mode = PresenterMode.Loading;
            var r = await _loadFunc(this, page, reqid);

            void FinishAction()
            {
                if (IsCurrentRequest(reqid))
                {
                    switch (r)
                    {
                    case LoadFuncResult.Success:
                        _mode        = PresenterMode.Normal;
                        _currentPage = page;
                        break;

                    case LoadFuncResult.LastPage:
                        _mode        = PresenterMode.FullyLoaded;
                        _currentPage = page;
                        break;

                    case LoadFuncResult.Error:
                        _mode = PresenterMode.Normal;
                        break;

                    default:
                        SAMLog.Error("SCCMLP::EnumSwitch_DoLoad", "r = " + r);
                        break;
                    }

                    this.IsVisible        = true;
                    _scrollbar.IsVisible  = true;
                    _waitingCog.IsVisible = false;
                }
            }

            if (async)
            {
                MainGame.Inst.DispatchBeginInvoke(FinishAction);
            }
            else
            {
                FinishAction();
            }
        }
Beispiel #16
0
        private void SpawnOrb(LevelNode me, int cycle)
        {
            if (!NextLinkedNodes.Any())
            {
                return;
            }
            if (!MainGame.Inst.Profile.EffectsEnabled)
            {
                return;
            }

            FractionDifficulty d = FractionDifficulty.NEUTRAL;

            switch (cycle % 4)
            {
            case 0: d = FractionDifficulty.DIFF_0; break;

            case 1: d = FractionDifficulty.DIFF_1; break;

            case 2: d = FractionDifficulty.DIFF_2; break;

            case 3: d = FractionDifficulty.DIFF_3; break;

            default:
                SAMLog.Error("LN::EnumSwitch_SO", "value: " + (cycle % 4));
                break;
            }

            if (!LevelData.HasCompletedOrBetter(d))
            {
                d = FractionDifficulty.NEUTRAL;
            }

            foreach (var t in OutgoingPipes)
            {
                if (!((GameEntity)t.NodeSource).IsInViewport && !((GameEntity)t.NodeSink).IsInViewport)
                {
                    return;
                }

                var orb = new ConnectionOrb(Owner, t, d);

                Manager.AddEntity(orb);
            }
        }
Beispiel #17
0
        public FRotatedRectangle GetArea()
        {
            switch (WallType)
            {
            case WallStubType.Void:
                return(FRotatedRectangle.CreateByCenter(FPoint.MiddlePoint(Point1, Point2), (Point2 - Point1).Length(), VoidWallBlueprint.DEFAULT_WIDTH, (Point2 - Point1).ToAngle()));

            case WallStubType.Glass:
                return(FRotatedRectangle.CreateByCenter(FPoint.MiddlePoint(Point1, Point2), (Point2 - Point1).Length(), GlassBlockBlueprint.DEFAULT_WIDTH, (Point2 - Point1).ToAngle()));

            case WallStubType.Mirror:
                return(FRotatedRectangle.CreateByCenter(FPoint.MiddlePoint(Point1, Point2), (Point2 - Point1).Length(), MirrorBlockBlueprint.DEFAULT_WIDTH, (Point2 - Point1).ToAngle()));

            default:
                SAMLog.Error("LEWS::EnumSwitch_GA", "WallType = " + WallType);
                return(default(FRotatedRectangle));
            }
        }
Beispiel #18
0
        public void SetMode(LevelEditorMode m)
        {
            Mode = m;
            switch (m)
            {
            case LevelEditorMode.Mouse:        GDHUD.ModePanel.SetActiveButton(GDHUD.ModePanel.BtnMouse);    break;

            case LevelEditorMode.AddCannon:    GDHUD.ModePanel.SetActiveButton(GDHUD.ModePanel.BtnCannon);   break;

            case LevelEditorMode.AddWall:      GDHUD.ModePanel.SetActiveButton(GDHUD.ModePanel.BtnWall);     break;

            case LevelEditorMode.AddObstacle:  GDHUD.ModePanel.SetActiveButton(GDHUD.ModePanel.BtnObstacle); break;

            case LevelEditorMode.AddPortal:    GDHUD.ModePanel.SetActiveButton(GDHUD.ModePanel.BtnPortal);   break;

            default: SAMLog.Error("LES::EnumSwitch_TICS", "Mode = " + m); break;
            }
        }
Beispiel #19
0
        public void SaveProfile()
        {
            var sdata = Profile.SerializeToString();

            try
            {
                FileHelper.Inst.WriteData(GDConstants.PROFILE_FILENAME, sdata);
            }
            catch (IOException e)
            {
                if (e.Message.Contains("Disk full"))
                {
                    DispatchBeginInvoke(() =>
                    {
                        ShowToast("MG::OOM", L10N.T(L10NImpl.STR_ERR_OUTOFMEMORY), 32, FlatColors.Flamingo, FlatColors.Foreground, 3f);
                    });
                }
                else
                {
                    SAMLog.Error("MG::WRITE", e);
                }
            }

#if DEBUG
            SAMLog.Debug($"Profile saved ({sdata.Length})");

            try
            {
                var p = new PlayerProfile();
                p.NoAfterSerializeFixes = true;
                p.DeserializeFromString(sdata);
                var sdata2 = p.SerializeToString();

                if (sdata2 != sdata)
                {
                    SAMLog.Error("Serialization_mismatch", "Serialization test mismatch", $"Data_1:\n{sdata}\n\n----------------\n\nData_2:\n{sdata2}");
                }
            }
            catch (Exception e)
            {
                SAMLog.Error("Serialization-Ex", "Serialization test mismatch", e.ToString());
            }
#endif
        }
        public override void Update(SAMTime gameTime, InputState istate)
        {
            base.Update(gameTime, istate);

            if (Mode == ServerMode.CreatingNewGame)
            {
                Screen = null;
            }
            if (Mode == ServerMode.BeforeNewGame)
            {
                Screen = null;
            }

            if (ConnType == MultiplayerConnectionType.P2P)
            {
                var btm = (BluetoothNetworkMedium)_medium;

                if (btm.Events.Count > 0)
                {
                    var evt = btm.Events.Dequeue();

                    var param = FontRenderHelper.MakeTextSafe(Textures.HUDFontRegular, evt.Param, '?');

                    switch (evt.Type)
                    {
                    case BluetoothMediumEvent.BTEvent.TryConnection:
                        MainGame.Inst.ShowToast(null, L10N.TF(L10NImpl.STR_MP_TOAST_CONN_TRY, param), 40, FlatColors.Silver, FlatColors.Foreground, 2f);
                        break;

                    case BluetoothMediumEvent.BTEvent.ConnectionFailed:
                        MainGame.Inst.ShowToast(null, L10N.TF(L10NImpl.STR_MP_TOAST_CONN_FAIL, param), 40, FlatColors.Orange, FlatColors.Foreground, 2f);
                        break;

                    case BluetoothMediumEvent.BTEvent.ConnectionSucceeded:
                        MainGame.Inst.ShowToast(null, L10N.TF(L10NImpl.STR_MP_TOAST_CONN_SUCC, param), 40, FlatColors.Emerald, FlatColors.Foreground, 2f);
                        break;

                    default:
                        SAMLog.Error("GDMPC::Update_Evt", "type = " + evt.Type);
                        break;
                    }
                }
            }
        }
Beispiel #21
0
        public bool HasCompletedExact(FractionDifficulty d)
        {
            switch (d)
            {
            case FractionDifficulty.DIFF_0: return(Diff0_HasCompleted);

            case FractionDifficulty.DIFF_1: return(Diff1_HasCompleted);

            case FractionDifficulty.DIFF_2: return(Diff2_HasCompleted);

            case FractionDifficulty.DIFF_3: return(Diff3_HasCompleted);

            case FractionDifficulty.NEUTRAL:
            case FractionDifficulty.PLAYER:
            default:
                SAMLog.Error("CLD::HasCompletedExact", "Invalid value: " + d);
                return(false);
            }
        }
Beispiel #22
0
        public static string EnumToString(QueryUserLevelCategory c)
        {
            switch (c)
            {
            case QueryUserLevelCategory.AllLevelsOfUserid: return("@user");

            case QueryUserLevelCategory.TopLevelsAllTime:  return("@top");

            case QueryUserLevelCategory.HotLevels:         return("@hot");

            case QueryUserLevelCategory.NewLevels:         return("@new");

            case QueryUserLevelCategory.Search:            return("@search");

            default:
                SAMLog.Error("QULCH::EnumSwitch_ETS", "c = " + c);
                return("?");
            }
        }
Beispiel #23
0
        public IFShape GetArea()
        {
            switch (ObstacleType)
            {
            case ObstacleStubType.BlackHole:
            case ObstacleStubType.WhiteHole:
            case ObstacleStubType.MirrorCircle:
            case ObstacleStubType.VoidVircle:
                return(new FCircle(Position, Width / 2f));

            case ObstacleStubType.GlassBlock:
            case ObstacleStubType.MirrorBlock:
                return(new FRotatedRectangle(Position, Width, Height, Rotation));

            default:
                SAMLog.Error("LEOS::EnumSwitch_GA", "ObstacleType = " + ObstacleType);
                return(null);
            }
        }
Beispiel #24
0
        protected override void OnClick(GameEntityMouseArea area, SAMTime gameTime, InputState istate)
        {
            var ownr = ((GDOverworldScreen)Owner);

            if (ownr.IsTransitioning)
            {
                return;
            }

            if (MainGame.Inst.Profile.AccountType == AccountType.Local)
            {
                MainGame.Inst.ShowToast(null, L10N.T(L10NImpl.STR_MP_CONNECTING), 40, FlatColors.Emerald, FlatColors.Foreground, 2f);
                MainGame.Inst.Backend.CreateUser(MainGame.Inst.Profile).RunAsync();
                return;
            }

            //MainGame.Inst.GDBridge.IAB.SynchronizePurchases(GDConstants.IABList);

            var ustate = UnlockManager.IsUnlocked(Levels.WORLD_ID_ONLINE, true);

            switch (ustate)
            {
            case WorldUnlockState.OpenAndUnlocked:
                Owner.HUD.AddModal(new SCCMMainPanel(), true, 0.5f, 1f);
                break;

            case WorldUnlockState.ReachableButMustBePreviewed:
            case WorldUnlockState.UnreachableButCanBePreviewed:
                Owner.HUD.AddModal(new SCCMPreviewPanel(), true, 0.5f, 1f);
                break;

            case WorldUnlockState.UnreachableAndFullyLocked:
                Owner.HUD.ShowToast("ONSCCM::LOCKED(MULTI)", L10N.T(L10NImpl.STR_GLOB_WORLDLOCK), 40, FlatColors.Pomegranate, FlatColors.Foreground, 1.5f);
                MainGame.Inst.GDSound.PlayEffectError();

                AddOperation(new ShakeNodeOperation());
                break;

            default:
                SAMLog.Error("ONSCCM::EnumSwitch_OC", "ustate: " + ustate);
                throw new ArgumentOutOfRangeException();
            }
        }
        public void Connect(BluetoothDevice device)
        {
            CancelAllThreads();

            try
            {
                _connectThread = new BTConnectThread(device, this);
                _connectThread.Start();
            }
            catch (Exception e)
            {
                SAMLog.Error("ABTA::CantCreateConnectThread", e);
                State = BluetoothAdapterState.Error;
                CancelAllThreads();
                return;
            }

            State = BluetoothAdapterState.Connecting;
        }
        private async Task Resync(string[] productIDs)
        {
            if (LastConnectError != null)
            {
                SAMLog.Debug("TryConnect: [[LastConnectError]]: " + LastConnectError);
            }

            try
            {
                SAMLog.Debug("AppleIABVersionBilling.TryConnect");

                var sucess = await _iab.ConnectAsync();

                if (!sucess)
                {
                    LastConnectError = null; IsConnected = false; return;
                }

                await QueryStatesAsync(productIDs);

                LastConnectError = null;
                IsConnected      = true;
                IsSynchronized   = true;
                return;
            }
            catch (InAppBillingPurchaseException e)
            {
                SAMLog.Info("IAB_IOS::TryConnect_Start_1", e.PurchaseError.ToString(), e.ToString());

                LastConnectError = e.PurchaseError;
                IsConnected      = false;
                return;
            }
            catch (Exception e)
            {
                SAMLog.Info("IAB_IOS::TryConnect_Start_2", e);

                LastConnectError = null;
                IsConnected      = false;
                return;
            }
        }
        public void StartScan()
        {
            State = BluetoothAdapterState.Scanning;

            SAMLog.Debug($"StartDiscovery (1)");

            if (Adapter.IsDiscovering)
            {
                Adapter.CancelDiscovery();
            }
            bool s = Adapter.StartDiscovery();

            SAMLog.Debug($"StartDiscovery (2 => {s})");


            lock (_foundDevices)
            {
                _foundDevices.Clear();
            }
        }
        private async Task StartDownloadLevel()
        {
            try
            {
                var binary = await MainGame.Inst.Backend.DownloadUserLevel(MainGame.Inst.Profile, _meta.OnlineID);

                if (binary == null)
                {
                    MonoSAMGame.CurrentInst.DispatchBeginInvoke(() =>
                    {
                        HUD.ShowToast("SCCMLPD::DF(MULTI)", L10N.T(L10NImpl.STR_SCCM_DOWNLOADFAILED), 40, FlatColors.Flamingo, FlatColors.Foreground, 3f);
                        MonoSAMGame.CurrentInst.DispatchBeginInvoke(OnDownloadFailed);
                    });
                    return;
                }

                using (var ms = new MemoryStream(binary))
                {
                    using (var br = new BinaryReader(ms))
                    {
                        var bp = new LevelBlueprint();
                        bp.BinaryDeserialize(br);

                        _blueprint = bp;

                        MonoSAMGame.CurrentInst.DispatchBeginInvoke(OnDownloadSuccess);
                    }
                }
            }
            catch (Exception e)
            {
                MonoSAMGame.CurrentInst.DispatchBeginInvoke(() =>
                {
                    HUD.ShowToast("SCCMLPD::DF(MULTI)", L10N.T(L10NImpl.STR_SCCM_DOWNLOADFAILED), 40, FlatColors.Flamingo, FlatColors.Foreground, 3f);
                });

                MonoSAMGame.CurrentInst.DispatchBeginInvoke(OnDownloadFailed);

                SAMLog.Error("SCCMLPD:DownloadException", e);
            }
        }
Beispiel #29
0
        private void InitEntities(GraphBlueprint g)
        {
            foreach (var bpNode in g.LevelNodes)
            {
                LevelBlueprint f;
                if (Levels.LEVELS.TryGetValue(bpNode.LevelID, out f))
                {
                    var data = MainGame.Inst.Profile.GetLevelData(f.UniqueID);
                    var pos  = new FPoint(bpNode.X, bpNode.Y);

                    var node = new LevelNode(screen, pos, f, data);

                    screen.Entities.AddEntity(node);
                    Nodes.Add(node);
                }
                else
                {
                    SAMLog.Error("LevelGraph::IE", $"Cannot find id {bpNode.LevelID:B} for graph");
                }
            }

            foreach (var bpNode in g.WarpNodes)
            {
                if (bpNode.TargetWorld == Levels.WORLD_ID_GAMEEND)
                {
                    var node = new WarpGameEndNode(screen, bpNode);
                    screen.Entities.AddEntity(node);
                    Nodes.Add(node);
                }
                else
                {
                    var node = new WarpNode(screen, bpNode);
                    screen.Entities.AddEntity(node);
                    Nodes.Add(node);
                }
            }

            InitialNode = new RootNode(screen, g.RootNode);
            screen.Entities.AddEntity(InitialNode);
            Nodes.Add(InitialNode);
        }
        public void StartWaiting()
        {
            CancelAllThreads();

            EnsureDiscoverable(120);

            try
            {
                _acceptThread = new BTAcceptThread(this);
                _acceptThread.Start();
            }
            catch (Exception e)
            {
                SAMLog.Error("ABTA::CantCreateAcceptThread", e);
                State = BluetoothAdapterState.Error;
                CancelAllThreads();
                return;
            }

            State = BluetoothAdapterState.Listen;
        }