// Token: 0x06004279 RID: 17017 RVA: 0x00151C48 File Offset: 0x00150048 public override void GenerateColliderGeometry() { Mesh colliderMesh = base.GetColliderMesh(); if (colliderMesh) { colliderMesh.Clear(); TrianglePrimitive.GenerateGeometry(colliderMesh, this.side, this.subdivision); base.RefreshMeshCollider(); } base.GenerateColliderGeometry(); }
public void Add ( Vector3 point1, Vector3 point2, Vector3 point3, Color color, float hideAt = 0 ) { var primitive = freePrimitives.First; if ( primitive == null ) primitive = new TrianglePrimitive ( ); else primitive.Remove ( ); primitive.Value.point1 = point1; primitive.Value.point2 = point2; primitive.Value.point3 = point3; primitive.Value.color = color; primitive.Value.hideAt = hideAt; usedPrimitives.AddFirst ( primitive ); }
// Token: 0x06004277 RID: 17015 RVA: 0x00151BD4 File Offset: 0x0014FFD4 public void GenerateGeometry(float side, int subdivision) { MeshFilter component = base.GetComponent <MeshFilter>(); if (component.sharedMesh == null) { component.sharedMesh = new Mesh(); } Mesh sharedMesh = component.sharedMesh; base.GenerationTimeMS = TrianglePrimitive.GenerateGeometry(sharedMesh, side, subdivision); this.subdivision = subdivision; this.side = side; this.flipNormals = false; }
public void AdditiveCall(SpriteBatch sB) { Vector2 drawPosition = npc.Center + (Vector2.UnitY * npc.height / 4); if (LockedOn && npc.Distance(Target.Center) < FOLLOW_MAXRANGE) { Effect effect = mod.GetEffect("Effects/EmpowermentBeam"); effect.Parameters["uTexture"].SetValue(mod.GetTexture("Textures/Trails/Trail_2")); effect.Parameters["progress"].SetValue(Main.GlobalTime / 3); effect.Parameters["uColor"].SetValue(new Color(245, 59, 164).ToVector4()); effect.Parameters["uSecondaryColor"].SetValue(new Color(255, 138, 212).ToVector4()); Vector2 dist = Target.Center - drawPosition; TrianglePrimitive tri = new TrianglePrimitive() { TipPosition = drawPosition - Main.screenPosition, Rotation = dist.ToRotation(), Height = 100 + dist.Length() * 1.5f, Color = Color.White * BeamStrength, Width = 80 + ((Target.width + Target.height) * 0.5f) }; PrimitiveRenderer.DrawPrimitiveShape(tri, effect); } float blurLength = 250; float blurWidth = 25; Effect blurEffect = mod.GetEffect("Effects/BlurLine"); SquarePrimitive blurLine = new SquarePrimitive() { Position = drawPosition - Main.screenPosition, Height = blurWidth * flickerStrength, Length = blurLength * flickerStrength, Rotation = npc.rotation, Color = new Color(255, 138, 212) * flickerStrength }; PrimitiveRenderer.DrawPrimitiveShape(blurLine, blurEffect); sB.Draw(ModContent.GetTexture(Texture + "_Glow"), npc.Center - Main.screenPosition, npc.frame, Color.White, npc.rotation, npc.frame.Size() / 2, npc.scale, npc.spriteDirection < 0 ? SpriteEffects.FlipHorizontally : SpriteEffects.None, 0); }
/// <inheritdoc /> public override void Initialize() { Game.Background = Color.CornflowerBlue; Camera = new TargetCamera(GraphicsDevice.Viewport.AspectRatio, new Vector3(0, 20, 60), Vector3.Zero); Box = new CubePrimitive(GraphicsDevice, 10, Color.DarkCyan, Color.DarkMagenta, Color.DarkGreen, Color.MonoGameOrange, Color.Black, Color.DarkGray); BoxPosition = Vector3.Zero; Cylinder = new CylinderPrimitive(GraphicsDevice, 20, 10, 16); CylinderPosition = new Vector3(-20, 0, 0); Sphere = new SpherePrimitive(GraphicsDevice, 10); SpherePosition = new Vector3(0, -15, 0); Teapot = new TeapotPrimitive(GraphicsDevice, 10); TeapotPosition = new Vector3(20, 0, 0); Torus = new TorusPrimitive(GraphicsDevice, 10, 1, 16); TorusPosition = new Vector3(-20, 15, 0); Triangle = new TrianglePrimitive(GraphicsDevice, new Vector3(-10f, 10f, 0f), new Vector3(0f, 20f, 0f), new Vector3(10f, 10f, 0f), Color.Black, Color.Cyan, Color.Magenta); base.Initialize(); }
protected void DrawBeam(Color lightColor, Color darkColor) { Effect effect = SpiritMod.Instance.GetEffect("Effects/EmpowermentBeam"); effect.Parameters["uTexture"].SetValue(SpiritMod.Instance.GetTexture("Textures/Trails/Trail_2")); effect.Parameters["progress"].SetValue(Main.GlobalTime / 3); effect.Parameters["uColor"].SetValue(darkColor.ToVector4()); effect.Parameters["uSecondaryColor"].SetValue(lightColor.ToVector4()); Vector2 dist = SigilPosition - npc.Bottom; TrianglePrimitive tri = new TrianglePrimitive() { TipPosition = SigilPosition - Main.screenPosition, Rotation = MathHelper.PiOver2, Height = 100 + dist.Length() * 1.5f, Color = Color.White * 0.33f, Width = 100 + ((npc.width + npc.height) * 0.5f) }; PrimitiveRenderer.DrawPrimitiveShape(tri, effect); }
public void DrawBoonBeam(Vector2 targetPos) { Effect effect = SpiritMod.Instance.GetEffect("Effects/EmpowermentBeam"); effect.Parameters["uTexture"].SetValue(SpiritMod.Instance.GetTexture("Textures/Trails/Trail_2")); effect.Parameters["progress"].SetValue(Main.GlobalTime / 3); effect.Parameters["uColor"].SetValue(new Color(247, 117, 42, 0).ToVector4()); effect.Parameters["uSecondaryColor"].SetValue(new Color(247, 195, 92, 0).ToVector4()); Vector2 dist = SigilPosition - targetPos; TrianglePrimitive tri = new TrianglePrimitive() { TipPosition = SigilPosition - Main.screenPosition, Rotation = (SigilPosition - targetPos).ToRotation() + MathHelper.Pi, Height = 100 + dist.Length() * 1.5f, Color = Color.White * 0.33f, Width = 100 + ((npc.width + npc.height) * 0.5f) }; PrimitiveRenderer.DrawPrimitiveShape(tri, effect); }
public static void CreatePrimitives(GameObject gameObject, ref Dictionary <Material, List <Primitive> > primitives) { if (primitives == null) { primitives = new Dictionary <Material, List <Primitive> >(); } MeshRenderer meshRenderer = gameObject.GetComponent <MeshRenderer>(); Primitive primitive = null; if (!meshRenderer || !meshRenderer.sharedMaterial) { return; } if (primitive == null) { BoxCollider boxCollider = gameObject.GetComponent <BoxCollider>(); if (boxCollider) { Vector3 scale = new Vector3(boxCollider.size.x * boxCollider.transform.lossyScale.x, boxCollider.size.y * boxCollider.transform.lossyScale.y, boxCollider.size.z * boxCollider.transform.lossyScale.z); if ((scale.x < 0.02f && scale.y >= 0.02f && scale.z >= 0.02f) || (scale.y < 0.02f && scale.z >= 0.02f && scale.x >= 0.02f) || (scale.z < 0.02f && scale.x >= 0.02f && scale.y >= 0.02f)) { primitive = new QuadPrimitive(boxCollider); } else { primitive = new CubePrimitive(boxCollider); } } } if (primitive == null) { SphereCollider sphereCollider = gameObject.GetComponent <SphereCollider>(); if (sphereCollider) { primitive = new SpherePrimitive(sphereCollider); } } if (primitive == null) { MeshFilter meshFilter = gameObject.GetComponent <MeshFilter>(); if (meshFilter && meshFilter.sharedMesh) { int[] triangles = meshFilter.sharedMesh.triangles; Vector3[] vertices = meshFilter.sharedMesh.vertices; Vector3[] normals = meshFilter.sharedMesh.normals; Matrix4x4 localToWorld = meshFilter.transform.localToWorldMatrix; for (int i = 0; i < triangles.Length; i += 3) { Vector3 vertex0 = localToWorld.MultiplyPoint(vertices[triangles[i]]); Vector3 vertex1 = localToWorld.MultiplyPoint(vertices[triangles[i + 1]]); Vector3 vertex2 = localToWorld.MultiplyPoint(vertices[triangles[i + 2]]); Vector3 normal0 = localToWorld.MultiplyVector(normals[triangles[i]]); Vector3 normal1 = localToWorld.MultiplyVector(normals[triangles[i + 1]]); Vector3 normal2 = localToWorld.MultiplyVector(normals[triangles[i + 2]]); Primitive trianglePrimitive = new TrianglePrimitive(vertex0, vertex1, vertex2, normal0, normal1, normal2); if (primitives.ContainsKey(meshRenderer.sharedMaterial) == false) { primitives.Add(meshRenderer.sharedMaterial, new List <Primitive>()); } primitives[meshRenderer.sharedMaterial].Add(trianglePrimitive); } } } else { if (primitives.ContainsKey(meshRenderer.sharedMaterial) == false) { primitives.Add(meshRenderer.sharedMaterial, new List <Primitive>()); } primitives[meshRenderer.sharedMaterial].Add(primitive); } }
private void CreateMesh(ModelFile model) { var id = "Mesh-"+model.Descriptions[0]; var name = model.Descriptions[1]; var mesh = new Mesh(id, name); var geom = new Geometry("Geom-"+id, name); var node = Bones.FirstOrDefault(i => i.Name == name); var pos = new GeometryChannel("Pos-"+id, name, GeometrySemantic.Position, 0); var nrm = new GeometryChannel("Nrm-"+id, name, GeometrySemantic.Normal, 0); var tex = new GeometryChannel("Tex-"+id, name, GeometrySemantic.TexCoord, 1); var indices = new List<int>(); var mats = Materials.Values.ToArray(); var no = 0; foreach(var i in model.Mesh.Primitives) { var prim = new TrianglePrimitive(); prim.Start = indices.Count; indices.AddRange(i.Indices.Select(j => (int)j)); prim.Count = indices.Count - prim.Start; prim.Material= mats[no++]; mesh.Primitives.Add(prim); } pos.SetData(ToSlimDX(model.Mesh.Vertices.Select(i => i.P)).ToList()); nrm.SetData(ToSlimDX(model.Mesh.Vertices.Select(i => i.N)).ToList()); tex.SetData(ToSlimDX(model.Mesh.Vertices.Select(i => i.T)).ToList()); var array = indices.ToArray(); pos.SetIndices(array); nrm.SetIndices(array); tex.SetIndices(array); mesh.Channels.Add(pos); mesh.Channels.Add(nrm); mesh.Channels.Add(tex); geom.SetData(mesh); Root.Instances.Add(geom); // モーフィング if(Settings.Morph) { Morph = new MorphingDeclaraion() { ID= "Morph-"+id, Name= "Morph"+name, Method= MorphingMethod.Normalized }; var morphs = model.Params.OfType<ParamMorph>().ToArray(); foreach(var i in morphs) { var v = ToSlimDX(model.Mesh.Vertices.Select(j => j.P)).ToArray(); foreach(var j in i.Vertices) { v[j.Index].X +=j.X; v[j.Index].Y +=j.Y; v[j.Index].Z +=j.Z; } var mm = new Mesh() { ID= "MorphMesh-" +i.Name, Name= i.Name }; var mg = new Geometry() { ID= "MorphGeom-" +i.Name, Name= i.Name }; var mc = new MorphingChannel() { ID= "MorphChannel-"+i.Name, Name= i.Name, Weight= 0.0f, Geometry= mg }; var c = new GeometryChannel() { ID= "MorphPos-" +i.Name, Name= i.Name, Semantic= GeometrySemantic.Position, Index= 0 }; Morph.Channels.Add(mc); Root.Instances.Add(mg); mg.SetData(mm); mm.Channels.Add(c); mm.Primitives.AddRange(mesh.Primitives); c.SetData(v.ToList()); c.SetIndices(mesh.Channels[0].GetIndicesAsArray(mesh)); } Root.Instances.Add(Morph); } // スキン if(Settings.Skin) { Skin = new SkinDeclaraion() { ID= "Skin-"+id, Name= "Skin"+name, Bind= SlimDX.Matrix.Identity }; var skinbones= model.Mesh.RefBones.Select(i => Bones.First(j => j.Name == i.Name)).ToList(); var bonemats= model.Mesh.RefBones.Select(i => new SlimDX.Matrix() { M11 = i.Matrix[ 0], M12 = i.Matrix[ 1], M13 = i.Matrix[ 2], M14 = i.Matrix[ 3], M21 = i.Matrix[ 4], M22 = i.Matrix[ 5], M23 = i.Matrix[ 6], M24 = i.Matrix[ 7], M31 = i.Matrix[ 8], M32 = i.Matrix[ 9], M33 = i.Matrix[10], M34 = i.Matrix[11], M41 = i.Matrix[12], M42 = i.Matrix[13], M43 = i.Matrix[14], M44 = i.Matrix[15] }).ToList(); Skin.Skeleton = new Skeleton() { Node= Scene.Nodes.First() }; var verts = new List<SkinVertices>(); var v = new List<SkinVertex>(); foreach(var i in model.Mesh.Skins) { v.Clear(); if(0 != i.W1) v.Add(new SkinVertex(i.B1, i.W1)); if(0 != i.W2) v.Add(new SkinVertex(i.B2, i.W2)); if(0 != i.W3) v.Add(new SkinVertex(i.B3, i.W3)); if(0 != i.W4) v.Add(new SkinVertex(i.B4, i.W4)); verts.Add(new SkinVertices(v)); } Skin.Vertices .AddRange(verts); Skin.Bones .AddRange(skinbones.Cast<Node>()); Skin.BindMatrices.AddRange(bonemats); Root.Instances.Add(Skin); } if(null == Skin) { if(null == Morph) { node.Instance = geom; } else { Morph.Source = geom; node.Instance = Morph; } } else { if(null == Morph) { Skin.Source = geom; node.Instance = Skin; } else { Morph.Source = geom; Skin.Source = Morph; node.Instance = Skin; } } }