Beispiel #1
0
        // 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();
        }
Beispiel #2
0
 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 );
 }
Beispiel #3
0
        // 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;
        }
Beispiel #4
0
        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();
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
    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;
                }
            }
        }