public override void Initialize(ICoreAPI api) { base.Initialize(api); ownBlock = Block as BlockCondenser; if (Api.Side == EnumAppSide.Client) { currentMesh = GenMesh(); MarkDirty(true); RegisterGameTickListener(clientTick, 200, Api.World.Rand.Next(50)); if (!inventory[1].Empty && bucketMesh == null) { genBucketMesh(); } } Matrixf mat = new Matrixf(); mat .Translate(0.5f, 0, 0.5f) .RotateYDeg(Block.Shape.rotateY - 90) .Translate(-0.5f, 0, -0.5f) ; spoutPos = mat.TransformVector(new Vec4f(8f / 16f, 7.5f / 16f, 3.5f / 16f, 1)).XYZ; var steamposoffmin = mat.TransformVector(new Vec4f(6 / 16f, 13 / 16f, 9 / 16f, 1)).XYZ; var steamposoffmax = mat.TransformVector(new Vec4f(10 / 16f, 13 / 16f, 13 / 16f, 1)).XYZ; steamposmin = Pos.ToVec3d().Add(steamposoffmin); steamposmax = Pos.ToVec3d().Add(steamposoffmax); }
static void initRotations() { for (int i = 0; i < 4; i++) { Matrixf m = new Matrixf(); m.Translate(0.5f, 0.5f, 0.5f); m.RotateYDeg(i * 90); m.Translate(-0.5f, -0.5f, -0.5f); Vec3f[] poses = candleWickPositionsByRot[i] = new Vec3f[candleWickPositions.Length]; for (int j = 0; j < poses.Length; j++) { Vec4f rotated = m.TransformVector(new Vec4f(candleWickPositions[j].X / 16f, candleWickPositions[j].Y / 16f, candleWickPositions[j].Z / 16f, 1)); poses[j] = new Vec3f(rotated.X, rotated.Y, rotated.Z); } } }
public override void Initialize(ICoreAPI api) { Facing = BlockFacing.FromCode(Block.Variant["side"]); if (Facing == null) { Facing = BlockFacing.NORTH; } switch (Facing.Index) { case 0: rotateY = 180; break; case 1: rotateY = 90; break; case 3: rotateY = 270; break; default: break; } mat.Translate(0.5f, 0.5f, 0.5f); mat.RotateYDeg(rotateY); mat.Translate(-0.5f, -0.5f, -0.5f); base.Initialize(api); inv.LateInitialize(InventoryClassName + "-" + Pos, api); if (api.World.Side == EnumAppSide.Server) { RegisterGameTickListener(OnServerTick, 200); } pvBh = GetBehavior <BEBehaviorMPPulverizer>(); }
public void CustomRender(float dt) { if (LineDebug && capi != null) { BlockPos originPos = CenterPosition.AsBlockPos; for (int i = 0; i < Constraints.Count; i++) { ClothPoint p1 = Constraints[i].Point1; ClothPoint p2 = Constraints[i].Point2; debugUpdateMesh.xyz[i * 6 + 0] = (float)(p1.Pos.X - originPos.X); debugUpdateMesh.xyz[i * 6 + 1] = (float)(p1.Pos.Y - originPos.Y) + 0.005f; debugUpdateMesh.xyz[i * 6 + 2] = (float)(p1.Pos.Z - originPos.Z); debugUpdateMesh.xyz[i * 6 + 3] = (float)(p2.Pos.X - originPos.X); debugUpdateMesh.xyz[i * 6 + 4] = (float)(p2.Pos.Y - originPos.Y) + 0.005f; debugUpdateMesh.xyz[i * 6 + 5] = (float)(p2.Pos.Z - originPos.Z); } capi.Render.UpdateMesh(debugMeshRef, debugUpdateMesh); IShaderProgram prog = capi.Shader.GetProgram((int)EnumShaderProgram.Autocamera); prog.Use(); capi.Render.LineWidth = 6; capi.Render.BindTexture2d(0); capi.Render.GLDisableDepthTest(); Vec3d cameraPos = capi.World.Player.Entity.CameraPos; mat.Set(capi.Render.CameraMatrixOrigin); mat.Translate( (float)(originPos.X - cameraPos.X), (float)(originPos.Y - cameraPos.Y), (float)(originPos.Z - cameraPos.Z) ); prog.UniformMatrix("projectionMatrix", capi.Render.CurrentProjectionMatrix); prog.UniformMatrix("modelViewMatrix", mat.Values); capi.Render.RenderMesh(debugMeshRef); prog.Stop(); capi.Render.GLEnableDepthTest(); } }
public void OnRenderFrame(float deltaTime, EnumRenderStage stage) { var plrPos = capi.World.Player.Entity.Pos; var bh = capi.World.Player.Entity.GetBehavior <EntityBehaviorTemporalStabilityAffected>(); if (bh != null) { bh.stabilityOffset = 0; } if (modsys.nearestRifts.Length > 0) { Rift rift = modsys.nearestRifts[0]; float dist = Math.Max(0, GameMath.Sqrt(plrPos.SquareDistanceTo(rift.Position)) - 1 - rift.Size / 2f); float f = Math.Max(0, 1 - dist / 3f); float jitter = capi.World.Rand.NextDouble() < 0.25 ? f * ((float)capi.World.Rand.NextDouble() - 0.5f) / 1f : 0; GlobalConstants.GuiGearRotJitter = jitter; capi.ModLoader.GetModSystem <SystemTemporalStability>().modGlitchStrength = Math.Min(1, f * 1.3f); if (bh != null) { bh.stabilityOffset = -Math.Pow(Math.Max(0, 1 - dist / 3), 2) * 20; } } else { capi.ModLoader.GetModSystem <SystemTemporalStability>().modGlitchStrength = 0; } counter += deltaTime; if (capi.World.Rand.NextDouble() < 0.012) { counter += 20 * (float)capi.World.Rand.NextDouble(); } capi.Render.GLDepthMask(false); prog.Use(); prog.BindTexture2D("primaryFb", capi.Render.FrameBuffers[(int)EnumFrameBuffer.Primary].ColorTextureIds[0], 0); prog.BindTexture2D("depthTex", capi.Render.FrameBuffers[(int)EnumFrameBuffer.Primary].DepthTextureId, 1); prog.UniformMatrix("projectionMatrix", capi.Render.CurrentProjectionMatrix); int width = capi.Render.FrameWidth; int height = capi.Render.FrameHeight; prog.Uniform("counter", counter); float bf = 200 + (float)GameMath.Sin(capi.InWorldEllapsedMilliseconds / 24000.0) * 100; prog.Uniform("counterSmooth", bf); prog.Uniform("invFrameSize", new Vec2f(1f / width, 1f / height)); int riftIndex = 0; cnt = (cnt + 1) % 3; foreach (var rift in rifts) { if (cnt == 0) { rift.Visible = capi.World.BlockAccessor.GetChunkAtBlockPos((int)rift.Position.X, (int)rift.Position.Y, (int)rift.Position.Z) != null; } riftIndex++; matrixf.Identity(); float dx = (float)(rift.Position.X - plrPos.X); float dy = (float)(rift.Position.Y - plrPos.Y); float dz = (float)(rift.Position.Z - plrPos.Z); matrixf.Translate(dx, dy, dz); matrixf.ReverseMul(capi.Render.CameraMatrixOriginf); matrixf.Values[0] = 1f; matrixf.Values[1] = 0f; matrixf.Values[2] = 0f; //matrixf.Values[4] = 0f; //matrixf.Values[5] = 1f; //matrixf.Values[6] = 0f; matrixf.Values[8] = 0f; matrixf.Values[9] = 0f; matrixf.Values[10] = 1f; float size = rift.GetNowSize(capi); matrixf.Scale(size, size, size); prog.UniformMatrix("modelViewMatrix", matrixf.Values); prog.Uniform("riftIndex", riftIndex); capi.Render.RenderMesh(meshref); if (dx * dx + dy * dy + dz * dz < 40 * 40) { Vec3d ppos = rift.Position; capi.World.SpawnParticles(0.1f, ColorUtil.ColorFromRgba(21 / 2, 70 / 2, 116 / 2, 128), ppos, ppos, new Vec3f(-0.125f, -0.125f, -0.125f), new Vec3f(0.125f, 0.125f, 0.125f), 5, 0, (0.125f / 2 + (float)capi.World.Rand.NextDouble() * 0.25f) / 2); } } counter = GameMath.Mod(counter + deltaTime, GameMath.TWOPI * 100f); prog.Stop(); capi.Render.GLDepthMask(true); }