private void HandlePart(MovingPlanes data, MovingPlanesRenderer ren) { InputText("Name", ref data.name, 128); NewLine(); Text("Timing:"); InputInt("Phase1", ref data.phase1); InputInt("Phase2", ref data.phase2); InputFloat("MinProgress", ref data.minProgress); Checkbox("ManualProgress", ref data.manualProgress); NewLine(); Text("Shape/Movement:"); InputFloat("Width", ref data.width); InputFloat("Height", ref data.height); InputFloat("SizeModSpeed", ref data.sizeModSpeed); InputFloat("Target Size", ref data.targetSize); InputFloat("Rotation", ref data.rotation); InputFloat("Y Offset", ref data.yOffset); InputFloat("Tex Shift", ref data.texShift); Checkbox("CirclesAround", ref data.circlesAround); Checkbox("Use Direction", ref data.useDirection); Checkbox("Single Plane", ref data.disableSecondPlane); NewLine(); Text("Material:"); LabelText("Texture", data.texName); InputInt("TileId", ref data.tileId); InputInt("TileW", ref data.tileW); InputInt("TileH", ref data.tileH); ColorEdit4("Color", ref data.color); EnumCombo("RenderMode", ref data.renderMode); }
private void LoadEffectNow(IResource resource) { if (resource.Equals(CurrentResource)) { return; } CurrentResource = null; emptyEffect = new EffectCombiner(); effectRenderer?.Dispose(); effectRenderer = new EffectCombinerRenderer(diContainer, resource); effectRenderer.Location.LocalPosition = Vector3.Zero; effectRenderer.Location.LocalRotation = Quaternion.Identity; editor.ClearInfoSections(); editor.AddInfoSection("Info", HandleInfoContent); editor.AddInfoSection("Playback", HandlePlaybackContent); foreach (var(partRenderer, i) in effectRenderer.Parts.Indexed()) { var part = Effect.parts[i]; editor.AddInfoSection($"{part.Type} \"{part.Name}\"", part switch { MovingPlanes mp => () => HandlePart(mp, (MovingPlanesRenderer)partRenderer), RandomPlanes rp => () => HandlePart(rp, (RandomPlanesRenderer)partRenderer), ParticleEmitter pe => () => HandlePart(pe, (ParticleEmitterRenderer)partRenderer), BeamStar bs => () => HandlePart(bs, (BeamStarRenderer)partRenderer), _ => () => { } // ignore for now }, defaultOpen: false, () => HandlePartPreContent(i));
public MovingPlanesRenderer(ITagContainer diContainer, DeviceBufferRange locationRange, MovingPlanes data) { this.data = data; var textureLoader = diContainer.GetTag <IAssetLoader <Texture> >(); var camera = diContainer.GetTag <Camera>(); quadMeshBuffer = diContainer.GetTag <IQuadMeshBuffer <EffectVertex> >(); material = EffectMaterial.CreateFor(data.renderMode, diContainer); material.LinkTransformsTo(camera); material.World.BufferRange = locationRange; material.Uniforms.Value = EffectMaterialUniforms.Default; material.Uniforms.Ref.isBillboard = !data.circlesAround && !data.useDirection; material.MainTexture.Texture = textureLoader.LoadTexture( IEffectPartRenderer.TexturePath, data.texName); material.Sampler.Value = IEffectPartRenderer.SamplerDescription; AddDisposable(material); quadRange = quadMeshBuffer.Reserve(data.disableSecondPlane ? 1 : 2); texCoords = EffectPartUtility.GetTileUV(data.tileW, data.tileH, data.tileId); Reset(); }