Пример #1
0
    public void SetBuildingData(BuildingInfoBean itemData)
    {
        GameObject objBuilding = GameObject.Find("Building");
        GameObject objModel    = GameObject.Find("Model");

        CptUtil.RemoveChildsByActiveInEditor(objBuilding);
        List <BuildingBean> listData = itemData.listBuildingData;

        if (listData == null)
        {
            return;
        }
        for (int i = 0; i < listData.Count; i++)
        {
            BuildingBean buildingData = listData[i];
            GameObject   objItem      = Instantiate(objModel);
            objItem.SetActive(true);
            objItem.transform.SetParent(objBuilding.transform);

            BuildingEditor buildingEditor = objItem.GetComponent <BuildingEditor>();
            buildingEditor.direction          = (DirectionEnum)buildingData.direction;
            buildingEditor.blockType          = (BlockTypeEnum)buildingData.blockId;
            buildingEditor.randomRate         = buildingData.randomRate;
            buildingEditor.transform.position = buildingData.GetPosition();
            buildingEditor.OnValidate();
        }
    }
Пример #2
0
 /// <summary>
 /// 初始化建筑信息
 /// </summary>
 /// <param name="listData"></param>
 public void InitBuildingInfo(List <BuildingInfoBean> listData)
 {
     for (int i = 0; i < listData.Count; i++)
     {
         BuildingInfoBean itemInfo = listData[i];
         arrayBuildingInfo[itemInfo.id] = itemInfo;
     }
 }
Пример #3
0
 public void InitBuildingInfo(List <BuildingInfoBean> listData)
 {
     dicBuildingInfo.Clear();
     for (int i = 0; i < listData.Count; i++)
     {
         BuildingInfoBean itemInfo = listData[i];
         dicBuildingInfo.Add(itemInfo.id, itemInfo);
     }
 }
Пример #4
0
    /// <summary>
    /// 获取游戏数据
    /// </summary>
    /// <returns></returns>
    public BuildingInfoBean GetBuildingInfoData()
    {
        BuildingInfoBean data = serviceBuildingInfo.QueryData();

        if (data == null)
        {
            data = new BuildingInfoBean();
        }
        return(data);
    }
Пример #5
0
    /// <summary>
    /// 更新数据
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public bool UpdateData(BuildingInfoBean data)
    {
        bool deleteState = BaseDeleteDataById(data.id);

        if (deleteState)
        {
            bool insertSuccess = BaseInsertData(tableNameForMain, data);
            return(insertSuccess);
        }
        return(false);
    }
Пример #6
0
    public GameObject GetSceneBuildingModel(long buildingId)
    {
        BuildingInfoBean buildingInfo = GetBuildingInfo(buildingId);

        if (buildingInfo != null)
        {
            GameObject gameObject = GetModel(dicSceneBuilding, "building/building", buildingInfo.model_name, "Assets/Prefabs/Building/" + buildingInfo.model_name + ".prefab");
            return(gameObject);
        }
        return(null);
    }
    /// <summary>
    /// 获取数据
    /// </summary>
    /// <param name="action"></param>
    /// <returns></returns>
    public BuildingInfoBean GetBuildingInfoData(Action <BuildingInfoBean> action)
    {
        BuildingInfoBean data = GetModel().GetBuildingInfoData();

        if (data == null)
        {
            GetView().GetBuildingInfoFail("没有数据", null);
            return(null);
        }
        GetView().GetBuildingInfoSuccess <BuildingInfoBean>(data, action);
        return(data);
    }
Пример #8
0
    /// <summary>
    /// 展示
    /// </summary>
    /// <param name="itemData"></param>
    protected void UIForBuildingItem(BuildingInfoBean itemData, bool isCreate)
    {
        GUILayout.BeginHorizontal();

        if (isCreate)
        {
            if (EditorUI.GUIButton("创建建筑", 150))
            {
                GetBuildingData(itemData);
                serviceForBuildingInfo.UpdateData(itemData);
            }
        }
        else
        {
            if (EditorUI.GUIButton("加载建筑", 150))
            {
                SetBuildingData(itemData);
            }
            if (EditorUI.GUIButton("更新建筑", 150))
            {
                GetBuildingData(itemData);
                serviceForBuildingInfo.UpdateData(itemData);
            }
        }

        EditorUI.GUIText("id", 50);
        itemData.id = EditorUI.GUIEditorText(itemData.id, 100);
        EditorUI.GUIText("名称", 50);
        itemData.name_cn = EditorUI.GUIEditorText(itemData.name_cn, 100);
        itemData.name_en = EditorUI.GUIEditorText(itemData.name_en, 100);
        if (isCreate)
        {
        }
        else
        {
            if (EditorUI.GUIButton("删除建筑", 150))
            {
                serviceForBuildingInfo.DeleteData(itemData.id);
            }
        }

        GUILayout.EndHorizontal();
    }
Пример #9
0
    public void InitSceneData(long sceneId, Action callBack)
    {
        manager.GetSceneInfo(sceneId, (sceneInfo) => {
            SceneDetailsBean sceneDetails = sceneInfo.GetSceneDetilas();
            for (int i = 0; i < sceneDetails.listBuildingData.Count; i++)
            {
                SceneDetailsItemBean sceneDetailsItem = sceneDetails.listBuildingData[i];
                GameObject objModel = manager.GetSceneBuildingModel(sceneDetailsItem.buildingId);
                GameObject objItem  = Instantiate(gameObject, objModel);

                objItem.transform.position    = sceneDetailsItem.position.GetVector3();
                objItem.transform.localScale  = sceneDetailsItem.size.GetVector3();
                objItem.transform.eulerAngles = sceneDetailsItem.angle.GetVector3();

                BuildingInfoBean buildingInfo = manager.GetBuildingInfo(sceneDetailsItem.buildingId);

                BuildingBase baseBuilding;
                switch (buildingInfo.GetBuildingType())
                {
                case BuildingTypeEnum.Ground:
                    baseBuilding = objItem.AddComponent <BuildingGround>();
                    break;

                case BuildingTypeEnum.Person:
                    baseBuilding = objItem.AddComponent <BuildingPerson>();
                    break;

                case BuildingTypeEnum.Obstacle:
                    baseBuilding = objItem.AddComponent <BuildingObstacle>();
                    break;

                default:
                    baseBuilding = objItem.AddComponent <BuildingBase>();
                    break;
                }
                baseBuilding.buildingInfo = buildingInfo;
            }

            callBack?.Invoke();
        });
    }
Пример #10
0
    /// <summary>
    /// 增加建筑
    /// </summary>
    /// <param name="addRate"></param>
    /// <param name="randomData"></param>
    /// <param name="startPosition"></param>
    /// <param name="buildingType"></param>
    public static bool AddBuilding(float addRate, uint randomData, Vector3Int startPosition, BuildingTypeEnum buildingType)
    {
        float randomRate;

        if (addRate < 0.00001f)
        {
            //概率小于万分之一的用RandomTools
            int         seed        = WorldCreateHandler.Instance.manager.GetWorldSeed();
            RandomTools randomTools = RandomUtil.GetRandom(seed, startPosition.x, startPosition.y, startPosition.z);
            //生成概率
            randomRate = randomTools.NextFloat();
        }
        else
        {
            randomRate = WorldRandTools.GetValue(startPosition, randomData);
        }
        if (randomRate < addRate)
        {
            BuildingInfoBean buildingInfo = BiomeHandler.Instance.manager.GetBuildingInfo(buildingType);

            List <BuildingBean> listBuildingData = buildingInfo.listBuildingData;

            int randomAngle = WorldRandTools.Range(0, 4, startPosition) * 90;

            for (int i = 0; i < listBuildingData.Count; i++)
            {
                BuildingBean buildingData   = listBuildingData[i];
                Vector3Int   targetPosition = startPosition + buildingData.GetPosition();
                float        createRate     = WorldRandTools.GetValue(targetPosition);

                if (buildingData.randomRate == 0 || createRate < buildingData.randomRate)
                {
                    VectorUtil.GetRotatedPosition(startPosition, targetPosition, new Vector3(0, randomAngle, 0));
                    WorldCreateHandler.Instance.manager.AddUpdateBlock(targetPosition, buildingData.blockId, (BlockDirectionEnum)buildingData.direction);
                }
            }
            return(true);
        }
        return(false);
    }
Пример #11
0
    public void GetBuildingData(BuildingInfoBean itemData)
    {
        GameObject          objBuilding      = GameObject.Find("Building");
        List <BuildingBean> listBuildingData = new List <BuildingBean>();

        for (int i = 0; i < objBuilding.transform.childCount; i++)
        {
            Transform      tfChild        = objBuilding.transform.GetChild(i);
            BuildingEditor buildingEditor = tfChild.GetComponent <BuildingEditor>();
            if (buildingEditor == null)
            {
                continue;
            }
            BuildingBean buildingData = new BuildingBean();
            buildingData.position   = Vector3Int.CeilToInt(tfChild.position);
            buildingData.direction  = (int)buildingEditor.direction;
            buildingData.blockId    = (int)buildingEditor.blockType;
            buildingData.randomRate = buildingEditor.randomRate;
            listBuildingData.Add(buildingData);
        }
        itemData.SetListBuildingData(listBuildingData);
    }
Пример #12
0
 /// <summary>
 /// 保存游戏数据
 /// </summary>
 /// <param name="data"></param>
 public void SetBuildingInfoData(BuildingInfoBean data)
 {
     serviceBuildingInfo.UpdateData(data);
 }