private void UpdateTexture(EvaluationContext context) { Size2 size = Size.GetValue(context); if (size.Height <= 0 || size.Width <= 0) { Log.Warning($"Requested invalid texture resolution: {size}"); return; } var texDesc = new Texture2DDescription { Width = size.Width, Height = size.Height, MipLevels = MipLevels.GetValue(context), ArraySize = ArraySize.GetValue(context), Format = Format.GetValue(context), //SampleDescription = SampleDescription.GetValue(context), SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.GetValue(context), BindFlags = BindFlags.GetValue(context), CpuAccessFlags = CpuAccessFlags.GetValue(context), OptionFlags = ResourceOptionFlags.GetValue(context) }; try { ResourceManager.Instance().CreateTexture2d(texDesc, "Texture2D", ref _textureResId, ref Texture.Value); } catch (Exception e) { Log.Error($"Failed to create Texture2D: {e.Message}", SymbolChildId); } //ResourceManager.Instance().id .TestId = _textureResId; }
public void Construct(CommonTree syntaxArrayInitializer) { var simpleReturnType = TreeHelper.GetReturnType(syntaxArrayInitializer.GetChild(0).Text); ReturnType = ReturnType.ArrayOf(simpleReturnType); //ArraySize var syntaxArraySize = syntaxArrayInitializer.GetChild(1).CastTo <CommonTree>(); if (syntaxArraySize.ChildCount > 0) { var syntaxArraySizeExpression = syntaxArraySize.GetChild(0).CastTo <CommonTree>(); ArraySize = TreeHelper.GetExpression(this, Scope, syntaxArraySizeExpression); ArraySize.Construct(syntaxArraySizeExpression); } //ArrayInitializationParameters var syntaxArrayInitializationParameters = syntaxArrayInitializer.GetChild(2).CastTo <CommonTree>(); if (syntaxArrayInitializationParameters.ChildCount > 0) { syntaxArrayInitializationParameters.Children.Cast <CommonTree>() .ForEach(syntaxArrayInitializationParameter => { var parameterExpression = TreeHelper.GetExpression(this, Scope, syntaxArrayInitializationParameter); InitializationParameters.Add(parameterExpression); parameterExpression.Construct(syntaxArrayInitializationParameter); }); } }
void FillData(ref MyGPUEmitter emitter) { float time; MyAnimatedPropertyVector4 color; MyAnimatedPropertyFloat radius; Color.GetKey(0, out time, out color); Radius.GetKey(0, out time, out radius); // sparks emitter.GID = m_renderId; emitter.ParticlesPerSecond = (Enabled.GetValue <bool>() && !m_effect.IsStopped) ? ParticlesPerSecond : 0; color.GetKey(0, out time, out emitter.Data.Color0); color.GetKey(1, out emitter.Data.ColorKey1, out emitter.Data.Color1); color.GetKey(2, out emitter.Data.ColorKey2, out emitter.Data.Color2); color.GetKey(3, out time, out emitter.Data.Color3); emitter.Data.AlphaKey1 = emitter.Data.ColorKey1; emitter.Data.AlphaKey2 = emitter.Data.ColorKey2; emitter.Data.Bounciness = Bounciness; emitter.Data.Velocity = Velocity; emitter.Data.VelocityVariance = VelocityVar; emitter.Data.NumParticlesToEmitThisFrame = 0; emitter.Data.ParticleLifeSpan = Life; radius.GetKey(0, out time, out emitter.Data.Size0); radius.GetKey(1, out emitter.Data.SizeKeys1, out emitter.Data.Size1); radius.GetKey(2, out emitter.Data.SizeKeys2, out emitter.Data.Size2); radius.GetKey(3, out time, out emitter.Data.Size3); emitter.Data.PositionVariance = PositionVar; emitter.Data.RotationVelocity = RotationVelocity; emitter.Data.Acceleration = Acceleration; emitter.Data.StreakMultiplier = StreakMultiplier; GPUEmitterFlags flags = 0; flags |= Streaks ? GPUEmitterFlags.Streaks : 0; flags |= Collide ? GPUEmitterFlags.Collide : 0; flags |= SleepState ? GPUEmitterFlags.SleepState : 0; flags |= Light ? GPUEmitterFlags.Light : 0; flags |= VolumetricLight ? GPUEmitterFlags.VolumetricLight : 0; emitter.Data.Flags = flags; emitter.Data.SoftParticleDistanceScale = SoftParticleDistanceScale; emitter.Data.AnimationFrameTime = AnimationFrameTime; emitter.Data.OITWeightFactor = OITWeightFactor; emitter.AtlasTexture = (Material.GetValue <MyTransparentMaterial>()).Texture; emitter.AtlasDimension = new Vector2I((int)ArraySize.GetValue <Vector3>().X, (int)ArraySize.GetValue <Vector3>().Y); emitter.AtlasFrameOffset = ArrayOffset; emitter.AtlasFrameModulo = ArrayModulo; emitter.WorldPosition = m_effect.WorldMatrix.Translation; }
public void InitDefault() { ArraySize.SetValue(Vector3.One); ArrayModulo.SetValue(1); var colorAnim = new MyAnimatedPropertyVector4(); colorAnim.AddKey(0, Vector4.One); colorAnim.AddKey(0.33f, Vector4.One); colorAnim.AddKey(0.66f, Vector4.One); colorAnim.AddKey(1, Vector4.One); Color.AddKey(0, colorAnim); var colorIntensityAnim = new MyAnimatedPropertyFloat(); colorIntensityAnim.AddKey(0, 1.0f); colorIntensityAnim.AddKey(0.33f, 1.0f); colorIntensityAnim.AddKey(0.66f, 1.0f); colorIntensityAnim.AddKey(1, 1.0f); ColorIntensity.AddKey(0, colorIntensityAnim); Offset.SetValue(new Vector3(0, 0, 0)); Direction.SetValue(new Vector3(0, 0, -1)); var radiusAnim = new MyAnimatedPropertyFloat(); radiusAnim.AddKey(0, 0.1f); radiusAnim.AddKey(0.33f, 0.1f); radiusAnim.AddKey(0.66f, 0.1f); radiusAnim.AddKey(1, 0.1f); Radius.AddKey(0, radiusAnim); Life.SetValue(1); StreakMultiplier.SetValue(4); AnimationFrameTime.SetValue(1); Enabled.SetValue(true); EmitterSize.AddKey(0, new Vector3(0.0f, 0.0f, 0.0f)); EmitterSizeMin.AddKey(0, 0.0f); DirectionCone.AddKey(0, 0.0f); DirectionConeVar.AddKey(0, 0.0f); Velocity.AddKey(0, 1.0f); VelocityVar.AddKey(0, 0.0f); ParticlesPerSecond.AddKey(0, 1000.0f); Material.SetValue(MyTransparentMaterials.GetMaterial("WhiteBlock")); SoftParticleDistanceScale.SetValue(1); Bounciness.SetValue(0.5f); ColorVar.SetValue(0); HueVar.SetValue(0); OITWeightFactor.SetValue(1f); TargetCoverage.SetValue(1f); }
public ArrayType(ArrayType type) : base(type) { QualifiedType = new QualifiedType((Type)type.QualifiedType.Type.Clone(), type.QualifiedType.Qualifiers); SizeType = type.SizeType; Size = type.Size; }
public void WriteParams(System.Xml.XmlWriter writer, Dictionary <HavokClassNode, int> classNodes) { writer.WriteStartElement("hkobject"); { writer.WriteStartElement("hkparam"); writer.WriteAttributeString("name", "name"); writer.WriteString(Name); writer.WriteEndElement(); HavokClassNode c = String.IsNullOrEmpty(_class) ? null : HavokNode.GetClassNode(_class); writer.WriteStartElement("hkparam"); writer.WriteAttributeString("name", "class"); writer.WriteString(c != null ? HavokXML.GetObjectName(classNodes, c) : "null"); writer.WriteEndElement(); HavokClassNode e = String.IsNullOrEmpty(_enum) ? null : HavokNode.GetClassNode(_enum); writer.WriteStartElement("hkparam"); writer.WriteAttributeString("name", "enum"); writer.WriteString(e != null ? HavokXML.GetObjectName(classNodes, e) : "null"); writer.WriteEndElement(); writer.WriteStartElement("hkparam"); writer.WriteAttributeString("name", "type"); string type = Type.ToString(); if (type == "TYPE_CSTRING") { type = "TYPE_STRINGPTR"; } writer.WriteString(type); writer.WriteEndElement(); writer.WriteStartElement("hkparam"); writer.WriteAttributeString("name", "subtype"); writer.WriteString(SubType.ToString()); writer.WriteEndElement(); writer.WriteStartElement("hkparam"); writer.WriteAttributeString("name", "cArraySize"); writer.WriteString(ArraySize.ToString(CultureInfo.InvariantCulture)); writer.WriteEndElement(); writer.WriteStartElement("hkparam"); writer.WriteAttributeString("name", "flags"); writer.WriteString(((int)Flags).ToString(CultureInfo.InvariantCulture)); writer.WriteEndElement(); writer.WriteStartElement("hkparam"); writer.WriteAttributeString("name", "offset"); writer.WriteString(OffsetInStruct.ToString(CultureInfo.InvariantCulture)); writer.WriteEndElement(); writer.WriteComment(" attributes SERIALIZE_IGNORED "); } writer.WriteEndElement(); }
private string[] GetItems() { itemBuffer[0] = InputType.ToString(); itemBuffer[1] = ArraySize.ToString(); itemBuffer[2] = IsSorted.ToString(); itemBuffer[3] = SortType.ToString(); itemBuffer[4] = Algorithm; itemBuffer[5] = IndexAccessCount.ToString(); itemBuffer[6] = CompareCount.ToString(); itemBuffer[7] = SwapCount.ToString(); return(itemBuffer); }
public Array <float> GetFloatMap(ArraySize size, int octaveCount) { var noise = new Array <float>(size); for (int z = size.minZ; z < size.maxZ; z += size.scale) { for (int x = size.minX; x < size.maxX; x += size.scale) { double height = OctavePerlin(noise.Size, x, 1, z, octaveCount, 0.5); noise.Set(x, z, (float)(height * size.maxY)); } } return(noise); }
public Array <int> GetIntMap(ArraySize size, int octaveCount = 3, double persistence = 0.5) { var noise = new Array <int>(size); for (int z = size.minZ; z < size.maxZ; z += size.scale) { for (int x = size.minX; x < size.maxX; x += size.scale) { double height = OctavePerlin(size, x, 1, z, octaveCount, persistence); noise.Set(x, z, (int)(height * size.maxY)); } } return(noise); }
public Array <byte> GenerateGlobalMap() { Log.WriteInfo("Generating global map"); var worldSize = new ArraySize() { minZ = 0, maxZ = Settings.globalMapSize + Global.CHUNK_SIZE, minX = 0, maxX = Settings.globalMapSize + Global.CHUNK_SIZE, minY = Settings.minNoiseHeight, maxY = Settings.maxNoiseHeight, scale = Global.CHUNK_SIZE, }; var halfscale = worldSize.scale / 2; var heightMap = new Array <byte>(worldSize); for (int z = worldSize.minZ; z < worldSize.maxZ - worldSize.scale; z += worldSize.scale) { for (int x = worldSize.minX; x < worldSize.maxX - worldSize.scale; x += worldSize.scale) { int d = worldSize.maxY; int y = d / 2; while (d > 1) { d /= 2; //var p = terrainGenerator.get ((double)x / Settings.FRACTAL_SIZE, (double)y / Settings.maxNoiseHeight, (double)z / Settings.FRACTAL_SIZE); var block = GenerateCell(x + halfscale, y, z + halfscale); if (block.IsTransparent) { y -= d; } else { y += d; } } if (y < worldSize.minY) { y = worldSize.minY; } if (y > worldSize.maxY) { y = worldSize.maxY; } heightMap[x, z] = (byte)y; } } return(heightMap); }
private void ProcessMessage(Guid clientId, Message msg) { try { //Console.WriteLine ($"Processing response... {msg.ToString ()}"); if (msg.Map != null) { var position = msg.Map.MinPosition; var coords = new ChunkCoords(position); var chunk = Sean.Shared.Chunk.Deserialize(coords, msg.Data); MapManager.AddChunk(coords, chunk); } if (msg.WorldMapResponse != null) { var size = new ArraySize() { scale = msg.WorldMapResponse.Scale, minX = msg.WorldMapResponse.MinPosition.X, minY = msg.WorldMapResponse.MinPosition.Y, minZ = msg.WorldMapResponse.MinPosition.Z, maxX = msg.WorldMapResponse.MaxPosition.X, maxY = msg.WorldMapResponse.MaxPosition.Y, maxZ = msg.WorldMapResponse.MaxPosition.Z, }; var map = new Array <byte>(size); map.DeSerialize(msg.Data); if (msg.WorldMapResponse.MapRequestType == Sean.Shared.Comms.MapRequestType.HeightMap) { MapManager.SetWorldMapHeight(map); } else if (msg.WorldMapResponse.MapRequestType == Sean.Shared.Comms.MapRequestType.Terrain) { MapManager.SetWorldMapTerrain(map); } } if (msg.MapCharacterUpdate != null) { CharacterManager.UpdateLocation(msg.MapCharacterUpdate.CharacterId, msg.MapCharacterUpdate.Position); } if (msg.MapUpdate != null) { MapManager.SetBlock(msg.MapUpdate.Position, msg.MapUpdate.NewBlock); } } catch (Exception e) { Console.WriteLine("Exception caught in ProcessMessage - {0}", e.ToString()); } }
public double OctavePerlin(ArraySize size, int x, int y, int z, int octaves, double persistence) { double xf = (double)x / PerlinUnitSize; double yf = 0.0; double zf = (double)z / PerlinUnitSize; double total = 0; int frequency = 1; double amplitude = 1; double maxValue = 0; // Used for normalizing result to 0.0 - 1.0 for (int i = 0; i < octaves; i++) { total += Perlin(xf * frequency, yf * frequency, zf * frequency, i) * amplitude; maxValue += amplitude; amplitude *= persistence; frequency *= 2; } return(total / maxValue); }
public void InitDefault() { ArraySize.SetValue(Vector3.One); ArrayModulo.SetValue(1); var colorAnim = new MyAnimatedPropertyVector4(); colorAnim.AddKey(0, Vector4.One); colorAnim.AddKey(0.33f, Vector4.One); colorAnim.AddKey(0.66f, Vector4.One); colorAnim.AddKey(1, Vector4.One); Color.AddKey(0, colorAnim); Velocity.SetValue(new Vector3(0, 0, -1)); var radiusAnim = new MyAnimatedPropertyFloat(); radiusAnim.AddKey(0, 0.1f); radiusAnim.AddKey(0.33f, 0.1f); radiusAnim.AddKey(0.66f, 0.1f); radiusAnim.AddKey(1, 0.1f); Radius.AddKey(0, radiusAnim); Life.SetValue(1); StreakMultiplier.SetValue(4); AnimationFrameTime.SetValue(1); Enabled.SetValue(true); ParticlesPerSecond.SetValue(30000); Material.SetValue(MyTransparentMaterials.GetMaterial("WhiteBlock")); SoftParticleDistanceScale.SetValue(1); Bounciness.SetValue(0.5f); OITWeightFactor.SetValue(1f); }
void FillDataComplete(ref MyGPUEmitter emitter) { float time; m_animatedTimeValues = Velocity.GetKeysCount() > 1 || VelocityVar.GetKeysCount() > 1 || DirectionCone.GetKeysCount() > 1 || DirectionConeVar.GetKeysCount() > 1 || EmitterSize.GetKeysCount() > 1 || EmitterSizeMin.GetKeysCount() > 1; MyAnimatedPropertyVector4 color; Color.GetKey(0, out time, out color); color.GetKey(0, out time, out emitter.Data.Color0); color.GetKey(1, out emitter.Data.ColorKey1, out emitter.Data.Color1); color.GetKey(2, out emitter.Data.ColorKey2, out emitter.Data.Color2); color.GetKey(3, out time, out emitter.Data.Color3); m_currentParticlesPerSecond = GetParticlesPerSecond(); emitter.ParticlesPerSecond = m_show ? m_currentParticlesPerSecond : 0; // unmultiply colors and factor by intensity MyAnimatedPropertyFloat colorIntensity; float intensity; ColorIntensity.GetKey(0, out time, out colorIntensity); colorIntensity.GetInterpolatedValue <float>(0, out intensity); emitter.Data.Color0.X *= intensity; emitter.Data.Color0.Y *= intensity; emitter.Data.Color0.Z *= intensity; colorIntensity.GetInterpolatedValue <float>(emitter.Data.ColorKey1, out intensity); emitter.Data.Color1.X *= intensity; emitter.Data.Color1.Y *= intensity; emitter.Data.Color1.Z *= intensity; colorIntensity.GetInterpolatedValue <float>(emitter.Data.ColorKey2, out intensity); emitter.Data.Color2.X *= intensity; emitter.Data.Color2.Y *= intensity; emitter.Data.Color2.Z *= intensity; colorIntensity.GetInterpolatedValue <float>(1.0f, out intensity); emitter.Data.Color3.X *= intensity; emitter.Data.Color3.Y *= intensity; emitter.Data.Color3.Z *= intensity; emitter.Data.Color0 *= m_effect.UserColorMultiplier; emitter.Data.Color1 *= m_effect.UserColorMultiplier; emitter.Data.Color2 *= m_effect.UserColorMultiplier; emitter.Data.Color3 *= m_effect.UserColorMultiplier; MyAnimatedPropertyFloat radius; Radius.GetKey(0, out time, out radius); radius.GetKey(0, out time, out emitter.Data.ParticleSize0); radius.GetKey(1, out emitter.Data.ParticleSizeKeys1, out emitter.Data.ParticleSize1); radius.GetKey(2, out emitter.Data.ParticleSizeKeys2, out emitter.Data.ParticleSize2); radius.GetKey(3, out time, out emitter.Data.ParticleSize3); emitter.Data.ParticleSize0 *= m_effect.UserRadiusMultiplier; emitter.Data.ParticleSize1 *= m_effect.UserRadiusMultiplier; emitter.Data.ParticleSize2 *= m_effect.UserRadiusMultiplier; emitter.Data.ParticleSize3 *= m_effect.UserRadiusMultiplier; emitter.Data.ColorVar = ColorVar; if (emitter.Data.ColorVar > 1.0f) { emitter.Data.ColorVar = 1.0f; } else if (emitter.Data.ColorVar < 0) { emitter.Data.ColorVar = 0; } emitter.Data.HueVar = HueVar; if (emitter.Data.HueVar > 1.0f) { emitter.Data.HueVar = 1.0f; } else if (emitter.Data.HueVar < 0) { emitter.Data.HueVar = 0; } emitter.Data.Bounciness = Bounciness; emitter.Data.ParticleLifeSpan = Life; emitter.Data.Direction = Direction; emitter.Data.RotationVelocity = RotationVelocity; emitter.Data.RotationVelocityVar = RotationVelocityVar; emitter.Data.Acceleration = Acceleration; emitter.Data.StreakMultiplier = StreakMultiplier; emitter.Data.SoftParticleDistanceScale = SoftParticleDistanceScale; emitter.Data.AnimationFrameTime = AnimationFrameTime; emitter.Data.OITWeightFactor = OITWeightFactor; emitter.AtlasTexture = (Material.GetValue <MyTransparentMaterial>()).Texture; emitter.AtlasDimension = new Vector2I((int)ArraySize.GetValue <Vector3>().X, (int)ArraySize.GetValue <Vector3>().Y); emitter.AtlasFrameOffset = ArrayOffset; emitter.AtlasFrameModulo = ArrayModulo; GPUEmitterFlags flags = 0; flags |= Streaks ? GPUEmitterFlags.Streaks : 0; flags |= Collide ? GPUEmitterFlags.Collide : 0; flags |= SleepState ? GPUEmitterFlags.SleepState : 0; flags |= Light ? GPUEmitterFlags.Light : 0; flags |= VolumetricLight ? GPUEmitterFlags.VolumetricLight : 0; flags |= m_effect.IsSimulationPaused || MyParticlesManager.Paused ? GPUEmitterFlags.FreezeSimulate : 0; flags |= MyParticlesManager.Paused ? GPUEmitterFlags.FreezeEmit : 0; emitter.Data.Flags = flags; emitter.GID = m_renderId; FillData(ref emitter); }
void FillData(ref MyGPUEmitter emitter) { float time; MyAnimatedPropertyVector4 color; MyAnimatedPropertyFloat radius; MyAnimatedPropertyFloat colorIntensity; Color.GetKey(0, out time, out color); Radius.GetKey(0, out time, out radius); ColorIntensity.GetKey(0, out time, out colorIntensity); emitter.GID = m_renderId; if (Enabled.GetValue <bool>() && !m_effect.IsEmittingStopped) { ParticlesPerSecond.GetInterpolatedValue <float>(m_effect.GetElapsedTime(), out emitter.ParticlesPerSecond); emitter.ParticlesPerSecond *= m_effect.UserBirthMultiplier; } else { emitter.ParticlesPerSecond = 0; } float intensity; color.GetKey(0, out time, out emitter.Data.Color0); color.GetKey(1, out emitter.Data.ColorKey1, out emitter.Data.Color1); color.GetKey(2, out emitter.Data.ColorKey2, out emitter.Data.Color2); color.GetKey(3, out time, out emitter.Data.Color3); // unmultiply colors and factor by intensity colorIntensity.GetInterpolatedValue <float>(0, out intensity); emitter.Data.Color0.X *= intensity; emitter.Data.Color0.Y *= intensity; emitter.Data.Color0.Z *= intensity; emitter.Data.Color0 *= m_effect.UserColorMultiplier; colorIntensity.GetInterpolatedValue <float>(emitter.Data.ColorKey1, out intensity); emitter.Data.Color1.X *= intensity; emitter.Data.Color1.Y *= intensity; emitter.Data.Color1.Z *= intensity; emitter.Data.Color1 *= m_effect.UserColorMultiplier; colorIntensity.GetInterpolatedValue <float>(emitter.Data.ColorKey2, out intensity); emitter.Data.Color2.X *= intensity; emitter.Data.Color2.Y *= intensity; emitter.Data.Color2.Z *= intensity; emitter.Data.Color2 *= m_effect.UserColorMultiplier; colorIntensity.GetInterpolatedValue <float>(1.0f, out intensity); emitter.Data.Color3.X *= intensity; emitter.Data.Color3.Y *= intensity; emitter.Data.Color3.Z *= intensity; emitter.Data.Color3 *= m_effect.UserColorMultiplier; emitter.Data.ColorVar = ColorVar; if (emitter.Data.ColorVar > 1.0f) { emitter.Data.ColorVar = 1.0f; } else if (emitter.Data.ColorVar < 0) { emitter.Data.ColorVar = 0; } emitter.Data.HueVar = HueVar; if (emitter.Data.HueVar > 1.0f) { emitter.Data.HueVar = 1.0f; } else if (emitter.Data.HueVar < 0) { emitter.Data.HueVar = 0; } emitter.Data.Bounciness = Bounciness; MatrixD mat = CalculateWorldMatrix(); emitter.Data.RotationMatrix = mat; emitter.Data.Direction = Direction; Velocity.GetInterpolatedValue <float>(m_effect.GetElapsedTime(), out emitter.Data.Velocity); VelocityVar.GetInterpolatedValue <float>(m_effect.GetElapsedTime(), out emitter.Data.VelocityVar); float cone; DirectionCone.GetInterpolatedValue <float>(m_effect.GetElapsedTime(), out cone); emitter.Data.DirectionCone = MathHelper.ToRadians(cone); DirectionConeVar.GetInterpolatedValue <float>(m_effect.GetElapsedTime(), out cone); emitter.Data.DirectionConeVar = MathHelper.ToRadians(cone); emitter.Data.NumParticlesToEmitThisFrame = 0; emitter.Data.ParticleLifeSpan = Life; radius.GetKey(0, out time, out emitter.Data.ParticleSize0); radius.GetKey(1, out emitter.Data.ParticleSizeKeys1, out emitter.Data.ParticleSize1); radius.GetKey(2, out emitter.Data.ParticleSizeKeys2, out emitter.Data.ParticleSize2); radius.GetKey(3, out time, out emitter.Data.ParticleSize3); emitter.Data.ParticleSize0 *= m_effect.UserRadiusMultiplier; emitter.Data.ParticleSize1 *= m_effect.UserRadiusMultiplier; emitter.Data.ParticleSize2 *= m_effect.UserRadiusMultiplier; emitter.Data.ParticleSize3 *= m_effect.UserRadiusMultiplier; EmitterSize.GetInterpolatedValue <Vector3>(m_effect.GetElapsedTime(), out emitter.Data.EmitterSize); EmitterSizeMin.GetInterpolatedValue <float>(m_effect.GetElapsedTime(), out emitter.Data.EmitterSizeMin); emitter.Data.RotationVelocity = RotationVelocity; emitter.Data.RotationVelocityVar = RotationVelocityVar; emitter.Data.Acceleration = Acceleration; emitter.Data.Gravity = m_effect.Gravity * Gravity; emitter.Data.StreakMultiplier = StreakMultiplier; GPUEmitterFlags flags = 0; flags |= Streaks ? GPUEmitterFlags.Streaks : 0; flags |= Collide ? GPUEmitterFlags.Collide : 0; flags |= SleepState ? GPUEmitterFlags.SleepState : 0; flags |= Light ? GPUEmitterFlags.Light : 0; flags |= VolumetricLight ? GPUEmitterFlags.VolumetricLight : 0; flags |= m_effect.IsSimulationPaused ? GPUEmitterFlags.FreezeSimulate : 0; emitter.Data.Flags = flags; emitter.Data.SoftParticleDistanceScale = SoftParticleDistanceScale; emitter.Data.AnimationFrameTime = AnimationFrameTime; emitter.Data.OITWeightFactor = OITWeightFactor; emitter.Data.Scale = m_effect.GetEmitterScale(); emitter.AtlasTexture = (Material.GetValue <MyTransparentMaterial>()).Texture; emitter.AtlasDimension = new Vector2I((int)ArraySize.GetValue <Vector3>().X, (int)ArraySize.GetValue <Vector3>().Y); emitter.AtlasFrameOffset = ArrayOffset; emitter.AtlasFrameModulo = ArrayModulo; emitter.WorldPosition = mat.Translation; }
public void Generate(Chunk chunk) { Log.WriteInfo("Generating new chunk: " + chunk.ChunkCoords); chunk.FinishedGeneration = false; var worldSize = new ArraySize() { minZ = chunk.ChunkCoords.WorldCoordsZ, maxZ = chunk.ChunkCoords.WorldCoordsZ + Global.CHUNK_SIZE, minX = chunk.ChunkCoords.WorldCoordsX, maxX = chunk.ChunkCoords.WorldCoordsX + Global.CHUNK_SIZE, minY = Settings.minNoiseHeight, maxY = Settings.maxNoiseHeight, scale = 1, }; var generateQueue = new UniqueQueue <Position>(); generateQueue.Enqueue(new Position( chunk.ChunkCoords.WorldCoordsX + Global.CHUNK_SIZE / 2, Settings.maxNoiseHeight, chunk.ChunkCoords.WorldCoordsZ + Global.CHUNK_SIZE / 2)); if (worldInstance.IsChunkLoaded(new ChunkCoords(chunk.ChunkCoords.X - 1, chunk.ChunkCoords.Z))) { for (var z = chunk.MinPosition.Z; z <= chunk.MaxPosition.Z; z++) { for (var y = chunk.MinPosition.Y; y < chunk.MaxPosition.Y; y++) { var block = worldInstance.GetBlock(chunk.MinPosition.X - 1, y, z); if (block.IsTransparent) { generateQueue.Enqueue(new Position(chunk.MinPosition.X, y, z)); } } } } if (worldInstance.IsChunkLoaded(new ChunkCoords(chunk.ChunkCoords.X + 1, chunk.ChunkCoords.Z))) { for (var z = chunk.MinPosition.Z; z <= chunk.MaxPosition.Z; z++) { for (var y = chunk.MinPosition.Y; y < chunk.MaxPosition.Y; y++) { var block = worldInstance.GetBlock(chunk.MaxPosition.X + 1, y, z); if (block.IsTransparent) { generateQueue.Enqueue(new Position(chunk.MaxPosition.X, y, z)); } } } } if (worldInstance.IsChunkLoaded(new ChunkCoords(chunk.ChunkCoords.X, chunk.ChunkCoords.Z - 1))) { for (var x = chunk.MinPosition.X; x <= chunk.MaxPosition.X; x++) { for (var y = chunk.MinPosition.Y; y < chunk.MaxPosition.Y; y++) { var block = worldInstance.GetBlock(x, y, chunk.MinPosition.Z - 1); if (block.IsTransparent) { generateQueue.Enqueue(new Position(x, y, chunk.MinPosition.Z)); } } } } if (worldInstance.IsChunkLoaded(new ChunkCoords(chunk.ChunkCoords.X, chunk.ChunkCoords.Z + 1))) { for (var x = chunk.MinPosition.X; x <= chunk.MaxPosition.X; x++) { for (var y = chunk.MinPosition.Y; y < chunk.MaxPosition.Y; y++) { var block = worldInstance.GetBlock(x, y, chunk.MaxPosition.Z + 1); if (block.IsTransparent) { generateQueue.Enqueue(new Position(x, y, chunk.MaxPosition.Z)); } } } } GenerateChunkCells(generateQueue); chunk.BuildHeightMap(); TreeGenerator.Generate(worldInstance, chunk); chunk.FinishedGeneration = true; }