/// <summary> /// 生成一个随机凹凸的拼图 /// </summary> /// <param name="jigsawStyle"></param> /// <param name="jigsawW"></param> /// <param name="jigsawH"></param> /// <returns></returns> public static JigsawBean createJigsaw(JigsawStyleEnum jigsawStyle, float jigsawW, float jigsawH, Texture2D jigsawPic) { JigsawBean jigsawBean = new JigsawBean(); //按样式生成不同的拼图碎片 IBaseJigsawBuilder jigsawBuilder; JigsawBulgeEnum[] bulge; if (jigsawStyle == JigsawStyleEnum.Def) { jigsawBuilder = new NomralJigsawBuilder(); bulge = new JigsawBulgeEnum[4] { (JigsawBulgeEnum)DevUtil.getRandomInt(0, 2), (JigsawBulgeEnum)DevUtil.getRandomInt(0, 2), (JigsawBulgeEnum)DevUtil.getRandomInt(0, 2), (JigsawBulgeEnum)DevUtil.getRandomInt(0, 2) }; } else { LogUtil.logError("没有相对于样式的拼图"); return(null); } return(jigsawBuilder.buildJigsaw(jigsawW, jigsawH, bulge, jigsawPic)); }
/// <summary> /// 创建拼图 /// </summary> /// <param name="jigsawInfoData"></param> private void createJigsaw(JigsawStyleEnum jigsawStyle, Texture2D pic2D, int horizontalNumber, int verticalJigsawNumber) { //创建拼图数据 listJigsawBean = CreateJigsawDataUtils.createJigsawDataList(jigsawStyle, horizontalNumber, verticalJigsawNumber, pic2D); //创建拼图 CreateJigsawGameObjUtil.createJigsawGameObjList(listJigsawBean, pic2D); containerList = CreateJigsawContainerObjUtil.createJigsawContainerObjList(listJigsawBean); //初始化拼图位置 for (int i = 0; i < listJigsawBean.Count; i++) { JigsawBean item = listJigsawBean[i]; Vector3 jigsawPosition = new Vector3( item.MarkLocation.x * item.JigsawWith - item.JigsawWith * horizontalNumber / 2f + item.JigsawWith / 2f, item.MarkLocation.y * item.JigsawHigh - item.JigsawHigh * verticalJigsawNumber / 2f + item.JigsawHigh / 2f ); containerList[i].transform.position = jigsawPosition; //设置起始位置和角度 JigsawContainerCpt containerCpt = containerList[i].transform.GetComponent <JigsawContainerCpt>(); if (containerCpt != null) { containerCpt.startPosition = jigsawPosition; containerCpt.startRotation = containerList[i].transform.rotation; } } }
/// <summary> /// 设置当前样式 /// </summary> public void setJigsawStyle(JigsawBean jigsaw, JigsawStyleEnum style) { if (jigsaw == null) { return; } jigsaw.JigsawStyle = style; }
/// <summary> /// 设置拼图组件 /// </summary> /// <param name="jigsawGameObj"></param> private static void setJigsawCpt(GameObject jigsawGameObj, JigsawBean jigsawData) { JigsawStyleEnum jigsawStyle = jigsawData.JigsawStyle; NormalJigsawCpt jigsawCpt = jigsawGameObj.AddComponent <NormalJigsawCpt>(); jigsawCpt.setJigsawData(jigsawData); jigsawCpt.setEdgeMergeStatus(JigsawStyleNormalEdgeEnum.Left, JigsawMergeStatusEnum.Unincorporated); jigsawCpt.setEdgeMergeStatus(JigsawStyleNormalEdgeEnum.Above, JigsawMergeStatusEnum.Unincorporated); jigsawCpt.setEdgeMergeStatus(JigsawStyleNormalEdgeEnum.Right, JigsawMergeStatusEnum.Unincorporated); jigsawCpt.setEdgeMergeStatus(JigsawStyleNormalEdgeEnum.Below, JigsawMergeStatusEnum.Unincorporated); }
/// <summary> /// 基础-创建数据列表 /// </summary> /// <param name="horizontalJigsawNumber"></param> /// <param name="verticalJigsawNumber"></param> /// <param name="jigsawPic"></param> /// <returns></returns> public List <JigsawBean> baseBuildJigsawList(JigsawStyleEnum style, int horizontalJigsawNumber, int verticalJigsawNumber, Texture2D jigsawPic) { // 根据图片获取item宽高和UV JigsawBean tempBean = getWithAndHighByTexture2D(horizontalJigsawNumber, verticalJigsawNumber, jigsawPic); // 获取拼图总块数 int jigsawTotalNumber = verticalJigsawNumber * horizontalJigsawNumber; List <JigsawBean> listJigsawBean = new List <JigsawBean>(); for (int horizontal = 0; horizontal < horizontalJigsawNumber; horizontal++) { for (int vertical = 0; vertical < verticalJigsawNumber; vertical++) { //生成拼图对象 JigsawBean jigsawItem = new JigsawBean(); //确认拼图样式 setJigsawStyle(jigsawItem, style); //确认当前拼图碎片相对图片的坐标 setMarkLocation(jigsawItem, horizontal, vertical); //设置拼图长宽 setJigsawHigh(jigsawItem, tempBean.JigsawHigh); setJigsawWith(jigsawItem, tempBean.JigsawWith); setJigsawUVHigh(jigsawItem, tempBean.JigsawUVHigh); setJigsawUVWith(jigsawItem, tempBean.JigsawUVWith); setJigsawNumber(jigsawItem, jigsawTotalNumber); listJigsawBean.Add(jigsawItem); } } int listJigsawBeanCount = listJigsawBean.Count; for (int jigsawposition = 0; jigsawposition < listJigsawBeanCount; jigsawposition++) { JigsawBean jigsawItem = listJigsawBean[jigsawposition]; //确认拼图每个边的凹凸情况 setBulgeEdgeForItem(listJigsawBean, jigsawItem); //确认拼图顶点坐标和UVposition setListVerticesForItem(jigsawItem); baseSetListUVPositionForItem(jigsawItem); } return(listJigsawBean); }
public static void refreshData() { GameLanguage = GameLanguageEnum.English; IsOpenBGM = EnabledEnum.ON; IsOpenSound = EnabledEnum.ON; IsOpenTimeUI = EnabledEnum.ON; SceenMode = ScreenModeEnum.Full; PuzzlesShape = JigsawStyleEnum.Def; BorderShape = GameWallEnum.Def; BorderColor = EquipColorEnum.Def; Background = EquipColorEnum.Def; SoundVolume = 1f; BGMVolume = 1f; GameConfigureBean configureBean = DataStorageManage.getGameConfigureDSHandle().getData(0); if (configureBean != null) { //游戏语言设置 GameLanguage = (GameLanguageEnum)Enum.ToObject(typeof(GameLanguageEnum), configureBean.gameLanguage); //是否开启BGM IsOpenBGM = (EnabledEnum)Enum.ToObject(typeof(EnabledEnum), configureBean.isOpenBGM); //是否开启音效 IsOpenSound = (EnabledEnum)Enum.ToObject(typeof(EnabledEnum), configureBean.isOpenSound); //是否开启计时UI IsOpenTimeUI = (EnabledEnum)Enum.ToObject(typeof(EnabledEnum), configureBean.isOpenTimeUI); //屏幕模式 SceenMode = (ScreenModeEnum)Enum.ToObject(typeof(ScreenModeEnum), configureBean.screenMode); PuzzlesShape = (JigsawStyleEnum)Enum.ToObject(typeof(JigsawStyleEnum), configureBean.puzzlesShape); BorderShape = (GameWallEnum)Enum.ToObject(typeof(GameWallEnum), configureBean.borderShape); BorderColor = (EquipColorEnum)Enum.ToObject(typeof(EquipColorEnum), configureBean.borderColor); Background = (EquipColorEnum)Enum.ToObject(typeof(EquipColorEnum), configureBean.background); SoundVolume = configureBean.soundVolume; BGMVolume = configureBean.bgmVolume; } }
/// <summary> /// 创建拼图碎片合集 /// </summary> /// <param name="jigsawStyle">拼图样式</param> /// <param name="horizontalJigsawNumber">横向拼图块数</param> /// <param name="verticalJigsawNumber">纵向拼图快速</param> /// <param name="jigsawPic">拼图图片</param> /// <returns></returns> public static List <JigsawBean> createJigsawDataList(JigsawStyleEnum jigsawStyle, int horizontalJigsawNumber, int verticalJigsawNumber, Texture2D jigsawPic) { List <JigsawBean> listJigsawBean = new List <JigsawBean>(); if (horizontalJigsawNumber == 0) { LogUtil.logError("横向块数为0"); return(listJigsawBean); } if (verticalJigsawNumber == 0) { LogUtil.logError("纵向块数为0"); return(listJigsawBean); } if (jigsawPic == null) { LogUtil.logError("没有图片"); return(listJigsawBean); } //按样式生成不同的拼图碎片 IBaseJigsawBuilder jigsawBuilder; if (jigsawStyle == JigsawStyleEnum.Def) { jigsawBuilder = new NomralJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Smooth) { jigsawBuilder = new SmoothJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Triangle) { jigsawBuilder = new TriangleJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Trapezoid) { jigsawBuilder = new TrapezoidJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Square) { jigsawBuilder = new SquareJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Heart) { jigsawBuilder = new HeartJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Pentagram) { jigsawBuilder = new PentagramJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Pentagram) { jigsawBuilder = new PentagramJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Bodkin) { jigsawBuilder = new BodkinJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Sawtooth) { jigsawBuilder = new SawtoothJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Shuriken) { jigsawBuilder = new ShurikenJigsawBuilder(); } else if (jigsawStyle == JigsawStyleEnum.Cross) { jigsawBuilder = new CrossJigsawBuilder(); } else { LogUtil.logError("没有相对于样式的拼图"); return(listJigsawBean); } listJigsawBean = jigsawBuilder.buildJigsawList(horizontalJigsawNumber, verticalJigsawNumber, jigsawPic); if (listJigsawBean == null) { LogUtil.logError("生成拼图碎片数据失败"); } return(listJigsawBean); }
/// <summary> /// 获取拼图GameObj /// </summary> /// <param name="JigsawBean">需要生成的拼图块数据</param> /// <returns></returns> public static GameObject buildJigsawGameObj(JigsawBean jigsawData, Texture2D jigsawPic) { if (jigsawData == null) { throw new Exception("没有拼图数据"); } List <Vector3> listVertices = jigsawData.ListVertices; List <Vector2> listUVposition = jigsawData.ListUVposition; Vector2 markLocation = jigsawData.MarkLocation; Vector3 centerVector = jigsawData.CenterVector; float jigsawWith = jigsawData.JigsawWith; float jigsawHigh = jigsawData.JigsawHigh; JigsawStyleEnum jigsawStyleEnum = jigsawData.JigsawStyle; if (listVertices == null) { LogUtil.log("生产拼图gameObj失败-没有顶点坐标"); return(null); } if (listVertices.Count < 3) { LogUtil.log("生产拼图gameObj失败-顶点坐标小于3"); return(null); } if (listUVposition == null) { LogUtil.log("生产拼图gameObj失败-没有图片UV坐标"); return(null); } if (!listUVposition.Count.Equals(listVertices.Count)) { LogUtil.log("生产拼图gameObj失败-UV坐标与定点坐标数量不对等"); return(null); } if (jigsawPic == null) { LogUtil.log("生产拼图gameObj失败-没有生成拼图所需图片"); return(null); } if (centerVector == null) { LogUtil.log("生产拼图gameObj失败-没有拼图中心点"); return(null); } //创建拼图的游戏对象 String gameObjName = jigsawPic.name + "_X" + markLocation.x + "_Y" + markLocation.y; GameObject jigsawGameObj = createGameObjForJigsaw(gameObjName); //设置贴图 setRenderer(jigsawGameObj, jigsawPic); //设置网格 setMeshFilter(jigsawGameObj, listVertices, listUVposition); //设置2D碰撞器 //setCollider2D(jigsawGameObj, centerVector, jigsawWith, jigsawHigh); //设置线框 //setWireFrame(jigsawGameObj); //设置拼图component setJigsawCpt(jigsawGameObj, jigsawData); return(jigsawGameObj); }