Untitled

 avatar
unknown
csharp
2 years ago
22 kB
2
Indexable
using _IECModules;
using System.Linq;
using UnityEngine;
using System;
using System.Collections.Generic;

namespace IEC
{
    public class ABTestController : _BaseBehaviour, IController, IEventListener, IEventAwake, IEventStart
    {
        #region COMMON
        public void LocateController()
        {
            Controllers.Add(this);
        }

        public bool IsActive()
        {
            return gameObject.activeSelf;
        }

        public void OnEventRaise(string gameEvent, EventParam param)
        {
            switch (gameEvent)
            {
                case EventList.NONE:
                    break;
            }
        }

        public void BehaviourAwake()
        {
        }

        public void BehaviourStart()
        {
            var serviceAbTest = Services.ABTest();
            var abTestConfigs = Services.config.abTestConfigs;
            var listAbTestConfig = Services.config.abTestConfigs.ToList();
            var abIndex = listAbTestConfig.FindLastIndex(x => serviceAbTest.HasValue(x.KeyName));

            var forceSetAb = "ForceSetAB";
            var forceSetAbName = Services.DataSecure().GetString(forceSetAb, "No Force Set");
            var forceSetAbIndex = listAbTestConfig.FindLastIndex(x => x.KeyName == forceSetAbName);
            abIndex = (forceSetAbIndex >= 0) ? forceSetAbIndex : abIndex;

            var abConfig = listAbTestConfig.ElementAtOrDefault(abIndex);

            if (abConfig == null)
            {
                Debug.LogError("No AB Test");
                ResultAllAbTest();
                EventController.RaiseEvent(EventList.GamePlay.APPLY_AB_TEST);
                return;
            }

            ModuleController.cheatCode.AddCheatCodeButtonWithDropdown("AB Test Config",
                cheatCodeParam =>
                {
                    var cheatAbIndex = cheatCodeParam.dropdownParam.value;
                    Services.DataSecure().SetString(forceSetAb, abTestConfigs[cheatAbIndex].KeyName);
                    ApplyAbTest(cheatAbIndex);
                },
                abTestConfigs.Select(x => x.KeyName).ToList(),
                abIndex
            );

            ApplyAbTest(abIndex);
        }

        void ApplyAbTest(int abIndex)
        {
            Pool.Set(new Game());
            var serviceAbTest = Services.ABTest();
            var listAbTestConfig = Services.config.abTestConfigs.ToList();
            var abConfig = (abIndex >= 0) ? listAbTestConfig[abIndex] : null;

            if (abConfig == null)
            {
                Debug.LogError("ApplyAbTest found no AB test");
                return;
            }

            var abValue = serviceAbTest.GetValue(abConfig.KeyName, 0);
            var abEventName = abConfig.ListEventsAB[abValue];
            var listResultAb = GetListResultAction();
            var listUpdateAb = GetListUpdateAbAction();
            var dictOverride = GetDictOverrideResult().OrderByDescending(x => x.Key).ToDictionary(x => x.Key, x => x.Value);

            var listAbTestDate = listAbTestConfig.Select((x, i) =>
                new ABTestDate()
                {
                    config = x,
                    date = int.Parse(x.KeyName.Split('_').Last())
                })
                .ToList();
            var curTestDate = listAbTestDate[abIndex];
            curTestDate.version = int.Parse(abEventName.Split('v').Last());

            if (listUpdateAb.Count != listAbTestConfig.Count)
            {
                Debug.LogError("List Update AB Action Not Equal List AB Test");
                return;
            }

            var isOverride = curTestDate.IsOverrideResult(dictOverride, out var overrideDate);

            for (int i = 0; i < listResultAb.Count; i++)
            {
                var testDate = listAbTestDate[i];
                if (testDate.IsApplyResult(curTestDate, overrideDate))
                {
                    listResultAb[i].Invoke();
                }
            }

            if (curTestDate.IsApplyUpdate(overrideDate))
            {
                var updateAbAction = listUpdateAb[abIndex];
                updateAbAction.Invoke(abValue);
            }

            ResultAllAbTest();

            AddCheatCodeVersionAB(abConfig, abIndex, abValue);

            Game.abVersion = curTestDate.version;

            EventController.RaiseEvent(EventList.GamePlay.APPLY_AB_TEST);


            // Debug.Log("==>Cheat turn off WCP");

        }

        void AddCheatCodeVersionAB(ABTestConfig abTestConfig, int abIndex, int abValue)
        {
            var cheatCodeName = "AB Test Version";
            var cheatCode = ModuleController.cheatCode.GetCheatCodeParam(cheatCodeName);
            if (cheatCode == null)
            {
                ModuleController.cheatCode.AddCheatCodeButtonWithDropdown(cheatCodeName, null, null);
                cheatCode = ModuleController.cheatCode.GetCheatCodeParam(cheatCodeName);
            }

            cheatCode.action = cheatCodeParam =>
            {
                abValue = cheatCodeParam.dropdownParam.value;
                Services.DataNormal().SetInt(abTestConfig.KeyName, abValue);
                ApplyAbTest(abIndex);
                ResultAllAbTest();
            };

            cheatCode.dropdownParam = new CheatCode.DropdownParam
            {
                options = abTestConfig.ListEventsAB.ToList(),
                value = abValue
            };
        }
        #endregion

        void ResultAllAbTest()
        {
            ResultAbFullAds();
            Game.isHaveMoveModeLevel = true;
            Game.hintVersionType = HintVersion.WCF;
            //ResultAb20210608();
            //ResultAb20210615();
            //ResultAb20210618();
            //ResultAb20210622();
            //ResultAb20210624();
            //ResultAb20210628();
            //ResultAb20210701();
            //ResultAb20210705();
            //ResultAb20210708();
            //ResultAb20210714();
            //ResultAb20210718();
            //ResultAb20210720();
            //ResultAb20210727();
            //ResultAb20210803();
            //ResultAb20210810();
            //ResultAb20210817();
            //ResultAb20210825();
            //ResultAb20210902();
            //ResultAb20210913();
        }

        Dictionary<int, Func<int, int, bool>> GetDictOverrideResult()
        {
            return new Dictionary<int, Func<int, int, bool>>
            {
                //{ 20210718, (date, version) => version == 91 },
                //{ 20210718, (date, version) => date == 20210714 },
                { 20210718, null },
                { 20210825, null },
                //{ 20220106, null }, // ios
                { 20220618, (date, version) => Services.config.platform == "ios" }, // android
                //{ 20220712, (date, version) => Services.config.platform == "android" }, // ios
                { 20220726, null }, // android
                //{ 20220928, null }, // ios
                { 20221022, null }  //android
            };
        }

        List<Action> GetListResultAction()
        {
            return new List<Action>()
            {
                //ResultAbFullAds,
                 ResultAb20221111
                //ResultAb20210608,
                //ResultAb20210615,
                //ResultAb20210618,
                //ResultAb20210622,
                //ResultAb20210624,
                //ResultAb20210628,
                //ResultAb20210701,
                //ResultAb20210705,
                //ResultAb20210708,
                //ResultAb20210714,
                //ResultAb20210718,
                //ResultAb20210720,
                //ResultAb20210727,
                //ResultAb20210803,
                //ResultAb20210810,
                //ResultAb20210817,
                //ResultAb20210825,
                //ResultAb20210902,
                //ResultAb20210913,
                ////ResultAb20220106,
                //ResultAb20220618,
                ////ResultAb20220622,
                //ResultAb20220628,
                //ResultAb20220708,
                ////ResultAb20220712,
                //ResultAb20220715,
                //ResultAb20220722,
                //ResultAb20220726,
                //ResultAb20220728,
                //ResultAb20220806,
                //ResultAb20220812,
                //ResultAb20220828,
                //ResultAb20220911,
                //ResultAb20220918,
                ////ResultAb20220928,
                //ResultAb20221002,
                //ResultAb20221008
            };
        }

        List<Action<int>> GetListUpdateAbAction()
        {
            return new List<Action<int>>()
            {
                UpdateAb20221111
                //UpdateAbFullAds,
                //UpdateAb20210608,
                //UpdateAb20210615,
                //UpdateAb20210618,
                //UpdateAb20210622,
                //UpdateAb20210624,
                //UpdateAb20210628,
                //UpdateAb20210701,
                //UpdateAb20210705,
                //UpdateAb20210708,
                //UpdateAb20210714,
                //UpdateAb20210718,
                //UpdateAb20210720,
                //UpdateAb20210727,
                //UpdateAb20210803,
                //UpdateAb20210810,
                //UpdateAb20210817,
                //UpdateAb20210825,
                //UpdateAb20210902,
                //UpdateAb20210913,
                ////UpdateAb20220106,
                //UpdateAb20220618,
                ////UpdateAb20220622,
                //UpdateAb20220628,
                //UpdateAb20220708,
                ////UpdateAb20220712,
                //UpdateAb20220715,
                //UpdateAb20220722,
                //UpdateAb20220726,
                //UpdateAb20220728,
                //UpdateAb20220806,
                //UpdateAb20220812,
                //UpdateAb20220828,
                //UpdateAb20220911,
                //UpdateAb20220918,
                ////UpdateAb20220928,
                //UpdateAb20221002,
                //UpdateAb20221008,
                //UpdateAb20221022
            };
        }

        void UpdateAb20221111(int abValue)
        {
           // Debug.LogError("UpdateAb20221111 " + abValue);
            Game.isHaveGameOverUIv2 = true;
            Game.isHaveHintSuggestion = true;
            Game.isRandomWaterColor = true;
            //anim start game
            Game.levelIntro = LevelIntroType.DropDown;
            Game.isHaveSound = true;
            //Hide btn restart-next
            Game.levelRotateVer = 1;
            //fix level rotation
            Game.isHaveNotification = true;
            Game.isUseOneBg = false;
            Game.isFreeMove = true;
            Game.levelDifficultyVer = 2;
            Game.isHaveHint = true;
            Game.waterSpeed = 2;
        }
        void ResultAb20221111()
        {
            Debug.LogError("ResultAb20221111 ");
        }

        void UpdateAb20221022(int abValue)
        {

        }
        void ResultAb20221008()
        {

        }
        void UpdateAb20221008(int abValue)
        {
            Game.reskinWCPMixColorVer = abValue == 1 ? 1 : 0;
            Game.popupMidGameVer = abValue == 2 ? 1 : 0;
        }

        void ResultAb20221002()
        {

        }

        void UpdateAb20221002(int abValue)
        {
            Game.reskinWCPVer = abValue == 0 ? 0 : abValue + 3;
            GameWCP.blankBlockBossVer = abValue == 2 ? 3 : 0;
            //GameWCP.blankBlockBossVer = 1;
        }

        void ResultAb20220928()
        {

        }

        void UpdateAb20220928(int abValue)
        {

        }

        void ResultAb20220918()
        {

        }

        void UpdateAb20220918(int abValue)
        {
            Game.reskinWCPVer = abValue;
        }

        void ResultAb20220911()
        {

        }

        void UpdateAb20220911(int abValue)
        {
            Game.dailyChallengeVer = (abValue == 2 || abValue == 3) ? 5 : Game.dailyChallengeVer;
            Game.WCPModeSpacingVer = (abValue == 1 || abValue == 3) ? 2 : Game.WCPModeSpacingVer;
        }

        void ResultAb20220828()
        {
            Game.isHaveGameOverUIv2 = true;
        }

        void UpdateAb20220828(int abValue)
        {
            Game.dailyChallengeVer = abValue == 1 ? 4 : Game.dailyChallengeVer;
            Game.isHaveGameOverUIv2 = abValue == 2;
        }

        void ResultAb20220812()
        {

        }

        void UpdateAb20220812(int abValue)
        {
            if (abValue > 0)
            {
                Game.dailyChallengeVer = abValue;
            }
        }

        void ResultAb20220806()
        {

        }

        void UpdateAb20220806(int abValue)
        {
            Game.balanceVersion = abValue == 1 || abValue == 2 ? abValue + 3 : 1;
            GameWCP.isHaveOneWayBlock = abValue == 1 || abValue == 2;
            GameWCP.isHaveMixColorLevel = abValue == 1 || abValue == 2;
        }

        void ResultAb20220728()
        {

        }

        void UpdateAb20220728(int abValue)
        {
            GameWCP.isUseWCFBackground = abValue == 1;
            Game.isUseHintEffectWCP = abValue == 2;
        }

        void ResultAb20220726()
        {

        }

        void UpdateAb20220726(int abValue)
        {

        }

        void ResultAb20220722()
        {

        }

        void UpdateAb20220722(int abValue)
        {
            Game.balanceVersion = abValue == 1 || abValue == 2 ? abValue + 1 : 1;
            GameWCP.isHaveOneWayBlock = abValue == 1 || abValue == 2;
            GameWCP.isHaveMixColorLevel = abValue == 1 || abValue == 2;
        }

        void ResultAb20220715()
        {

        }

        void UpdateAb20220715(int abValue)
        {
            GameWCP.isHaveOneWayBlock = abValue == 1;
            GameWCP.blankBlockBossVer = abValue == 2 ? 1 : 0;
        }

        void ResultAb20220712()
        {
            Game.isHaveGameOverUIv2 = true;
        }

        void UpdateAb20220712(int abValue)
        {

        }

        void ResultAb20220708()
        {
            Game.isHaveHintSuggestion = true;
        }

        void UpdateAb20220708(int abValue)
        {
            GameWCP.isHaveMixColorLevel = abValue == 1;
            Game.isHaveDynamicInter = abValue == 2;
        }

        void ResultAb20220628()
        {
            Game.isHaveLevelWCP = true;
        }

        void UpdateAb20220628(int abValue)
        {
            Game.isHaveLevelWCP = abValue == 1;
        }

        void ResultAb20220622()
        {
            Game.isHaveHintSuggestion = true;
        }

        void UpdateAb20220622(int abValue)
        {
            Game.isHaveHintSuggestion = abValue == 1;
            Game.isHaveBlankBlockLevel = abValue == 2;
        }

        void ResultAb20220618()
        {

        }

        void UpdateAb20220618(int abValue)
        {

        }

        void ResultAb20220106()
        {

        }

        void UpdateAb20220106(int abValue)
        {

        }

        void ResultAb20210913()
        {

        }

        void UpdateAb20210913(int abValue)
        {
            Game.isHave2dView = abValue == 1;
            Game.isHaveUnlimitedUndo = abValue == 2;
            Game.isHaveTopView = abValue == 3;
        }

        void ResultAb20210902()
        {
            Game.isHaveSound = Game.isHaveVibrate = true;
            if (!PlayerData.isSoundOnDefault)
            {
                PlayerData.SetSoundState(true);
                PlayerData.isSoundOnDefault = true;
            }
            Game.levelIntro = LevelIntroType.DropDown;
            Game.isRandomWaterColor = true;
        }

        void UpdateAb20210902(int abValue)
        {
            Game.isHaveSound = Game.isHaveVibrate = abValue == 1;
            if (abValue == 1)
            {
                if (!PlayerData.isSoundOnDefault)
                {
                    PlayerData.SetSoundState(true);
                    PlayerData.isSoundOnDefault = true;
                }
            }
            Game.levelIntro = abValue == 2 ? LevelIntroType.DropDown : LevelIntroType.None;
            Game.isRandomWaterColor = abValue == 3;
        }

        void ResultAb20210825()
        {

        }

        void UpdateAb20210825(int abValue)
        {

        }

        void ResultAb20210817()
        {

        }

        void UpdateAb20210817(int abValue)
        {
            Game.isAutoLevel = abValue == 1;
            Game.autoLevelVer = abValue == 1 ? 9 : 7;
            Game.isHaveFlyingBird = abValue == 2;
            Game.pipePairVer = abValue == 3 ? 1 : 0;
        }

        void ResultAb20210810()
        {

        }

        void UpdateAb20210810(int abValue)
        {
            Game.isAutoLevel = abValue == 1;
            Game.levelIntro = abValue == 2 ? LevelIntroType.DropDown : LevelIntroType.None;
            Game.isRandomWaterColor = abValue == 3;
        }

        void ResultAb20210803()
        {

        }

        void UpdateAb20210803(int abValue)
        {
            Game.oneWayPipeVer = abValue == 1 ? 2 : 1;
            Game.isHaveSound = Game.isHaveVibrate = abValue == 2 || abValue == 3;
            if (abValue == 2)
            {
                if (!PlayerData.isSoundOnDefault)
                {
                    PlayerData.SetSoundState(true);
                    PlayerData.isSoundOnDefault = true;
                }
            }
            if (abValue == 3)
            {
                if (!PlayerData.isVibrateOnDefault)
                {
                    PlayerData.SetVibrateState(true);
                    PlayerData.isVibrateOnDefault = true;
                }
            }
        }

        void ResultAb20210727()
        {
            Game.levelRotateVer = 2;
        }

        void UpdateAb20210727(int abValue)
        {
            Game.levelRotateVer = abValue == 1 ? 2 : 1;
            Game.hintVer = abValue == 2 ? 3 : 1;
            Game.fixedPipeVer = abValue == 3 ? 2 : 1;
        }

        void ResultAb20210720()
        {
            Game.isHaveNotification = true;
        }

        void UpdateAb20210720(int abValue)
        {
            Game.isHaveWaterFoam = Game.isHaveWaterWave = abValue == 1;
            Game.isHaveNotification = abValue == 2;
            Game.levelDifficultyVer = abValue == 3 ? 8 : 4;
        }

        void ResultAb20210718()
        {
            UpdateAb20210718(0);
        }

        void UpdateAb20210718(int abValue)
        {
            Game.levelIntro = LevelIntroType.None;
            Game.isHaveAnimEnding = false;
            Game.isUseOneBg = false;
        }

        void ResultAb20210714()
        {
            Game.reskinVer = 5;
            Game.isCreateBgLongPipe = true;
        }

        void UpdateAb20210714(int abValue)
        {
            Game.reskinVer = abValue + 3;
            Game.isCreateBgLongPipe = abValue > 0;
            Game.isUseOneBg = abValue == 1;
        }

        void ResultAb20210708()
        {
            Game.isHaveReskin = true;
            Game.reskinVer = 3;
        }

        void UpdateAb20210708(int abValue)
        {
            Game.levelIntro = (abValue == 1) ? LevelIntroType.FadeInCloud : LevelIntroType.None;
            Game.isHaveReskin = (abValue == 2);
        }

        void ResultAb20210705()
        {
            Game.levelDifficultyVer = 4;
            Game.isFreeMove = true;
        }

        void UpdateAb20210705(int abValue)
        {
            Game.levelDifficultyVer = 2;
            Game.isFreeMove = abValue == 0 || abValue == 1;
            if (abValue == 1)
            {
                Game.levelDifficultyVer = 3;
            }
            else if (abValue == 2)
            {
                Game.levelDifficultyVer = 6;
            }
        }

        void ResultAb20210701()
        {

        }

        void UpdateAb20210701(int abValue)
        {
            Game.isHaveAnimEnding = abValue == 1;
            Game.isHaveReskin = abValue == 2;
        }

        void ResultAb20210628()
        {
            Game.levelDifficultyVer = 2;
        }

        void UpdateAb20210628(int abValue)
        {
            Game.levelDifficultyVer = abValue + 2;
            Game.isFreeMove = abValue == 2;
        }

        void ResultAb20210624()
        {
            Game.levelDifficultyVer = 2;
        }

        void UpdateAb20210624(int abValue)
        {
            Game.levelDifficultyVer = abValue == 1 ? 2 : 1;
        }

        void ResultAb20210622()
        {
            Game.isHavePopupRating = true;
        }

        void UpdateAb20210622(int abValue)
        {
            Game.isHaveReskin = abValue == 1;
            Game.isHavePopupRating = true;
        }

        void ResultAb20210618()
        {
            Game.isHaveHint = true;
        }

        void UpdateAb20210618(int abValue)
        {
            Game.isHaveHint = abValue == 1;
        }

        void ResultAb20210615()
        {
            Game.waterSpeed = 3;
        }

        void UpdateAb20210615(int abValue)
        {
            Game.waterSpeed = abValue == 1 ? 3 : 1;
        }

        void ResultAb20210608()
        {

        }

        void UpdateAb20210608(int abValue)
        {

        }

        void ResultAbFullAds()
        {
            Game.timeDelayFullAds = 30f;
        }

        void UpdateAbFullAds(int abValue)
        {
            Game.timeDelayFullAds = (abValue == 0) ? 30f : 60f;
        }
    }
}
Editor is loading...