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(); } }
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); }
/// <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(); }
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); }
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]); }
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); }
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; }
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)); } }
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 }
/// <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; //给渲染器赋予材质 }
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); } }
/// <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()); }
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); }
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); }
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); } }
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); }
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; }
/// <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; }
/// <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()); }
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(); } } }