/// <summary>
 /// 作用:添加那地记录
 /// 作者:汪建龙
 /// 编写时间:2017年3月16日18:35:37
 /// </summary>
 /// <param name="landRecord"></param>
 /// <returns></returns>
 public int Save(LandRecord landRecord)
 {
     Db.LandRecords.Add(landRecord);
     Db.SaveChanges();
     Grade(landRecord, GradeAction.AddLandRecord);
     return(landRecord.ID);
 }
Example #2
0
 public ActionResult Create(LandRecord record)
 {
     if (record == null)
     {
         return(ErrorJsonResult("未获取违法用地信息"));
     }
     if (record.IllegalArea > record.Area)
     {
         return(ErrorJsonResult("违法用地面积大于合法用地面积,请核对"));
     }
     if (record.ID > 0)
     {
         if (!Core.LandRecordManager.Edit(record))
         {
             return(ErrorJsonResult("编辑更新违法用地信息失败"));
         }
     }
     else
     {
         var id = Core.LandRecordManager.Save(record);
         if (id <= 0)
         {
             return(ErrorJsonResult("保存违法用地信息失败"));
         }
     }
     return(SuccessJsonResult());
 }
 public void Grade(LandRecord record, GradeAction action)
 {
     if (record.SystemData == SystemData.Enterprise)
     {
         Core.EnterpriseManager.Grade(record.ELID, record.ID, action);
     }
     else if (record.SystemData == SystemData.Lawyer)
     {
         Core.LawyerManager.Grade(record.ELID, record.ID, action);
     }
 }
        /// <summary>
        /// 作用:编辑更新拿地记录
        /// 作者:汪建龙
        /// 编写时间:2017年3月16日18:35:58
        /// </summary>
        /// <param name="landRecord"></param>
        /// <returns></returns>
        public bool Edit(LandRecord landRecord)
        {
            var model = Db.LandRecords.Find(landRecord.ID);

            if (model == null)
            {
                return(false);
            }
            Db.Entry(model).CurrentValues.SetValues(landRecord);
            Db.SaveChanges();
            Grade(model, GradeAction.EditLandRecord);
            return(true);
        }
Example #5
0
    public static void Create(Vector2Int coordinates)
    {
        var record     = LandRecord.Get(coordinates);
        var gameObject = new GameObject(coordinates.ToString());

        gameObject.transform.position = new Vector3(coordinates.x * 8192, 0, coordinates.y * 8192);

        var meshFilter = gameObject.AddComponent <MeshFilter>();

        var meshRenderer = gameObject.AddComponent <MeshRenderer>();

        meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.TwoSided;
        meshRenderer.sharedMaterial    = new Material(MaterialManager.Instance.TerrainShader);
        meshRenderer.sharedMaterial.mainTextureScale = new Vector2(16, 16);

        // Generate the mesh
        int vertexStep = 8192 / 64;

        // Generate vertices and appropriate heights
        var vertices      = new Vector3[65 * 65];
        var uvs           = new Vector2[vertices.Length];
        var nextColHeight = record.HeightData.ReferenceHeight;

        var triangles = new int[64 * 64 * 6];

        for (int y = 0, i = 0; y < 65; y++)
        {
            var previousHeight = nextColHeight;
            for (var x = 0; x < 65; x++, i++)
            {
                var height = previousHeight + record.HeightData.HeightPoints[i];                 // this is the change in elevation from the previous (to the leftt) vertex, multiplied by 8

                if (x == 0)
                {
                    nextColHeight = height;
                }

                var vertex = new Vector3(x * vertexStep, height * 8, y * vertexStep);                 // Each vertex is 128 game-units apart
                vertices[i]    = vertex;
                previousHeight = height;

                // Generate UV too ( every 4 patches should be one UV)
                var uvX = Mathf.Lerp(1f / 18f, 1 - 1f / 18f, x / 64f);
                var uvY = Mathf.Lerp(1f / 18f, 1 - 1f / 18f, y / 64f);

                uvs[x + y * 65] = new Vector2(uvX, uvY);
            }
        }

        // Triangles
        // Needs to be seperate from previous loop
        for (int ti = 0, vi = 0, y = 0; y < 64; y++, vi++)
        {
            for (int x = 0; x < 64; x++, ti += 6, vi++)
            {
                triangles[ti]     = vi;
                triangles[ti + 3] = triangles[ti + 2] = vi + 1;
                triangles[ti + 4] = triangles[ti + 1] = vi + 64 + 1;
                triangles[ti + 5] = vi + 64 + 2;
            }
        }

        var normals = new Vector3[record.NormalData.Normals.Length / 3];

        for (var i = 0; i < normals.Length; i++)
        {
            normals[i] = new Vector3(record.NormalData.Normals[i * 3] / 128f, record.NormalData.Normals[i * 3 + 2] / 128f, record.NormalData.Normals[i * 3 + 1] / 128f);
        }

        var mesh = new Mesh
        {
            vertices  = vertices,
            triangles = triangles,
            uv        = uvs,
            normals   = normals,
            colors32  = record.ColorData.Colors
        };

        meshFilter.sharedMesh = mesh;

        // Now calculate vertex colors. Look at each "patch". if the neighbouring patch is a different texture, then set the alpha between the pixels to 0 or something

        // Remaining steps are for textures only
        if (record.TextureData == null)
        {
            return;
        }

        // Get the texturedata, and surrounding cells
        Directions cellDirections = 0;
        var        borderCells    = new TextureData[3, 3];

        for (var y = 0; y < 3; y++)
        {
            for (var x = 0; x < 3; x++)
            {
                var        xCoord     = coordinates.x + (x - 1);
                var        yCoord     = coordinates.y + (y - 1);
                var        coordinate = new Vector2Int(xCoord, yCoord);
                LandRecord landRecord;
                if (LandRecord.Records.TryGetValue(coordinate, out landRecord))
                {
                    borderCells[x, y] = landRecord.TextureData;
                    cellDirections   |= (Directions)(Mathf.Pow(2, x + y * 3));
                }
            }
        }

        // Don't do this inside the loop, silly
        var currentIndices = record.TextureData.TextureIndices;
        var borderIndices  = GetBorderIndices(cellDirections, borderCells);        // Get an 18x18 array, which includes the surrounding textures

        var control = new Texture2D(18, 18, TextureFormat.Alpha8, false, true)
        {
            filterMode = FilterMode.Point
        };

        for (var y = 0; y < control.height; y++)
        {
            for (var x = 0; x < control.width; x++)
            {
                var textureIndex = borderIndices[x, y];
                var color        = new Color32(0, 0, 0, (byte)textureIndex);
                control.SetPixel(x, y, color);
            }
        }

        control.Apply(false, true);

        meshRenderer.sharedMaterial.SetTexture("_MainTex", LandTextureRecord.GetTexture2DArray());
        meshRenderer.sharedMaterial.SetTexture("_Control", control);

        gameObject.AddComponent <MeshCollider>();
    }
Example #6
0
    public static void Create(BinaryReader reader)
    {
        var header = new RecordHeader(reader);

        switch (header.Type)
        {
        case RecordType.BirthSign:
            BirthSignRecord.Create(reader, header);
            break;

        case RecordType.BodyPart:
            BodyPartRecord.Create(reader, header);
            break;

        case RecordType.Cell:
            CellRecord.Create(reader, header);
            break;

        case RecordType.Dialogue:
            DialogRecord.Create(reader, header);
            break;

        case RecordType.GameSetting:
            GameSetting.Create(reader, header);
            break;

        case RecordType.Info:
            InfoRecord.Create(reader, header);
            break;

        case RecordType.Land:
            LandRecord.Create(reader, header);
            break;

        case RecordType.LandTexture:
            LandTextureRecord.Create(reader, header);
            break;

        case RecordType.MagicEffect:
            MagicEffectRecord.Create(reader, header);
            break;

        case RecordType.PathGrid:
            Pathgrid.Create(reader, header);
            break;

        case RecordType.Script:
            Script.Create(reader, header);
            break;

        case RecordType.Skill:
            SkillRecord.Create(reader, header);
            break;

        case RecordType.SoundGenerator:
            SoundGenerator.Create(reader, header);
            break;

        case RecordType.Tes3:
            Tes3Record.Create(reader, header);
            break;

        default:
        {
            var size = GotoSubrecord(SubRecordType.Id, header);
            var id   = reader.ReadString(size);
            reader.BaseStream.Position = header.DataOffset + header.DataSize;
            var recordData = CreateRecordData(header.Type);
            recordData.Header = header;
            Records.Add(id, recordData);
            break;
        }
        }
    }