public override void OnRenderFrame(float deltaTime, EnumRenderStage stage) { if (loadedTexture == null) { return; } IRenderAPI rpi = api.Render; Vec3d camPos = api.World.Player.Entity.CameraPos; if (camPos.SquareDistanceTo(pos.X, pos.Y, pos.Z) > 20 * 20) { return; } rpi.GlDisableCullFace(); rpi.GlToggleBlend(true, EnumBlendMode.PremultipliedAlpha); IStandardShaderProgram prog = rpi.PreparedStandardShader(pos.X, pos.Y, pos.Z); prog.Tex2D = loadedTexture.TextureId; prog.ModelMatrix = ModelMat .Identity() .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z) .Translate(0.5f, 0.5f, 0.5f) .RotateY(rotY + GameMath.PI) .Translate(-0.5f, -0.5, -0.5f) .Translate(0.5f, 0.35f, 1 / 16f + 0.03f) .Scale(0.45f * QuadWidth, 0.45f * QuadHeight, 0.45f * QuadWidth) .Values ; prog.ViewMatrix = rpi.CameraMatrixOriginf; prog.ProjectionMatrix = rpi.CurrentProjectionMatrix; prog.NormalShaded = 0; prog.ExtraGodray = 0; prog.SsaoAttn = 0; prog.AlphaTest = 0.05f; prog.OverlayOpacity = 0; rpi.RenderMesh(quadModelRef); prog.Stop(); rpi.GlToggleBlend(true, EnumBlendMode.Standard); }
/// <summary>Builds this Item</summary> protected override void Build() { // Load Material ModelMat = SRObjects.GetInst <Material>("EchoBlue"); ModelMat.SetColor(TINT_COLOR, ColorUtils.FromHex("22222222")); ModelMat.SetFloat(BRIGHTNESS, 0.1f); ModelMat.SetFloat(ANIMATION_SPEED, 0f); // Get GameObjects Prefab = PrefabUtils.CopyPrefab(BaseItem); Prefab.name = NamePrefix + Name; Prefab.transform.localScale = Scale; GameObject child = Prefab.FindChild("model"); child.transform.localScale = ModelScale; // Load Components Rigidbody body = Prefab.GetComponent <Rigidbody>(); Vacuumable vac = Prefab.GetComponent <Vacuumable>(); Identifiable iden = Prefab.GetComponent <Identifiable>(); MeshFilter filter = child.GetComponent <MeshFilter>(); MeshRenderer render = child.GetComponent <MeshRenderer>(); // Setup Components body.mass = Mass; vac.size = Size; iden.id = ID; filter.sharedMesh = Mesh; render.sharedMaterial = ModelMat; // Setup Proximity Prefab.AddComponent <EffyProximity>(); // Add Particles GameObject part = Object.Instantiate(EffyParticles, Prefab.transform, true); part.name = "EffyPart"; part.transform.localScale = Vector3.one; }
public void UpdateTransform(Camera camera) { ModelMat.Identity(); ModelMat = ModelMat.TRS(LocalPosition, LocalRotation, LocalScale); ModelITMat.CopyFrom(ModelMat.m); ModelITMat.Invert(); ModelITMat.Transpose(); if (Parent != null) { ModelMat = Parent.ModelMat * ModelMat; } ModelViewMat = camera.View * ModelMat; ModelViewProjMat = camera.Proj * ModelViewMat; ProjMat = camera.Proj; ModelViewITMat.CopyFrom(ModelViewMat); ModelViewITMat.Invert(); ModelViewITMat.Transpose(); WorldPosition = ModelMat * Vector4.zeroPos; }