示例#1
0
        public void StartLevel(int level)
        {
            CurrentLevel = Levels.Where(p => p.Level == level).SingleOrDefault();
            if (CurrentLevel == null)
            {
                string msg = $"Failed to Start Level {level}.";
                Log.Fatal(msg);
                throw new Exception(msg);   //we need to stop here since the game is unplayable if this happens
            }

            //string[] mapLines = System.IO.File.ReadAllLines(mapFilename); //old method
            Width  = CurrentLevel.Width;
            Height = CurrentLevel.Height;
            Tiles  = new MapTile[CurrentLevel.Height, CurrentLevel.Width];

            for (int yPos = 0; yPos < CurrentLevel.Height; yPos++)
            {
                //create the Map 2d array data from the current line char by char
                for (int xPos = 0; xPos < CurrentLevel.Width; xPos++)
                {
                    //this calculates row * width of row + column (+1 per row [0 indexed] to adjust for spaces at the end of rows from yaml deserialization)
                    int strpos = yPos * CurrentLevel.Width + xPos + (yPos);
                    CreateTile(CurrentLevel.Map[strpos], xPos, yPos);
                }
            }

            //TODO place player in random available space like monsters are
            ThePlayer.X = 10;
            ThePlayer.Y = 10;

            Random randgen = new Random();

            MonsterMgr.AddMonster(Tiles, randgen.Next(2, level + 3));
            //MonsterMgr.AddMonster(Tiles, randgen.Next(1, 2));
        }
    public MonsterRole AddMonster(Variant m, bool invisible = true)
    {
        if (GRMap.grmap_loading)
        {
            cacheProxy.Add(m);
            return(null);
        }



        int num = 0;

        if (m.ContainsKey("boset_num"))
        {
            num = m["boset_num"];
        }
        Vector3 born_pt = new Vector3(m["x"] / GameConstant.PIXEL_TRANS_UNITYPOS, 0f, m["y"] / GameConstant.PIXEL_TRANS_UNITYPOS);
        string  monName = null;

        if (m.ContainsKey("owner_name"))
        {
            monName = m["owner_name"];
        }
        MonsterRole role = _inst.AddMonster(m["mid"], born_pt, m["iid"], m["face"], num, name: monName);

        if (role != null)
        {
            role.curhp     = m["hp"];
            role.maxHp     = m["battleAttrs"]["max_hp"];
            role.invisible = invisible;
            if (!invisible)
            {
                role.m_curGameObj.SetActive(false);
            }
        }

        if (m.ContainsKey("sprite_flag"))
        {
            //屏蔽掉怪物异步加载后报错的无用代码
            //uint call = m["sprite_flag"];
            //uint iid = m["iid"];
            //var vv = MonsterMgr._inst.getMonster(iid);
            //if (vv != null)
            //{
            //    Transform body = vv.m_curModel.FindChild("body");
            //    if (body != null)
            //    {
            //        SkinnedMeshRenderer render = body.GetComponent<SkinnedMeshRenderer>();
            //        if (render != null)
            //        {
            //            switch (call)
            //            {
            //                case 0:
            //                    foreach (var v in render.sharedMaterials)
            //                    {
            //                        //v.SetColor("_RimColor", new Color(0, 0, 0, 0));
            //                        //v.SetFloat("_RimWidth", 0f);
            //                    }
            //                    break;
            //                case 1:
            //                    //render.sharedMaterial = U3DAPI.U3DResLoad<Material>("default/monster_1021_heite_gold");
            //                    break;
            //            }
            //        }
            //    }
            //}
        }

        if (m.ContainsKey("moving"))
        {
            role.to_moving = true;
            role.to_x      = m["moving"]["to_x"]._float;
            role.to_y      = m["moving"]["to_y"]._float;
        }

        return(role);
    }