Exemple #1
0
        private void Start()
        {
            if (cubePrefab == null)
            {
                throw new NullReferenceException();
            }

            _camera = Camera.main;
            {
                float height = 5f;
                var   water  = new GameObject("Screen water");
                float K      = 0.01f;

                float halfHeight = _camera.orthographicSize;
                float halfWidth  = halfHeight * Screen.width / Screen.height;

                float width = halfWidth * 2;


                var waterData = new WaterData(width, height, K);
                Factory <Water> .CreateInstance(water, waterData);

                water.transform.position = new Vector3(0, -2.5f);
            }
        }
        partial void ReadDamage(ESPReader reader)
        {
            var tag  = reader.ReadTag();
            var size = reader.ReadUInt16();

            reader.BaseStream.Seek(-6, SeekOrigin.Current);

            if (size == 2)
            {
                Damage = new SimpleSubrecord <ushort>();
                Damage.ReadBinary(reader);
            }
            else
            {
                Data = new WaterData();
                Data.ReadBinary(reader);
                Data.Tag = "DNAM";

                reader.BaseStream.Seek(-2, SeekOrigin.Current);

                Damage       = new SimpleSubrecord <ushort>();
                Damage.Tag   = "DATA";
                Damage.Value = reader.ReadUInt16();
            }
        }
Exemple #3
0
 public bool SendParameter(int shipId, string str)
 {
     string[] strs = str.Split('|');
     foreach (var item in strs)
     {
         waterdataEntities entity = new waterdataEntities();
         task      lasttask       = entity.task.Where(s => s.ship_id == shipId && s.route_id != null).OrderByDescending(s => s.create_time).First();
         ship      ship           = entity.ship.SingleOrDefault(s => s.ship_id == shipId);
         WaterData waterdata      = DataParse.dealSensorData(item);
         parameter parameter      = entity.parameter.SingleOrDefault(s => s.parameter_name == waterdata.ParameterName && s.company_id == ship.company_id);
         waterdata.ParameterId = parameter.parameter_id.ToString();
         waterdata.TaskId      = lasttask.task_id.ToString();
         water_data newdata = new water_data()
         {
             task_id         = Convert.ToInt32(waterdata.TaskId),
             parameter_id    = Convert.ToInt32(waterdata.ParameterId),
             parameter_value = Convert.ToDouble(waterdata.ParameterValue),
             longitude       = Convert.ToDouble(waterdata.Longitude),
             latitude        = Convert.ToDouble(waterdata.Latitude),
             create_time     = DateTime.Now
         };
         entity.water_data.Add(newdata);
         entity.SaveChanges();
     }
     return(true);
 }
Exemple #4
0
    /// <summary>
    /// 通过水体数据对象创建水体游戏对象
    /// </summary>
    /// <param name="waterData"></param>
    /// <returns></returns>
    public static Water CreateWaterGameObject(WaterData waterData)
    {
        Water water = Water.CreateWaterGameObject();

        water.waterData = waterData;
        water.BuildMaterial();
        return(water);
    }
    public WaterChunk(LODInfo[] lodInfo, WaterData waterData, Vector2Int chunkCoords, Material waterMaterial, Transform parent = null)
        : base(lodInfo, waterData.size, chunkCoords, waterData.waterLevelY, false, parent)
    {
        meshGameObject.layer = LayerMask.NameToLayer("Water");
        this.waterData       = waterData;

        meshRenderer.sharedMaterial = waterMaterial;
        meshGameObject.name         = "WaterChunk " + chunkCoords.ToString();
    }
Exemple #6
0
        public void Can_Deserialize_Water_Data_Json()
        {
            string content = SampleDataHelper.GetContent("GetWater-WaterData.json");

            var deserializer = new JsonDotNetSerializer();

            WaterData result = deserializer.Deserialize <WaterData>(content);

            ValidateWaterData(result);
        }
Exemple #7
0
 public Water()
 {
     EditorID      = new SimpleSubrecord <String>("EDID");
     NoiseMap      = new SimpleSubrecord <String>("NNAM");
     Opacity       = new SimpleSubrecord <Byte>("ANAM");
     WaterFlags    = new SimpleSubrecord <WaterFlags>("FNAM");
     MaterialID    = new SimpleSubrecord <String>("MNAM");
     Damage        = new SimpleSubrecord <UInt16>("DATA");
     Data          = new WaterData("DNAM");
     RelatedWaters = new RelatedWaters("GNAM");
 }
        public void FromOSD(OSD osd)
        {
            OSDArray array = osd as OSDArray;

            RegionID = (array[0] as OSDMap)["regionID"];
            Cycle = new DayCycle();
            Cycle.FromOSD(array);

            Water = new WaterData();
            Water.FromOSD(array[3]);
        }
Exemple #9
0
        public void FromOSD(OSD osd)
        {
            OSDArray array = osd as OSDArray;

            RegionID = (array[0] as OSDMap)["regionID"];
            Cycle    = new DayCycle();
            Cycle.FromOSD(array);

            Water = new WaterData();
            Water.FromOSD(array[3]);
        }
Exemple #10
0
        private void ValidateWaterData(WaterData result)
        {
            var firstWaterLog = result.Water.FirstOrDefault();

            Assert.IsNotNull(result);
            Assert.AreEqual(1300, result.Summary.Water);
            Assert.AreEqual(5, result.Water.Count);

            Assert.IsNotNull(firstWaterLog);
            Assert.AreEqual(200, firstWaterLog.Amount);
            Assert.AreEqual(508693835, firstWaterLog.LogId);
        }
        public static WorldObjectData GetData(string name)
        {
            WorldObjectData data = null;

            switch (name)
            {
            case "Person":
                data = new PersonData();
                break;

            case "Castle":
                data = new CastleData();
                break;

            case "Tree":
                data = new TreeData();
                break;

            case "Rock":
                data = new RockData();
                break;

            case "Trap":
                data = new TrapData();
                break;

            case "FakeTree":
                data = new FakeTreeData();
                break;

            case "Cottage":
                data = new CottageData();
                break;

            case "Candle":
                data = new CandleData();
                break;

            case "Water":
                data = new WaterData();
                break;

            case "Bridge":
                data = new BridgeData();
                break;

            default:
                break;
            }
            return(data);
        }
Exemple #12
0
 public void Destroy()
 {
     this.waterData.Release();
     this.waterData = null;
     this.uvs       = null;
     this.vertices  = null;
     this.normals   = null;
     this.triangles = null;
     this.waterRenderer.material = null;
     this.waterRenderer          = null;
     DelegateProxy.GameDestory(this.matrial);
     this.matrial = null;
     DelegateProxy.GameDestory(Water.mesh);
     Water.mesh = null;
 }
Exemple #13
0
            public static WaterData CreateCustom(MutagenFrame frame)
            {
                var subHeader = frame.GetSubrecord();

                if (subHeader.ContentLength == 2)
                {
                    return(new WaterData()
                    {
                        Versioning = WaterData.VersioningBreaks.Break0
                    });
                }
                else
                {
                    return(WaterData.CreateFromBinary(frame));
                }
            }
Exemple #14
0
        public void Retrieve_Water_For_User_On_Date()
        {
            DateTime  waterRecordDate = new DateTime(2014, 11, 17); //find a date you know your user has water logs
            WaterData waterData       = client.GetWater(waterRecordDate, Configuration.FitbitUserId);
            float     totalAmount     = waterData.Water.Sum(s => s.Amount);

            Assert.IsNotNull(waterData);

            Assert.IsNotNull(waterData.Summary);
            Assert.IsTrue(waterData.Summary.Water > 0);

            Assert.IsTrue(waterData.Water.First().Amount > 0);
            Assert.IsTrue(waterData.Water.Count > 0);              //make sure there is at least one water log

            Assert.AreEqual(totalAmount, waterData.Summary.Water); //total amount of water received is the sum of all logs
        }
Exemple #15
0
    /// <summary>
    /// 根据水体数据创建水体相关使用材质,这里似乎只有光照贴图材质??? 跟水体要毛关系啊??????
    /// </summary>
    /// <param name="waterData"></param>
    public void BuildMaterial(WaterData waterData = null)
    {
        if (LightmapSettings.lightmaps.Length > 0 || GameScene.isPlaying)          //有光照贴图
        {
            if (!this.terrainConfig.enablePointLight)
            {
                this.matrial = new Material(this.terrainMobileShader);
            }
            else
            {
                this.matrial = new Material(this.terrainMobileWithPointLightShader);
            }
        }
        else                                                                      //否则启用实时光照???
        {
            this.matrial = new Material(this.realLightShader);
        }
        Texture2D texture;

        if (GameScene.isPlaying)
        {
            texture = AssetLibrary.Load(this.splatsMapPath, AssetType.Texture2D, LoadType.Type_Auto).texture2D;
        }
        else
        {
            texture = this.terrainData.splatsmapTex;
        }
        this.matrial.SetTexture("_Control", texture);
        for (int i = 0; i < this.terrainData.spaltsmapLayers; i++)           //如果有splatmap,则添加
        {
            Splat splat = this.terrainData.splats[i];
            if (splat != null)
            {
                this.matrial.SetTexture("_Splat" + i, splat.texture);
                this.matrial.SetTextureScale("_Splat" + i, new Vector2(splat.tilingOffset.x, splat.tilingOffset.y));
                this.matrial.SetTextureOffset("_Splat" + i, Vector2.zero);
            }
            else
            {
                splat = this.terrainData.splats[0];
                this.matrial.SetTexture("_Splat" + i, this.terrainConfig.baseSplat.texture);
                this.matrial.SetTextureScale("_Splat" + i, new Vector2(splat.tilingOffset.x, splat.tilingOffset.y));
                this.matrial.SetTextureOffset("_Splat" + i, Vector2.zero);
            }
        }
        base.renderer.material = this.matrial;                               //给渲染器赋予材质
    }
Exemple #16
0
        public void Delete_Last_Water_For_User_On_Date()
        {
            var       logDate          = new DateTime(2014, 11, 17); //find a date you know your user has water logs
            WaterData initialWaterData = client.GetWater(logDate, Configuration.FitbitUserId);

            int initialWaterLogCount = initialWaterData.Water.Count;

            //we expect atleast one water log entry for this date
            long logId = initialWaterData.Water.OrderBy(s => s.LogId).Last().LogId;

            client.DeleteWaterLog(logId, Configuration.FitbitUserId);

            WaterData finalWaterData = client.GetWater(logDate, Configuration.FitbitUserId);

            //we expect to have 1 water log entry less than before the testrun
            Assert.AreEqual(initialWaterLogCount - 1, finalWaterData.Water.Count);
        }
        public byte[] GetDefaultAssetData(int type)
        {
            OSD osddata;

            switch (type)
            {
            case 0:
                SkyData sky = new SkyData();
                sky.Name = "DefaultSky";
                osddata  = sky.ToOSD();
                break;

            case 1:
                WaterData water = new WaterData();
                water.Name = "DefaultWater";
                osddata    = water.ToOSD();
                break;

            case 2:
                DayCycle day = new DayCycle();
                day.Name = "New Daycycle";
                DayCycle.TrackEntry te = new DayCycle.TrackEntry();

                WaterData dwater = new WaterData();
                dwater.Name = "DefaultWater";
                day.waterframes["DefaultWater"] = dwater;
                te.time      = 0;
                te.frameName = "DefaultWater";
                day.waterTrack.Add(te);

                SkyData dsky = new SkyData();
                dsky.Name = "DefaultSky";
                day.skyframes["DefaultSky"] = dsky;
                te.time      = 0;
                te.frameName = "DefaultSky";
                day.skyTrack0.Add(te);

                osddata = day.ToOSD();
                break;

            default:
                return(null);
            }
            return(OSDParser.SerializeLLSDNotationToBytes(osddata, true));
        }
 void Start()
 {
     if (autoLoadNextLevelAfter <= 0)
     {
         //Debug.Log("Auto Load Varible set to <= 0. Will not automatically proceed to next Scene in Build Order.");
         if (SceneManager.GetActiveScene().buildIndex == 0)
         {
             WaterData.LoadItemsData();
             EventData.LoadItemsData();
             PolicyData.LoadItemsData();
             GroupData.LoadItemsData();
         }
     }
     else
     {
         Invoke("LoadNextLevel", autoLoadNextLevelAfter);
     }
 }
Exemple #19
0
 /// <summary>
 /// 移除水体
 /// </summary>
 public void RemoveWater()
 {
     if (this.water != null)
     {
         if (GameScene.isPlaying)
         {
             DelegateProxy.GameDestory(this.water.gameObject);
         }
         else
         {
             DelegateProxy.DestroyObjectImmediate(this.water.gameObject);
         }
         this.water     = null;
         this.waterData = null;
         if (this.terrain != null)
         {
             this.terrain.hasWater = false;
             this.terrain.BuildMaterial(null);
         }
     }
 }
        public ActionResult <WaterData> CalculateWater([FromBody] WaterData data)
        {
            if (ModelState.IsValid)
            {
                int coef = 0;
                if (data.IsMale)
                {
                    coef = 27;
                }
                else
                {
                    coef = 24;
                }

                data.Water = (data.Weight * coef) + (data.Activity - 1) * 150;

                JavaScriptSerializer serializerJS = new JavaScriptSerializer();
                string response = serializerJS.Serialize(data);

                return(Ok(response));
            }

            return(BadRequest());
        }
Exemple #21
0
        public async Task GetWaterAsync_Success()
        {
            string content = SampleDataHelper.GetContent("GetWater-WaterData.json");

            Func <HttpResponseMessage> responseMessage = new Func <HttpResponseMessage>(() =>
            {
                return(new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(content)
                });
            });

            Action <HttpRequestMessage, CancellationToken> verification = new Action <HttpRequestMessage, CancellationToken>((message, token) =>
            {
                Assert.AreEqual(HttpMethod.Get, message.Method);
                Assert.AreEqual("https://api.fitbit.com/1/user/-/foods/log/water/date/2015-01-12.json", message.RequestUri.AbsoluteUri);
            });

            FitbitClient fitbitClient = Helper.CreateFitbitClient(responseMessage, verification);

            WaterData response = await fitbitClient.GetWaterAsync(new DateTime(2015, 1, 12));

            ValidateWaterData(response);
        }
Exemple #22
0
 private void LoadWater()
 {
     Debug.Log("Water Loaded: " + PlayerPrefsManager.GetYear());
     actualWaterArray = WaterData.GetItem(PlayerPrefsManager.GetYear().ToString());
 }
        private bool RayCheckTest()
        {
            var trackingCheckPosition = GetScope.Info.Position;

            if (System.Session.DebugLos && Target.Entity != null)
            {
                var      trackPos      = BarrelOrigin + (MyPivotFwd * MuzzleDistToBarrelCenter);
                var      targetTestPos = Target.Entity.PositionComp.WorldAABB.Center;
                var      topEntity     = Target.Entity.GetTopMostParent();
                IHitInfo hitInfo;
                if (System.Session.Physics.CastRay(trackPos, targetTestPos, out hitInfo) && hitInfo.HitEntity == topEntity)
                {
                    var    hitPos = hitInfo.Position;
                    double closestDist;
                    MyUtils.GetClosestPointOnLine(ref trackingCheckPosition, ref targetTestPos, ref hitPos, out closestDist);
                    var tDir       = Vector3D.Normalize(targetTestPos - trackingCheckPosition);
                    var closestPos = trackingCheckPosition + (tDir * closestDist);

                    var missAmount = Vector3D.Distance(hitPos, closestPos);
                    System.Session.Rays++;
                    System.Session.RayMissAmounts += missAmount;
                }
            }

            var tick         = Comp.Session.Tick;
            var masterWeapon = TrackTarget || Comp.TrackingWeapon == null ? this : Comp.TrackingWeapon;

            if (System.Values.HardPoint.Other.MuzzleCheck)
            {
                LastMuzzleCheck = tick;
                if (MuzzleHitSelf())
                {
                    masterWeapon.Target.Reset(Comp.Session.Tick, Target.States.RayCheckSelfHit, !Comp.FakeMode);
                    if (masterWeapon != this)
                    {
                        Target.Reset(Comp.Session.Tick, Target.States.RayCheckSelfHit, !Comp.FakeMode);
                    }
                    return(false);
                }
                if (tick - Comp.LastRayCastTick <= 29)
                {
                    return(true);
                }
            }

            if (Target.Entity is IMyCharacter && !Comp.Data.Repo.Base.Set.Overrides.Biologicals || Target.Entity is MyCubeBlock && !Comp.Data.Repo.Base.Set.Overrides.Grids)
            {
                masterWeapon.Target.Reset(Comp.Session.Tick, Target.States.RayCheckProjectile);
                if (masterWeapon != this)
                {
                    Target.Reset(Comp.Session.Tick, Target.States.RayCheckProjectile);
                }
                return(false);
            }

            Comp.LastRayCastTick = tick;

            if (Target.IsFakeTarget)
            {
                Casting = true;
                Comp.Session.Physics.CastRayParallel(ref trackingCheckPosition, ref Target.TargetPos, CollisionLayers.DefaultCollisionLayer, ManualShootRayCallBack);
                return(true);
            }

            if (Comp.FakeMode)
            {
                return(true);
            }


            if (Target.IsProjectile)
            {
                if (!Comp.Ai.LiveProjectile.Contains(Target.Projectile))
                {
                    masterWeapon.Target.Reset(Comp.Session.Tick, Target.States.RayCheckProjectile);
                    if (masterWeapon != this)
                    {
                        Target.Reset(Comp.Session.Tick, Target.States.RayCheckProjectile);
                    }
                    return(false);
                }
            }
            if (!Target.IsProjectile)
            {
                var character = Target.Entity as IMyCharacter;
                if ((Target.Entity == null || Target.Entity.MarkedForClose) || character != null && (character.IsDead || character.Integrity <= 0 || Comp.Session.AdminMap.ContainsKey(character)))
                {
                    masterWeapon.Target.Reset(Comp.Session.Tick, Target.States.RayCheckOther);
                    if (masterWeapon != this)
                    {
                        Target.Reset(Comp.Session.Tick, Target.States.RayCheckOther);
                    }
                    return(false);
                }

                var cube = Target.Entity as MyCubeBlock;
                if (cube != null && !cube.IsWorking && !Comp.Ai.Construct.Focus.EntityIsFocused(Comp.Ai, cube.CubeGrid))
                {
                    masterWeapon.Target.Reset(Comp.Session.Tick, Target.States.RayCheckDeadBlock);
                    if (masterWeapon != this)
                    {
                        Target.Reset(Comp.Session.Tick, Target.States.RayCheckDeadBlock);
                    }
                    FastTargetResetTick = System.Session.Tick;
                    return(false);
                }
                var topMostEnt = Target.Entity.GetTopMostParent();
                if (Target.TopEntityId != topMostEnt.EntityId || !Comp.Ai.Targets.ContainsKey(topMostEnt))
                {
                    masterWeapon.Target.Reset(Comp.Session.Tick, Target.States.RayCheckFailed);
                    if (masterWeapon != this)
                    {
                        Target.Reset(Comp.Session.Tick, Target.States.RayCheckFailed);
                    }
                    return(false);
                }
            }

            var targetPos       = Target.Projectile?.Position ?? Target.Entity?.PositionComp.WorldMatrixRef.Translation ?? Vector3D.Zero;
            var distToTargetSqr = Vector3D.DistanceSquared(targetPos, trackingCheckPosition);

            if (distToTargetSqr > MaxTargetDistanceSqr && distToTargetSqr < MinTargetDistanceSqr)
            {
                masterWeapon.Target.Reset(Comp.Session.Tick, Target.States.RayCheckDistExceeded);
                if (masterWeapon != this)
                {
                    Target.Reset(Comp.Session.Tick, Target.States.RayCheckDistExceeded);
                }
                return(false);
            }
            WaterData water = null;

            if (System.Session.WaterApiLoaded && !ActiveAmmoDef.AmmoDef.IgnoreWater && Comp.Ai.InPlanetGravity && Comp.Ai.MyPlanet != null && System.Session.WaterMap.TryGetValue(Comp.Ai.MyPlanet.EntityId, out water))
            {
                var waterSphere = new BoundingSphereD(Comp.Ai.MyPlanet.PositionComp.WorldAABB.Center, water.MinRadius);
                if (waterSphere.Contains(targetPos) != ContainmentType.Disjoint)
                {
                    masterWeapon.Target.Reset(Comp.Session.Tick, Target.States.RayCheckFailed);
                    if (masterWeapon != this)
                    {
                        Target.Reset(Comp.Session.Tick, Target.States.RayCheckFailed);
                    }
                    return(false);
                }
            }
            Casting = true;

            Comp.Session.Physics.CastRayParallel(ref trackingCheckPosition, ref targetPos, CollisionLayers.DefaultCollisionLayer, RayCallBack.NormalShootRayCallBack);
            return(true);
        }
Exemple #24
0
        public override void ReadDataXML(XElement ele, ElderScrollsPlugin master)
        {
            XElement subEle;

            if (ele.TryPathTo("EditorID", false, out subEle))
            {
                if (EditorID == null)
                {
                    EditorID = new SimpleSubrecord <String>();
                }

                EditorID.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("Name", false, out subEle))
            {
                if (Name == null)
                {
                    Name = new SimpleSubrecord <String>();
                }

                Name.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("NoiseMap", false, out subEle))
            {
                if (NoiseMap == null)
                {
                    NoiseMap = new SimpleSubrecord <String>();
                }

                NoiseMap.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("Opacity", false, out subEle))
            {
                if (Opacity == null)
                {
                    Opacity = new SimpleSubrecord <Byte>();
                }

                Opacity.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("WaterFlags", false, out subEle))
            {
                if (WaterFlags == null)
                {
                    WaterFlags = new SimpleSubrecord <WaterFlags>();
                }

                WaterFlags.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("MaterialID", false, out subEle))
            {
                if (MaterialID == null)
                {
                    MaterialID = new SimpleSubrecord <String>();
                }

                MaterialID.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("Sound", false, out subEle))
            {
                if (Sound == null)
                {
                    Sound = new RecordReference();
                }

                Sound.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("ActorEffect", false, out subEle))
            {
                if (ActorEffect == null)
                {
                    ActorEffect = new RecordReference();
                }

                ActorEffect.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("Damage", false, out subEle))
            {
                if (Damage == null)
                {
                    Damage = new SimpleSubrecord <UInt16>();
                }

                Damage.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("Data", false, out subEle))
            {
                if (Data == null)
                {
                    Data = new WaterData();
                }

                Data.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("RelatedWaters", false, out subEle))
            {
                if (RelatedWaters == null)
                {
                    RelatedWaters = new RelatedWaters();
                }

                RelatedWaters.ReadXML(subEle, master);
            }
        }
Exemple #25
0
        public static MeshGeometry3D GetModel(int[,] heightmap, int[,] midheightmap, PointData[,] areadata)
        {
            int    w = heightmap.GetLength(1), h = heightmap.GetLength(0), ws = w - 1, hs = h - 1;
            double bl = 1.0;

            WaterData[,] wlofpoint = new WaterData[h, w]; // 指示一个点的情况
            int[,] wlofarea        = new int[hs, ws];     // 指示一个区域的水平面高度
            bool[,] iswa           = new bool[hs, ws];    // 指示一个区域是否是水域
            Dictionary <int, int> pointtrans = new Dictionary <int, int> ();

            for (int i = 0; i < h; i++)
            {
                for (int j = 0; j < w; j++)
                {
                    wlofpoint[i, j].count = 0;
                    wlofpoint[i, j].value = 0;
                }
            }

            for (int i = 0; i < hs; i++)
            {
                for (int j = 0; j < ws; j++)
                {
                    if (areadata[i, j].AreaType != AreaType.land)
                    {
                        int wl = areadata[i, j].DeepOfWater + midheightmap[i, j];
                        iswa[i, j]     = true;
                        wlofarea[i, j] = wl;

                        wlofpoint[i, j].count++;
                        wlofpoint[i, j].value += wl;

                        wlofpoint[i, j + 1].count++;
                        wlofpoint[i, j + 1].value += wl;

                        wlofpoint[i + 1, j].count++;
                        wlofpoint[i + 1, j].value += wl;

                        wlofpoint[i + 1, j + 1].count++;
                        wlofpoint[i + 1, j + 1].value += wl;
                    }
                    else
                    {
                        iswa[i, j] = false;
                    }
                }
            }

            // 制作模型
            MeshGeometry3D    fbx    = new MeshGeometry3D();
            Point3DCollection points = new Point3DCollection();
            Int32Collection   sjxs   = new Int32Collection();
            int t       = w * 2 - 1;
            int pointid = 0;

            for (int i = 0; i < hs; i++)
            {
                for (int j = 0; j < ws; j++)
                {
                    if (iswa[i, j])
                    {
                        int pid, p1id, p2id, p3id, p4id, p5id;
                        // lt 1
                        pid = i * t + j;
                        if (!pointtrans.ContainsKey(pid))
                        {
                            pointtrans[pid] = pointid;
                            points.Add(new Point3D(j * 2, wlofpoint[i, j].value * bl / wlofpoint[i, j].count, i * 2));
                            p1id = pointid;
                            pointid++;
                        }
                        else
                        {
                            p1id = pointtrans[pid];
                        }

                        // rt 2
                        pid++;
                        if (!pointtrans.ContainsKey(pid))
                        {
                            pointtrans[pid] = pointid;
                            points.Add(new Point3D((j + 1) * 2, wlofpoint[i, j + 1].value * bl / wlofpoint[i, j + 1].count, i * 2));
                            p2id = pointid;
                            pointid++;
                        }
                        else
                        {
                            p2id = pointtrans[pid];
                        }

                        // lb 4
                        pid = (i + 1) * t + j;
                        if (!pointtrans.ContainsKey(pid))
                        {
                            pointtrans[pid] = pointid;
                            points.Add(new Point3D(j * 2, wlofpoint[i + 1, j].value * bl / wlofpoint[i + 1, j].count, (i + 1) * 2));
                            p4id = pointid;
                            pointid++;
                        }
                        else
                        {
                            p4id = pointtrans[pid];
                        }

                        // rb 3
                        pid++;
                        if (!pointtrans.ContainsKey(pid))
                        {
                            pointtrans[pid] = pointid;
                            points.Add(new Point3D((j + 1) * 2, wlofpoint[i + 1, j + 1].value * bl / wlofpoint[i + 1, j + 1].count, (i + 1) * 2));
                            p3id = pointid;
                            pointid++;
                        }
                        else
                        {
                            p3id = pointtrans[pid];
                        }

                        // c 5
                        pid = i * t + w + j;
                        if (!pointtrans.ContainsKey(pid))
                        {
                            pointtrans[pid] = pointid;
                            points.Add(new Point3D(j * 2 + 1, (areadata[i, j].DeepOfWater + midheightmap[i, j]) * bl, i * 2 + 1));
                            p5id = pointid;
                            pointid++;
                        }
                        else
                        {
                            p5id = pointtrans[pid];
                        }

                        sjxs.Add(p2id);
                        sjxs.Add(p1id);
                        sjxs.Add(p5id);

                        sjxs.Add(p3id);
                        sjxs.Add(p2id);
                        sjxs.Add(p5id);

                        sjxs.Add(p4id);
                        sjxs.Add(p3id);
                        sjxs.Add(p5id);

                        sjxs.Add(p1id);
                        sjxs.Add(p4id);
                        sjxs.Add(p5id);
                    }
                    else
                    {
                        iswa[i, j] = false;
                    }
                }
            }

            fbx.Positions       = points;
            fbx.TriangleIndices = sjxs;

            return(fbx);
        }
Exemple #26
0
 public Water(SimpleSubrecord <String> EditorID, SimpleSubrecord <String> Name, SimpleSubrecord <String> NoiseMap, SimpleSubrecord <Byte> Opacity, SimpleSubrecord <WaterFlags> WaterFlags, SimpleSubrecord <String> MaterialID, RecordReference Sound, RecordReference ActorEffect, SimpleSubrecord <UInt16> Damage, WaterData Data, RelatedWaters RelatedWaters)
 {
     this.EditorID      = EditorID;
     this.NoiseMap      = NoiseMap;
     this.Opacity       = Opacity;
     this.WaterFlags    = WaterFlags;
     this.MaterialID    = MaterialID;
     this.Damage        = Damage;
     this.Data          = Data;
     this.RelatedWaters = RelatedWaters;
 }
 public WaterChangeEventArgs(WaterData newWater, WaterData oldWater)
 {
     this.NewWater = newWater;
     this.OldWater = oldWater;
 }
Exemple #28
0
 /// <summary>
 /// 销毁回收
 /// </summary>
 public void Destroy()
 {
     if (GameScene.isPlaying)
     {
         if (this.waterData != null)
         {
             this.waterData.Release();
         }
         if (this.terrain != null)
         {
             this.terrain.Destroy();
             DelegateProxy.GameDestory(this.terrain);
             DelegateProxy.GameDestory(this.terrain.gameObject);
             this.terrain = null;
         }
         if (this.water != null)
         {
             this.water.Destroy();
             DelegateProxy.GameDestory(this.water);
             DelegateProxy.GameDestory(this.water.gameObject);
             this.water = null;
         }
     }
     else
     {
         if (this.terrain != null)
         {
             DelegateProxy.DestroyObjectImmediate(this.terrain.gameObject);
         }
         if (this.water != null)
         {
             DelegateProxy.DestroyObjectImmediate(this.water.gameObject);
         }
     }
     //同时销毁tile上的(静态)unit
     if (this.units != null)
     {
         while (this.units.Count > 0)
         {
             GameObjectUnit gameObjectUnit = this.units[0];
             //进行destory,放入cache待重用
             if (this.scene.ContainUnit(gameObjectUnit))
             {
                 this.scene.RemoveUnit(gameObjectUnit, true, true);
             }
             else
             {
                 //场景不包含的unit,销毁,并加入静态缓存待重用
                 gameObjectUnit.Destroy();
                 this.scene.RemoveEmptyUnit(gameObjectUnit);
             }
         }
         this.units.Clear();
         this.units = null;
         this.unitsMap.Clear();
         this.unitsMap = null;
     }
     this.left               = null;
     this.right              = null;
     this.top                = null;
     this.bot                = null;
     this.top_left           = null;
     this.top_right          = null;
     this.bot_left           = null;
     this.bot_right          = null;
     this.region             = null;
     this.scene              = null;
     this._lightmapPrototype = null;
     this.waterData          = null;
     this.heights            = new float[0, 0];
     this.grids              = new int[0, 0];
     this.heights            = null;
     this.grids              = null;
 }
Exemple #29
0
    /// <summary>
    /// 读取瓦片数据信息
    /// </summary>
    /// <param name="br"></param>
    public void Read(BinaryReader br)
    {
        TerrainConfig terrainConfig = this.region.scene.terrainConfig;

        this.tileX = br.ReadInt32();
        this.tileY = br.ReadInt32();
        this.key   = string.Concat(new object[]
        {
            this.region.regionX,
            "_",
            this.region.regionY,
            "_",
            this.tileX,
            "_",
            this.tileY
        });
        this.far = terrainConfig.tileCullingDistance;
        br.ReadSingle();
        br.ReadSingle();
        br.ReadSingle();
        bool flag = br.ReadBoolean();
        long num  = br.BaseStream.Position;
        int  num2 = terrainConfig.heightmapResolution;

        if (br.ReadInt32() == 10001)
        {
            num2 = terrainConfig.heightmapResolution;
        }
        else
        {
            num2 = terrainConfig.heightmapResolution + 1;
            br.BaseStream.Position = num;
        }
        if (GameScene.isPlaying)
        {
            br.BaseStream.Position += 8196L;
        }
        else
        {
            if (flag)
            {
                for (int i = 0; i < num2; i++)
                {
                    for (int j = 0; j < num2; j++)
                    {
                        this.heights       = new float[num2, num2];
                        this.heights[j, i] = br.ReadSingle();
                    }
                }
            }
            num = br.BaseStream.Position;
            if (br.ReadInt32() == 10002)
            {
                for (int i = 0; i < num2; i++)
                {
                    for (int j = 0; j < num2; j++)
                    {
                        this.grids       = new int[num2, num2];
                        this.grids[j, i] = br.ReadInt32();
                    }
                }
            }
            else
            {
                br.BaseStream.Position = num;
            }
        }
        this.position.x = (float)(this.tileX * terrainConfig.tileSize) + this.region.actualX;
        this.position.y = terrainConfig.defaultTerrainHeight;
        this.position.z = (float)(this.tileY * terrainConfig.tileSize) + this.region.actualY;
        int num3 = br.ReadInt32();
        int num4 = 0;

        if (num3 > 0)
        {
            //循环读取unit对象
            while (br.ReadString() == "GameObject")
            {
                int            num5           = br.ReadInt32();
                GameObjectUnit gameObjectUnit = null;
                if (this.scene.curSceneUnitsMap.ContainsKey(num5))
                {
                    gameObjectUnit = this.scene.curSceneUnitsMap[num5];
                }
                if (gameObjectUnit == null)
                {
                    gameObjectUnit = this.scene.CreateEmptyUnit(num5);
                }
                gameObjectUnit.scene = this.region.scene;
                gameObjectUnit.Read(br, num5);
                if (GameScene.SampleMode)
                {
                    this.AddUnit(gameObjectUnit);
                    gameObjectUnit.tiles.Add(this);
                    if (!this.scene.curSceneUnitsMap.ContainsKey(num5))
                    {
                        this.scene.curSceneUnitsMap.Add(num5, gameObjectUnit);
                    }
                }
                else if ((gameObjectUnit.combineParentUnitID < 0 && gameObjectUnit.type != UnitType.UnitType_Light) || !GameScene.isPlaying)
                {
                    this.AddUnit(gameObjectUnit);
                    gameObjectUnit.tiles.Add(this);
                    if (!this.scene.curSceneUnitsMap.ContainsKey(num5))
                    {
                        this.scene.curSceneUnitsMap.Add(num5, gameObjectUnit);
                    }
                }
                else if (gameObjectUnit != null)
                {
                    gameObjectUnit.Destroy();
                    this.scene.RemoveEmptyUnit(gameObjectUnit);
                }
                //将unit,tile,scene关联映射
                num4++;
                if (num4 >= num3)
                {
                    break;
                }
            }
        }
        //读取水体数据
        if (br.BaseStream.Position < br.BaseStream.Length)
        {
            num = br.BaseStream.Position;
            if (br.ReadInt32() == 10011)
            {
                if (br.ReadInt32() == 1)
                {
                    this.waterData = new WaterData();
                    this.waterData.Read(br);
                }
            }
            else
            {
                br.BaseStream.Position = num;
            }
        }
        //读取光照贴图原型数据属性
        bool flag2 = br.ReadBoolean();

        if (flag2)
        {
            this._lightmapPrototype.lightmapIndex = br.ReadInt32();
            num = br.BaseStream.Position;
            if (br.ReadInt32() == 10007)
            {
                this._lightmapPrototype.scale = br.ReadSingle();
            }
            else
            {
                br.BaseStream.Position = num;
            }
            this._lightmapPrototype.lightmapTilingOffset.x = br.ReadSingle();
            this._lightmapPrototype.lightmapTilingOffset.y = br.ReadSingle();
            this._lightmapPrototype.lightmapTilingOffset.z = br.ReadSingle();
            this._lightmapPrototype.lightmapTilingOffset.w = br.ReadSingle();
        }
        //瓦片包围盒
        this.bounds     = default(Bounds);
        this.bounds.min = new Vector3(this.position.x - (float)terrainConfig.tileSize * 0.5f, 0f, this.position.z - (float)terrainConfig.tileSize * 0.5f);
        this.bounds.max = new Vector3(this.position.x + (float)terrainConfig.tileSize * 0.5f, 300f, this.position.z + (float)terrainConfig.tileSize * 0.5f);
        //tile资源路径
        this.path = string.Concat(new object[]
        {
            "Scenes/",
            this.region.scene.sceneID,
            "/",
            this.region.regionX,
            "_",
            this.region.regionY,
            "/",
            this.tileX,
            "_",
            this.tileY
        });
    }
 private void LoadWater()
 {
     actualWaterArray = WaterData.GetItem(PlayerPrefsManager.GetYear().ToString());
 }
Exemple #31
0
        public override void ReadData(ESPReader reader, long dataEnd)
        {
            while (reader.BaseStream.Position < dataEnd)
            {
                string subTag = reader.PeekTag();

                switch (subTag)
                {
                case "EDID":
                    if (EditorID == null)
                    {
                        EditorID = new SimpleSubrecord <String>();
                    }

                    EditorID.ReadBinary(reader);
                    break;

                case "FULL":
                    if (Name == null)
                    {
                        Name = new SimpleSubrecord <String>();
                    }

                    Name.ReadBinary(reader);
                    break;

                case "NNAM":
                    if (NoiseMap == null)
                    {
                        NoiseMap = new SimpleSubrecord <String>();
                    }

                    NoiseMap.ReadBinary(reader);
                    break;

                case "ANAM":
                    if (Opacity == null)
                    {
                        Opacity = new SimpleSubrecord <Byte>();
                    }

                    Opacity.ReadBinary(reader);
                    break;

                case "FNAM":
                    if (WaterFlags == null)
                    {
                        WaterFlags = new SimpleSubrecord <WaterFlags>();
                    }

                    WaterFlags.ReadBinary(reader);
                    break;

                case "MNAM":
                    if (MaterialID == null)
                    {
                        MaterialID = new SimpleSubrecord <String>();
                    }

                    MaterialID.ReadBinary(reader);
                    break;

                case "SNAM":
                    if (Sound == null)
                    {
                        Sound = new RecordReference();
                    }

                    Sound.ReadBinary(reader);
                    break;

                case "XNAM":
                    if (ActorEffect == null)
                    {
                        ActorEffect = new RecordReference();
                    }

                    ActorEffect.ReadBinary(reader);
                    break;

                case "DATA":
                    ReadDamage(reader);
                    break;

                case "DNAM":
                    if (Data == null)
                    {
                        Data = new WaterData();
                    }

                    Data.ReadBinary(reader);
                    break;

                case "GNAM":
                    if (RelatedWaters == null)
                    {
                        RelatedWaters = new RelatedWaters();
                    }

                    RelatedWaters.ReadBinary(reader);
                    break;

                default:
                    throw new Exception();
                }
            }
        }