コード例 #1
0
ファイル: DelayManager.cs プロジェクト: StevePro7/3Dcity
        public void CalcdEnemyDelays(IDictionary <Byte, UInt16> enemyDelays, LevelConfigData levelConfigData)
        {
            Byte enemyTotal = levelConfigData.EnemyTotal;

            UInt16 enemyFrameDelay = levelConfigData.EnemyFrameDelay;
            UInt16 enemyFrameDelta = levelConfigData.EnemyFrameDelta;

            UInt16 noneFrameDelay = GetNoneFrameDelay(enemyFrameDelay, enemyFrameDelta);

            for (Byte key = 0; key < enemyTotal; key++)
            {
                SpeedType speedType = (SpeedType)enemyDelays[key];
                switch (speedType)
                {
                case SpeedType.None:
                    enemyDelays[key] = GetNoneFrameDelay(enemyFrameDelay, enemyFrameDelta);
                    break;

                case SpeedType.Wave:
                    enemyDelays[key] = GetWaveFrameDelay(enemyFrameDelay, levelConfigData.EnemyFrameRange, levelConfigData.EnemyFrameMinim);
                    break;

                case SpeedType.Fast:
                    enemyDelays[key] = GetFastFrameDelay(key, enemyTotal, enemyFrameDelay, levelConfigData.EnemyFrameRange, levelConfigData.EnemyFrameMinim);
                    break;

                default:
                    enemyDelays[key] = noneFrameDelay;
                    break;
                }
            }
        }
コード例 #2
0
    private void UpdateLevel(int mergeSheep)
    {
        SheepConfigData sheepConfig = ConfigManager.Instance.GetSheepConfigByType(mergeSheep);

        DataManager.Instance.PlayerData.userExp += sheepConfig.Exp;
        LevelConfigData levelConfig = ConfigManager.Instance.GetLevelConfigByLevel(DataManager.Instance.PlayerData.userLevel);
        long            maxExp      = levelConfig.Maxexp;

        float   progress = DataManager.Instance.PlayerData.userExp * 1.0f / maxExp;
        Tweener tween    = lvlProgress.DOFillAmount(progress, 0.5f);

        if (progress >= 1.0f)
        {
            tween.onComplete = () =>
            {
                DataManager.Instance.PlayerData.userLevel += 1;
                lvlProgress.fillAmount = 0.0f;
                DataManager.Instance.PlayerData.userExp = 0;
                txtLevelProgress.text = "Lv. " + DataManager.Instance.PlayerData.userLevel + "- <color=white> 0%";
                if (DataManager.Instance.PlayerData.userLevel >= 3)
                {
                    SpawnTimer.Instance.Setup();
                }
            };
        }
        else
        {
            txtLevelProgress.text = "Lv. " + DataManager.Instance.PlayerData.userLevel + "- <color=white>" + (progress * 100).ToString("F0") + "%";
        }
    }
コード例 #3
0
    void UpdateUI()
    {
        t_name.text     = roleData.name;
        t_pope.text     = MessageData.GetMessage(108);                     // 无
        t_race.text     = MessageData.GetMessage(109);                     // 人族
        t_identity.text = MessageData.GetMessage(163);                     // 身份
        t_sex.text      = MessageData.GetMessage(160 + (int)roleData.sex); // 性别
        t_level.text    = LevelConfigData.GetName(roleData.GetAttr(RoleAttribute.level));
        t_interest.text = "笛子、萧";

        t_intrinsic.text = MessageData.GetMessage(110 + roleData.intrinsic_disposition[0]); // 内在性格
        t_intrinsic.GetComponent <BtnScale>().show_id = 56 + roleData.intrinsic_disposition[0];

        for (int i = 0; i < 2; i++)
        {
            t_external[i].text = MessageData.GetMessage(130 + roleData.external_disposition[i]); // 外在性格
            t_external[i].GetComponent <BtnScale>().show_id = 63 + roleData.external_disposition[i];
        }

        for (int i = 0; i < t_xiantian.Length; i++)
        {
            XiantianQiyun data = XiantianQiyunData.dataList[roleData.xiantianqiyun[i]];
            t_xiantian[i].text = data.name;
            t_xiantian[i].transform.parent.GetChild(0).GetComponent <Image>().sprite = UIAssets.instance.itemColor[data.color];
            t_xiantian[i].GetComponent <BtnScale>().show_str = data.des;
        }

        for (int i = 0; i < t_houtian.Length; i++)
        {
            Tools.SetActive(t_houtian[i].transform.parent.gameObject, false);
        }
    }
コード例 #4
0
ファイル: LoadScreen.cs プロジェクト: StevePro7/3Dcity
        public override void LoadContent()
        {
            // Adjust for testing.
            LevelType levelType = MyGame.Manager.ConfigManager.GlobalConfigData.LevelType;

            if (LevelType.Test == levelType)
            {
                // Load level configuration data.
                Byte levelNo = Constants.TEST_LEVEL_NUM - 1;
                MyGame.Manager.LevelManager.LoadLevelConfigData(levelType, levelNo);
                LevelConfigData levelConfigData = MyGame.Manager.LevelManager.LevelConfigData;

                levelType = (LevelType)Enum.Parse(typeof(LevelType), levelConfigData.LevelType, true);
                levelNo   = Convert.ToByte(levelConfigData.LevelNo);
                MyGame.Manager.LevelManager.SetLevelType(levelType);
                MyGame.Manager.LevelManager.SetLevelNo(levelNo);
                LevelType  = MyGame.Manager.LevelManager.LevelType;
                LevelIndex = MyGame.Manager.LevelManager.LevelIndex;
            }
            else
            {
                LevelType  = MyGame.Manager.LevelManager.LevelType;
                LevelIndex = MyGame.Manager.LevelManager.LevelIndex;
                MyGame.Manager.LevelManager.LoadLevelConfigData(LevelType, LevelIndex);
            }

            LevelConfigData = MyGame.Manager.LevelManager.LevelConfigData;

            // Resets all relevant score level info,
            MyGame.Manager.ScoreManager.ResetLevel();

            // Bullets.
            MyGame.Manager.BulletManager.Reset(LevelConfigData.BulletMaxim, LevelConfigData.BulletFrame, LevelConfigData.BulletShoot);

            // Enemies.
            MyGame.Manager.EnemyManager.Reset(LevelType, LevelConfigData);

            // Explosions.
            MyGame.Manager.ExplosionManager.Reset(LevelConfigData.EnemySpawn, LevelConfigData.ExplodeDelay);

            // Sprites.
            MyGame.Manager.SpriteManager.Reset(LevelType, MyGame.Manager.LevelManager.LevelNo);

            levelName = MyGame.Manager.LevelManager.LevelName;
            levelValu = MyGame.Manager.LevelManager.LevelValu;
            base.LoadContent();

            // Must set this after base load content.
            enemyTotalText = EnemyTotal.ToString().PadLeft(3, '0');

            MyGame.Manager.RenderManager.SetGridDelay(LevelConfigData.GridDelay);
            MyGame.Manager.StateManager.SetKillSpace(Vector2.Zero);
            MyGame.Manager.EnemyManager.SpawnAllEnemies();

            MyGame.Manager.SpriteManager.LargeTarget.SetHomeSpot();
            MyGame.Manager.SoundManager.StopMusic();
            SongType songType = MyGame.Manager.SoundManager.GetGameMusic(LevelIndex);

            MyGame.Manager.SoundManager.PlayGameMusic(songType);
        }
コード例 #5
0
    void DoMerge(SheepController pickUpSheep, SheepController pointSheep)
    {
        int nextSheepLevel = pickUpSheep.SheepType + 1;

        SheepController sheepEvo        = SheepFactory.Instance.CreateNewSheep(nextSheepLevel);
        SheepConfigData sheepConfigData = ConfigManager.Instance.GetSheepConfigByType(nextSheepLevel);

        sheepEvo.InitSheep(sheepConfigData.Sheepvalue, sheepConfigData.Speed);

        sheepEvo.onMoveOutOfCageDone = CloseGate;
        sheepEvo.transform.position  = pointSheep.transform.position;

        pickUpSheep.gameObject.SetActive(false);
        pointSheep.gameObject.SetActive(false);

        activeSheeps.Remove(pickUpSheep);
        activeSheeps.Remove(pointSheep);

        activeSheeps.Add(sheepEvo);

        currentSheepInCage--;
        LevelConfigData lvlConfig = ConfigManager.Instance.GetLevelConfigByLevel(DataManager.Instance.PlayerData.userLevel);

        txtLimitSheep.text = currentSheepInCage + "/" + lvlConfig.Maxsheep;
        UpdateLevel(pickUpSheep.SheepType);

        SimpleResourcesManager.Instance.ShowParticle("MergeFx", pointSheep.transform.position, 1);
    }
コード例 #6
0
    private void UpdateItem(ItemData item)
    {
        ItemStaticData staticData = GameData.instance.item_static_data[item.static_id];

        item_name.text     = staticData.name;
        item_type.text     = GameConst.itemTypeName[staticData.type];
        item_sub_type.text = GameConst.itemSubTypeName[staticData.sub_ype];
        item_need_lv.text  = LevelConfigData.GetBigName(staticData.level);

        string[] array = staticData.des.Split('\n');
        for (int i = 1; i < transform.childCount; i++)
        {
            if (i > array.Length)
            {
                transform.GetChild(i).gameObject.SetActive(false);
            }
            else
            {
                GameObject obj = transform.GetChild(i).gameObject;
                obj.SetActive(true);
                obj.GetComponent <Text>().text = array[i - 1];
            }
        }
        //item_attr.text = GetItemAttrDes(staticData);
        item_bg.sprite    = UIAssets.instance.bgColor[staticData.color];
        item_color.sprite = UIAssets.instance.itemColor[staticData.color];
        item_icon.sprite  = UIAssets.instance.itemIcon[staticData.icon];
        item_use.SetActive(RoleData.mainRole.ItemIsEquip(item.id));
    }
コード例 #7
0
    public void OnUpdate()
    {
        for (int i = 0; i < view.childCount; i++)
        {
            int       id = i;
            Transform tf = view.GetChild(id);
            tf.SetParent(view, false);
            tf.Find("idx").GetComponent <Text>().text = id.ToString();
            bool      has_save = Tools.HasSave(id);
            Transform info     = tf.Find("Info");
            Transform create   = tf.Find("BtnCreate");
            info.gameObject.SetActive(has_save);
            create.gameObject.SetActive(!has_save);
            if (has_save)
            {
                GameData.instance.save_id = id;
                // 读取存档数据显示
                string    quick_save_path = Tools.SavePath("quick_save.data");
                byte[]    byt             = Tools.ReadAllBytes(quick_save_path);
                QuickSave quick_data      = Tools.DeserializeObject <QuickSave>(byt);

                info.Find("grilHead").gameObject.SetActive(quick_data.sex == Sex.Girl);
                info.Find("boyHead").gameObject.SetActive(quick_data.sex == Sex.Boy);
                info.Find("TextName").GetComponent <Text>().text = quick_data.name;

                info.Find("TextTime").GetComponent <Text>().text  = Tools.ShowTime(new System.DateTime(quick_data.time));
                info.Find("TextLevel").GetComponent <Text>().text = LevelConfigData.GetName(quick_data.level);
            }
        }
    }
コード例 #8
0
        public override void LoadContent()
        {
            // Load the configuration for level type + index.
            levelType  = MyGame.Manager.LevelManager.LevelType;
            levelIndex = MyGame.Manager.LevelManager.LevelIndex;
            MyGame.Manager.LevelManager.LoadLevelConfigData(levelType, levelIndex);
            levelConfigData = MyGame.Manager.LevelManager.LevelConfigData;

            Boolean isGodMode = MyGame.Manager.StateManager.IsGodMode;

            invincibile = isGodMode || levelConfigData.BonusLevel;

            // Not bad settings for default.
            //MyGame.Manager.BulletManager.Reset(10, 200, 100);
            MyGame.Manager.BulletManager.Reset(5, 50, 100);
            //MyGame.Manager.BulletManager.Reset(100, 20, 50);		// TODO remove - extreme!



            //const Byte enemySpawn = 1;
            //const Byte enemyTotal = 3;
            Byte enemySpawn = MyGame.Manager.ConfigManager.GlobalConfigData.EnemySpawn;                 // 1;  // TODO level config
            Byte enemyTotal = MyGame.Manager.ConfigManager.GlobalConfigData.EnemyTotal;                 // 1;  // TODO level config

            MyGame.Manager.EnemyManager.Reset(levelType, enemySpawn, 1000, 5000, enemyTotal);
            MyGame.Manager.EnemyManager.SpawnAllEnemies();

            MyGame.Manager.ExplosionManager.Reset(enemySpawn, MyGame.Manager.ConfigManager.GlobalConfigData.ExplodeDelay);

            MyGame.Manager.SoundManager.PlayMusic(SongType.GameMusic);
            base.LoadContent();
        }
コード例 #9
0
ファイル: DebugManager.cs プロジェクト: StevePro7/3Dcity
        public void Reset(ScreenType screenType)
        {
            if (!MyGame.Manager.ConfigManager.GlobalConfigData.DebugTester)
            {
                return;
            }
            if (MyGame.Manager.ConfigManager.GlobalConfigData.ScreenType != screenType)
            {
                return;
            }

            // Reset scores for testing scenario.
            MyGame.Manager.ScoreManager.ResetAll();

            // Reset levels for testing scenario.
            LevelType LevelType = MyGame.Manager.ConfigManager.GlobalConfigData.LevelType;
            Byte      LevelNo   = MyGame.Manager.ConfigManager.GlobalConfigData.LevelNo;

            if (LevelType.Test == LevelType)
            {
                if (ScreenType.Load == screenType)
                {
                    return;
                }

                const Byte levelNo = Constants.TEST_LEVEL_NUM - 1;
                MyGame.Manager.LevelManager.LoadLevelConfigData(LevelType, levelNo);
                LevelType = (LevelType)Enum.Parse(typeof(LevelType), MyGame.Manager.LevelManager.LevelConfigData.LevelType, true);
                LevelNo   = Convert.ToByte(MyGame.Manager.LevelManager.LevelConfigData.LevelNo);
            }


            // IMPORTANT data must be set otherwise will crash!
            MyGame.Manager.LevelManager.SetLevelType(LevelType);
            MyGame.Manager.LevelManager.SetLevelNo(LevelNo);


            // Load level configuration data.
            Byte LevelIndex = (Byte)(LevelNo - 1);

            MyGame.Manager.LevelManager.LoadLevelConfigData(LevelType, LevelIndex);
            LevelConfigData LevelConfigData = MyGame.Manager.LevelManager.LevelConfigData;


            // Bullets.
            MyGame.Manager.BulletManager.Reset(LevelConfigData.BulletMaxim, LevelConfigData.BulletFrame, LevelConfigData.BulletShoot);

            // Enemies.
            MyGame.Manager.EnemyManager.Reset(LevelType, LevelConfigData);

            // Explosions.
            MyGame.Manager.ExplosionManager.Reset(LevelConfigData.EnemySpawn, LevelConfigData.ExplodeDelay);

            // Sprites.
            MyGame.Manager.SpriteManager.Reset(LevelType, MyGame.Manager.LevelManager.LevelNo);
        }
コード例 #10
0
        private static void PrintData(LevelConfigData data)
        {
            var fields = data.GetType().GetFields();

            foreach (FieldInfo field in fields)
            {
                object obj = field.GetValue(data);
                Console.WriteLine(field.Name + "\t\t" + obj);
            }
        }
コード例 #11
0
    void OpenGateLeaveSheepOut(SheepController sheepController)
    {
        currentSheepIsMovingOut++;
        currentSheepInCage--;
        LevelConfigData lvlConfig = ConfigManager.Instance.GetLevelConfigByLevel(DataManager.Instance.PlayerData.userLevel);

        txtLimitSheep.text = currentSheepInCage + "/" + lvlConfig.Maxsheep;
        cageGate.DORotate(Vector3.zero, 0.5f).onComplete = () =>
        {
            sheepController.MoveOutOfCage();
        };
    }
コード例 #12
0
        public void UpdateLevel()
        {
            if (LevelConfigData == null)
            {
                return;
            }

            int level;

            CurrLevelProgress = LevelConfigData.GetLevelProgress(Value, out level);
            CurrLevel         = level;
        }
コード例 #13
0
    void LoadLevelData()
    {
        TextAsset configTextAsset = Resources.Load <TextAsset>(levelDataPath);

        levelConfigData = GameUtility.DeserializeFromByte <LevelConfigData>(configTextAsset.bytes);

        //string path = GameUtility.GetStreamingassetPath(levelDataPath);
        //StartCoroutine(LoadLevelDataRoutine(path,(LevelConfigData _levelConfigData) => {
        //    levelConfigData = _levelConfigData;
        //}));

        //levelConfigData = GameUtility.DeserializeFromPath<LevelConfigData>(path);
        //Debug.LogError(levelConfigData);
    }
コード例 #14
0
    public void UpdateInfo()
    {
        RoleData roleData = RoleData.mainRole;

        level_name.text         = LevelConfigData.GetName(roleData.GetAttr(RoleAttribute.level));
        hp.text                 = string.Format("{0}/{1}", roleData.GetAttr(RoleAttribute.hp), roleData.GetMaxAttr(RoleAttribute.hp));
        mp.text                 = string.Format("{0}/{1}", roleData.GetAttr(RoleAttribute.mp), roleData.GetMaxAttr(RoleAttribute.mp));
        nl.text                 = string.Format("{0}/{1}", roleData.GetAttr(RoleAttribute.spirit), roleData.GetMaxAttr(RoleAttribute.spirit));
        role_name.text          = roleData.name;
        show_coin.text          = roleData.GetAttr(RoleAttribute.coin).ToString();;
        show_contributions.text = roleData.GetAttr(RoleAttribute.contributions).ToString();;
        show_city_token.text    = roleData.GetAttr(RoleAttribute.city_token).ToString();;
        gril_head.SetActive(roleData.sex == Sex.Girl);
        boy_head.SetActive(roleData.sex == Sex.Boy);
    }
コード例 #15
0
    //SheepController SpawnSheep()
    //{
    //    SheepController sheep = sheepControllersPool[currentSheepPoolCursor];

    //    SheepConfigData sheepConfigData = ConfigManager.Instance.GetSheepConfigByType(1);
    //    sheep.InitSheep(sheepConfigData.Sheepvalue, sheepConfigData.Speed);

    //    currentSheepPoolCursor++;
    //    if (currentSheepPoolCursor >= numOfSheep)
    //        currentSheepPoolCursor = 0;

    //    float x = UnityEngine.Random.Range(spawningBox.bounds.center.x - spawningBox.bounds.extents.x, spawningBox.bounds.center.x + spawningBox.bounds.extents.x);
    //    float z = UnityEngine.Random.Range(spawningBox.bounds.center.z - spawningBox.bounds.extents.z, spawningBox.bounds.center.z + spawningBox.bounds.extents.z);

    //    sheep.transform.position = new Vector3(x, 1.8f, z);

    //    sheep.transform.localEulerAngles = new Vector3(0, UnityEngine.Random.Range(0,360), 0);

    //    sheep.gameObject.SetActive(true);
    //    activeSheeps.Add(sheep);
    //    return sheep;
    //}

    public void PutSheepBackToCage(SheepController sheepController)
    {
        float x = UnityEngine.Random.Range(spawningBox.bounds.center.x - spawningBox.bounds.extents.x, spawningBox.bounds.center.x + spawningBox.bounds.extents.x);
        float z = UnityEngine.Random.Range(spawningBox.bounds.center.z - spawningBox.bounds.extents.z, spawningBox.bounds.center.z + spawningBox.bounds.extents.z);

        sheepController.transform.position = new Vector3(x, 1.8f, z);
        sheepController.ResetState();
        if (!activeSheeps.Contains(sheepController))
        {
            activeSheeps.Add(sheepController);
        }
        currentSheepInCage++;
        LevelConfigData lvlConfig = ConfigManager.Instance.GetLevelConfigByLevel(DataManager.Instance.PlayerData.userLevel);

        txtLimitSheep.text = currentSheepInCage + "/" + lvlConfig.Maxsheep;
    }
コード例 #16
0
        private String EnemySpeed(LevelConfigData data, Byte mult)
        {
            Int16 maxEnemyFrameRange = (Int16)(mult * data.EnemyFrameRange);

            if (data.EnemyFrameDelay - maxEnemyFrameRange < data.EnemyFrameMinim)
            {
                Int16 recommend = (Int16)(data.EnemyFrameDelay - maxEnemyFrameRange);
                return(String.Format("{0} Delay:{1} MAX:{2} Minim:{3} RECOMMEND:{4}",
                                     ErrorType.EnemySpeedWave,
                                     data.EnemyFrameDelay,
                                     maxEnemyFrameRange,
                                     data.EnemyFrameMinim,
                                     recommend));
            }

            return(String.Empty);
        }
コード例 #17
0
        public void Process()
        {
            LevelConfigData data = new LevelConfigData
            {
                LevelNo    = "01",
                LevelName  = "MOOT",
                BonusLevel = false,
                GridDelay  = 200,
                //BulletMaxim = 5,
                //BulletFrame = 10,
                //BulletShoot = 50,
                //EnemySpawn = 1,
                //EnemyTotal = 5,
                //EnemyFrameDelay = 100,
            };

            const string fileName = "steve.xml";

            // UTF8
https:      //stackoverflow.com/questions/3862063/serializing-an-object-as-utf-8-xml-in-net

            // Namespace
            //https://stackoverflow.com/questions/625927/omitting-all-xsi-and-xsd-namespaces-when-serializing-an-object-in-net

            using (Stream stream = new FileStream(fileName, FileMode.Create))
            {
                using (var writer = new StreamWriter(stream, System.Text.Encoding.UTF8))
                {
                    XmlSerializer           serializer = new XmlSerializer(typeof(LevelConfigData));
                    XmlSerializerNamespaces ns         = new XmlSerializerNamespaces();
                    ns.Add(String.Empty, String.Empty);

                    serializer.Serialize(writer, data, ns);
                }
            }

            //using (Stream stream = new FileStream("steve.xml", FileMode.Create))
            //{

            //    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(LevelConfigData));
            //    //https://stackoverflow.com/questions/625927/omitting-all-xsi-and-xsd-namespaces-when-serializing-an-object-in-net
            //    System.Xml.Serialization.XmlSerializerNamespaces ns = new System.Xml.Serialization.XmlSerializerNamespaces();
            //    ns.Add(String.Empty, String.Empty);
            //    serializer.Serialize(stream, data, ns);
            //}
        }
コード例 #18
0
        public void Reset(LevelType theLevelType, LevelConfigData theLevelConfigData)
        {
            levelType       = theLevelType;
            levelConfigData = theLevelConfigData;

            maxEnemySpawn = levelConfigData.EnemySpawn;
            if (maxEnemySpawn <= 0)
            {
                maxEnemySpawn = 1;
            }
            if (maxEnemySpawn > Constants.MAX_ENEMYS_SPAWN)
            {
                maxEnemySpawn = Constants.MAX_ENEMYS_SPAWN;
            }

            EnemyTotal = levelConfigData.EnemyTotal;
            if (EnemyTotal <= 0)
            {
                EnemyTotal = 1;
            }

            // Ensure max total takes precedence over spawn.
            if (maxEnemySpawn > EnemyTotal)
            {
                maxEnemySpawn = EnemyTotal;
            }

            // Reset all enemies but not the list as will clear.
            for (Byte index = 0; index < maxEnemySpawn; index++)
            {
                EnemyList[index].Reset();
            }

            // Important: collections MUST be cleared on Reset() to ensure stability!
            Clear();
            enemyDelays.Clear();
            enemyRotates.Clear();
            enemyMoves.Clear();

            EnemyStart      = 0;
            EnemySpawn      = 0;
            EnemyStartText  = EnemyStart.ToString().PadLeft(3, '0');
            EnemyTotalText  = EnemyTotal.ToString().PadLeft(3, '0');
            EnemyPercentage = 0.0f;
        }
コード例 #19
0
ファイル: DelayManager.cs プロジェクト: StevePro7/3Dcity
        public void ResetEnemyDelays(IDictionary <Byte, UInt16> enemyDelays, LevelConfigData levelConfigData)
        {
            Byte enemyTotal = levelConfigData.EnemyTotal;

            enemyDelays.Clear();
            for (Byte index = 0; index < enemyTotal; index++)
            {
                enemyDelays.Add(index, (Byte)SpeedType.None);
            }

            Byte enemySpeedWave = (Byte)(levelConfigData.EnemySpeedWave / 100.0f * levelConfigData.EnemyTotal);

            ResetEnemySpeedTypes(enemyDelays, enemyTotal, enemySpeedWave, SpeedType.Wave);

            Byte enemySpeedFast = (Byte)(levelConfigData.EnemySpeedFast / 100.0f * levelConfigData.EnemyTotal);

            ResetEnemySpeedTypes(enemyDelays, enemyTotal, enemySpeedFast, SpeedType.Fast);
        }
コード例 #20
0
        public void LoadLevelConfigDataTest()
        {
            const LevelType levelType  = LevelType.Test;
            const Byte      levelIndex = 98;

            LevelManager.LoadLevelConfigData(levelType, levelIndex);

            Assert.That(LevelManager.LevelConfigData, Is.Not.Null);

            // Ensure that enemy frame delay proportions work.
            LevelConfigData data = LevelManager.LevelConfigData;
            Byte            sum1 = (Byte)(data.EnemySpeedNone + data.EnemySpeedWave + data.EnemySpeedFast);

            Assert.That(100, Is.EqualTo(sum1));

            Byte sum2 = (Byte)(data.EnemyMoverNone + data.EnemyMoverHorz + data.EnemyMoverVert + data.EnemyMoverBoth);

            Assert.That(100, Is.EqualTo(sum2));

            PrintData(LevelManager.LevelConfigData);
        }
コード例 #21
0
    public void EquipItem(int item_id, int idx)
    {
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        if (!LevelConfigData.CheckLevel(GetAttr(RoleAttribute.level), static_data.level))
        {
            MessageTips.Message(43, LevelConfigData.GetBigName(static_data.level));
            return;
        }

        if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy)
        {
            remedy_items[idx] = item_id;
            EventManager.SendEvent(EventTyp.ItemChange, null);
        }
        else
        {
            EquipItem(item_id);
        }
    }
コード例 #22
0
        public void ObjToXml(LevelConfigData data)
        {
            string fileName = String.Format("{0}-{1}.xml", data.LevelNo, data.LevelName);

            // UTF8
            // https://stackoverflow.com/questions/3862063/serializing-an-object-as-utf-8-xml-in-net

            // Namespace
            // https://stackoverflow.com/questions/625927/omitting-all-xsi-and-xsd-namespaces-when-serializing-an-object-in-net

            using (Stream stream = new FileStream(fileName, FileMode.Create))
            {
                using (var writer = new StreamWriter(stream, System.Text.Encoding.UTF8))
                {
                    XmlSerializer           serializer = new XmlSerializer(typeof(LevelConfigData));
                    XmlSerializerNamespaces ns         = new XmlSerializerNamespaces();
                    ns.Add(String.Empty, String.Empty);

                    serializer.Serialize(writer, data, ns);
                }
            }
        }
コード例 #23
0
ファイル: XmlToCsv.cs プロジェクト: StevePro7/3DcityLevels
        public string ObjToCsv(IDictionary <string, int> dict, LevelConfigData data)
        {
            string[]    items  = new string[dict.Count];
            FieldInfo[] fields = data.GetType().GetFields();

            //int idx = 0;
            for (int idx = 0; idx < fields.Length; idx++)
            {
                FieldInfo field = fields[idx];
                string    key   = field.Name;
                object    val   = field.GetValue(data);
                string    txt   = val.ToString();
                if (field.FieldType == typeof(Boolean))
                {
                    txt = txt.ToUpper();
                }
                int lookd = dict[key];
                items[lookd] = txt;
            }

            return(String.Join(DELIM, items));
        }
コード例 #24
0
        public LevelConfigData CsvToObj(IDictionary <string, int> dict, string line)
        {
            string[] items = line.Split(DELIM);

            LevelConfigData data = new LevelConfigData();

            FieldInfo[] fields = data.GetType().GetFields();

            //int idx = 0;
            for (int idx = 0; idx < fields.Length; idx++)
            {
                string    item  = items[idx];
                FieldInfo field = fields[idx];
                string    key   = field.Name;
                int       value = dict[key];

                // TODO pad LevelNo with '0' when build CSV
                var conv = Convert.ChangeType(item, field.FieldType);
                fields[idx].SetValue(data, conv);
            }

            return(data);
        }
コード例 #25
0
ファイル: Service.cs プロジェクト: StevePro7/3DcityLevels
        public void Process(LevelType levelType)
        {
            IList <string> lines = new List <string>();

            Type   dataType = typeof(LevelConfigData);
            string title    = xmlToCsv.GetTitle(dataType);

            lines.Add(title);

            var dict = xmlToCsv.GetHeaders(dataType);

            string[] files = fileMgr.GetFiles(levelType);

            Boolean isValid = true;

            foreach (string file in files)
            {
                LevelConfigData data = xmlToCsv.XmlToObj(file);
                //ErrorType errorType = validate.ValidLevelConfigData(data);
                String error = validate.ValidLevelConfigData(data);
                if (!String.IsNullOrEmpty(error))
                {
                    String msg = String.Format("{0} [{1}] => {2}", file, data.LevelNo.ToString().PadLeft(2, '0'), error);
                    logger.Error(msg);
                    isValid = false;
                }

                string line = xmlToCsv.ObjToCsv(dict, data);
                lines.Add(line);
            }

            if (isValid)
            {
                string[] contents = lines.ToArray();
                fileMgr.WriteCSV(levelType, contents);
            }
        }
コード例 #26
0
ファイル: FileMgr.cs プロジェクト: StevePro7/3DcityLevels
        public void WriteXML(LevelType levelType, LevelConfigData data)
        {
            string levelNo = data.LevelNo.ToString().PadLeft(2, '0');
            string file    = String.Format("{0}-{1}.{2}", levelNo, levelType, XmlExt);
            string path    = String.Format("{0}/{1}/{2}", OutDir, levelType, file);

            // UTF8
            // https://stackoverflow.com/questions/3862063/serializing-an-object-as-utf-8-xml-in-net

            // Namespace
            // https://stackoverflow.com/questions/625927/omitting-all-xsi-and-xsd-namespaces-when-serializing-an-object-in-net

            using (Stream stream = new FileStream(path, FileMode.Create))
            {
                using (var writer = new StreamWriter(stream, System.Text.Encoding.UTF8))
                {
                    XmlSerializer           serializer = new XmlSerializer(typeof(LevelConfigData));
                    XmlSerializerNamespaces ns         = new XmlSerializerNamespaces();
                    ns.Add(String.Empty, String.Empty);

                    serializer.Serialize(writer, data, ns);
                }
            }
        }
コード例 #27
0
        public void Process(LevelType levelType)
        {
            string file = fileMgr.GetCSVFile(levelType);

            string[] lines = fileMgr.ReadCSV(file);

            string title = lines[0];
            var    dict  = csvToXml.GetHeaders(title);

            Boolean isValid = true;
            IList <LevelConfigData> items = new List <LevelConfigData>();

            for (int index = 1; index < lines.Length; index++)
            {
                string          line = lines[index];
                LevelConfigData data = csvToXml.CsvToObj(dict, line);
                //ErrorType errorType = validate.ValidLevelConfigData(data);
                String error = validate.ValidLevelConfigData(data);
                if (!String.IsNullOrEmpty(error))
                {
                    String msg = String.Format("{0} [{1}] => {2}", file, data.LevelNo.ToString().PadLeft(2, '0'), error);
                    logger.Error(msg);
                    isValid = false;
                }

                items.Add(data);
            }

            if (isValid)
            {
                foreach (LevelConfigData data in items)
                {
                    fileMgr.WriteXML(levelType, data);
                }
            }
        }
コード例 #28
0
        public void CalcdEnemyDelaysTest()
        {
            IDictionary <Byte, UInt16> enemyDelays = new Dictionary <Byte, UInt16>(Constants.MAX_ENEMYS_TOTAL);

            const LevelType levelType  = LevelType.Hard;
            const Byte      levelNo    = 13;
            const Byte      levelIndex = levelNo - 1;

            MyGame.Manager.LevelManager.Initialize(CONTENT_ROOT);
            MyGame.Manager.LevelManager.LoadLevelConfigData(levelType, levelIndex);
            LevelConfigData levelConfigData = MyGame.Manager.LevelManager.LevelConfigData;

            MyGame.Manager.RandomManager.Initialize();

            DelayManager.LoadContent();
            Console.WriteLine("Level:{0} Num:{1}", levelType, levelNo);

            DelayManager.ResetEnemyDelays(enemyDelays, levelConfigData);

            IDictionary <SpeedType, Byte> totals = new Dictionary <SpeedType, Byte>(Constants.MAX_ENEMYS_TOTAL);

            for (Byte index = 0; index < enemyDelays.Count; index++)
            {
                UInt16    value     = enemyDelays[index];
                SpeedType speedType = (SpeedType)value;
                if (!totals.ContainsKey(speedType))
                {
                    totals.Add(speedType, 1);
                }
                else
                {
                    totals[speedType]++;
                }
            }

            Console.WriteLine("Speed[{0}]={1}", SpeedType.None, totals[SpeedType.None]);
            Console.WriteLine("Speed[{0}]={1}", SpeedType.Wave, totals[SpeedType.Wave]);
            Console.WriteLine("Speed[{0}]={1}", SpeedType.Fast, totals[SpeedType.Fast]);


            DelayManager.CalcdEnemyDelays(enemyDelays, levelConfigData);


            UInt16 minValue = UInt16.MaxValue;
            UInt16 maxValue = UInt16.MinValue;

            for (Byte index = 0; index < enemyDelays.Count; index++)
            {
                UInt16 value = enemyDelays[index];
                if (value < minValue)
                {
                    minValue = value;
                }
                if (value > maxValue)
                {
                    maxValue = value;
                }
            }

            Console.WriteLine("Min:{0} Max:{1}", minValue, maxValue);
        }
コード例 #29
0
    /// <summary>
    /// 装备物品
    /// 戒指或坐骑:如果是已穿戴就卸下,否则就穿戴
    /// 药物:是已装备的药物则卸下,否则装备到最后一个空格子,没有的话提示装备已满
    /// </summary>
    public void EquipItem(int item_id)
    {
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        if (!LevelConfigData.CheckLevel(GetAttr(RoleAttribute.level), static_data.level))
        {
            MessageTips.Message(43, LevelConfigData.GetBigName(static_data.level));
            return;
        }
        // 移除穿在身上的
        if (static_data.sub_ype == ItemSubType.Ring)
        {
            if (equip_items[0] != -1)
            {
                int empty_count = GetAttr(RoleAttribute.max_item) - bag_items.Count;
                if (equip_items[0] == item_id)
                {
                    // 脱下
                    empty_count -= GetItemAttrbuite(item_id, RoleAttribute.max_item);
                }
                else
                {
                    // 更换
                    if (equip_items[0] != -1)
                    {
                        empty_count -= GetItemAttrbuite(equip_items[0], RoleAttribute.max_item);
                    }
                    empty_count += GetItemAttrbuite(item_id, RoleAttribute.max_item);
                }
                if (empty_count < 0)
                {
                    // 无法更换或脱下戒指
                    MessageTips.Message(44);
                    return;
                }
            }

            if (equip_items[0] == item_id)   // 戒指
            {
                equip_items[0] = -1;
            }
            else
            {
                equip_items[0] = item_id;
            }
            UpdateAttr();
            EventManager.SendEvent(EventTyp.ItemChange, null);
        }
        else if (static_data.sub_ype == ItemSubType.Ride)
        {
            if (equip_items[1] == item_id)   // 坐骑
            {
                equip_items[1] = -1;
            }
            else
            {
                equip_items[1] = item_id;
            }
            UpdateAttr();
            EventManager.SendEvent(EventTyp.ItemChange, null);
        }
        else if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy)
        {
            for (int i = 0; i < remedy_items.Length; i++)   // 判断卸下丹药
            {
                if (remedy_items[i] == item_id)
                {
                    remedy_items[i] = -1;
                    EventManager.SendEvent(EventTyp.ItemChange, null);
                    return;
                }
            }
            for (int i = 0; i < remedy_items.Length; i++)   // 判断穿戴丹药
            {
                if (remedy_items[i] == -1)
                {
                    remedy_items[i] = item_id;
                    EventManager.SendEvent(EventTyp.ItemChange, null);
                    return;
                }
            }
            MessageTips.Message(27);
        }
    }
コード例 #30
0
        public String ValidLevelConfigData(LevelConfigData data)
        {
            String error = String.Empty;

            // 01. SpeedNotHundred
            Byte speed = (Byte)(data.EnemySpeedNone + data.EnemySpeedWave + data.EnemySpeedFast);

            if (100 != speed)
            {
                return(String.Format("{0} Total:{1} None:{2} Wave:{3} Fast:{4}", ErrorType.SpeedNotHundred, speed, data.EnemySpeedNone, data.EnemySpeedWave, data.EnemySpeedFast));
            }
            // 01. MoversNotHundred
            Byte mover = (Byte)(data.EnemyMoverNone + data.EnemyMoverHorz + data.EnemyMoverVert + data.EnemyMoverBoth);

            if (100 != mover)
            {
                return(String.Format("{0} Total:{1} None:{2} Horz:{3} Vert:{4} Both:{5}", ErrorType.SpeedNotHundred, speed, data.EnemyMoverNone, data.EnemyMoverHorz, data.EnemyMoverVert, data.EnemyMoverBoth));
            }

            //02. WrongNumberBullets
            const Byte bulletFrames = 6;
            UInt16     bulletSpace  = (UInt16)(bulletFrames * data.BulletFrame);
            UInt16     bulletTimer  = (UInt16)(data.BulletMaxim * data.BulletShoot);

            if (bulletTimer > bulletSpace)
            {
                Byte recommend = (Byte)(bulletSpace / data.BulletShoot);
                return(String.Format("{0} Space:{1} [{2}*{3}] Timer:{4} [MAX:{5} * Shoot:{6}] RECOMMEND:{7}",
                                     ErrorType.WrongNumberBullets,
                                     bulletSpace,
                                     bulletFrames,
                                     data.BulletFrame,
                                     bulletTimer,
                                     data.BulletMaxim,
                                     data.BulletShoot,
                                     recommend));
            }

            // 03. WrongEnemySpeedWave
            if (0 == data.EnemySpeedNone)
            {
                return("EnemySpeedNone must be greater than 0");
            }

            // 03. WrongEnemySpeedWave
            if (0 != data.EnemySpeedWave)
            {
                String wave = EnemySpeed(data, 1);
                if (!String.IsNullOrEmpty(wave))
                {
                    return(wave);
                }
            }

            // 03. WrongEnemySpeedFast
            if (0 != data.EnemySpeedFast)
            {
                String fast = EnemySpeed(data, 2);
                if (!String.IsNullOrEmpty(fast))
                {
                    return(fast);
                }
            }

            // 04. WrongGridDelay
            const UInt16 minGridDelay = 100;
            const UInt16 maxGridDelay = 500;

            if (data.GridDelay < minGridDelay || data.GridDelay > maxGridDelay)
            {
                return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongGridDelay, minGridDelay, maxGridDelay));
            }

            // 05. WrongEnemySpawn
            const Int16 minEnemySpawn = 1;
            const Int16 maxEnemySpawn = 8;

            if (data.EnemySpawn < minEnemySpawn || data.EnemySpawn > maxEnemySpawn)
            {
                return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongEnemySpawn, minEnemySpawn, maxEnemySpawn));
            }

            // 06. WrongEnemyTotal
            const Int16 minEnemyTotal = 1;
            const Int16 maxEnemyTotal = 255;

            if (data.EnemyTotal < minEnemyTotal || data.EnemyTotal > maxEnemyTotal)
            {
                return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongEnemyTotal, minEnemyTotal, maxEnemyTotal));
            }

            // 05. WrongEnemyVelocity.
            const UInt16 minEnemyVelocity = 1;
            const UInt16 maxEnemyVelocity = 9;

            if (data.EnemyVelocity < minEnemyVelocity || data.EnemyVelocity > maxEnemyVelocity)
            {
                return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongEnemyVelocity, minEnemyVelocity, maxEnemyVelocity));
            }

            // 04. WrongExplodeDelay
            const UInt16 minExplodeDelay = 75;
            const UInt16 maxExplodeDelay = 125;

            if (data.ExplodeDelay < minExplodeDelay || data.ExplodeDelay > maxExplodeDelay)
            {
                return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongExplodeDelay, minExplodeDelay, maxExplodeDelay));
            }

            return(error);
        }