private static GeometricPrimitive CreateCrossPrimitive(NamedImageFrame spriteSheet)
        {
            int width  = spriteSheet.SafeGetImage().Width;
            int height = spriteSheet.SafeGetImage().Height;

            return(new BatchBillboardPrimitive(spriteSheet, width, height,
                                               new Point(0, 0), width / 32.0f, height / 32.0f, false, treeTransforms, treeTints, treeTints));
        }
Exemple #2
0
        public static void Initialize(GraphicsDevice graphics, ContentManager content)
        {
            Primitives = new Dictionary <string, GeometricPrimitive>();

            List <Matrix> treeTransforms = new List <Matrix> {
                Matrix.Identity, Matrix.CreateRotationY((float)Math.PI / 2.0f)
            };
            List <Color> treeTints = new List <Color> {
                Color.White, Color.White
            };

            var primitives = FileUtils.LoadJsonListFromMultipleSources <PrimitiveRecord>(ContentPaths.primitives, null, p => p.Name);

            foreach (var prim in primitives)
            {
                var spriteSheet = new NamedImageFrame(prim.Asset);
                int width       = spriteSheet.SafeGetImage().Width;
                int height      = spriteSheet.SafeGetImage().Height;
                switch (prim.Type)
                {
                case PrimitiveType.Box:
                    Primitives[prim.Name] = new OldBoxPrimitive(graphics, prim.BoxSize.X, prim.BoxSize.Y, prim.BoxSize.Z,
                                                                new OldBoxPrimitive.BoxTextureCoords(width, height,
                                                                                                     prim.BoxFaceData[0], prim.BoxFaceData[1], prim.BoxFaceData[2], prim.BoxFaceData[3], prim.BoxFaceData[4], prim.BoxFaceData[5])); // WTF
                    break;

                case PrimitiveType.Cross:
                    Primitives[prim.Name] = new BatchBillboardPrimitive(graphics, spriteSheet, width, height,
                                                                        new Point(0, 0), width / 32.0f, height / 32.0f, false, treeTransforms, treeTints, treeTints);
                    break;

                case PrimitiveType.Quad:
                    Primitives[prim.Name] = new BatchBillboardPrimitive(graphics, spriteSheet, width, height,
                                                                        new Point(0, 0), width / 32.0f, height / 32.0f, false,
                                                                        new List <Matrix> {
                        treeTransforms[0]
                    },
                                                                        new List <Color> {
                        treeTints[0]
                    },
                                                                        new List <Color> {
                        treeTints[0]
                    });
                    break;
                }
            }
        }
Exemple #3
0
 public BatchBillboardPrimitive(
     NamedImageFrame spriteSheet,
     int frameWidth,
     int frameHeight,
     Point frame,
     float width, float height, bool flipped, List <Matrix> relativeTransforms, List <Color> tints, List <Color> vertColors)
 {
     RelativeTransforms = relativeTransforms;
     UVs        = new BillboardPrimitive.BoardTextureCoords(spriteSheet.SafeGetImage().Width, spriteSheet.SafeGetImage().Height, frameWidth, frameHeight, frame, flipped);
     Width      = width;
     Tints      = tints;
     VertColors = vertColors;
     Height     = height;
     CreateVerticies(Color.White);
     Texture = spriteSheet;
 }
Exemple #4
0
        public override void CreateCosmeticChildren(ComponentManager Manager)
        {
            base.CreateCosmeticChildren(Manager);

            if (SharedPrimitive == null)
            {
                var spriteSheet = new NamedImageFrame("Entities\\Furniture\\bookshelf");
                SharedPrimitive = new OldBoxPrimitive(DwarfGame.GuiSkin.Device, 0.625f, 1.0f, 0.25f,
                                                      new OldBoxPrimitive.BoxTextureCoords(spriteSheet.SafeGetImage().Width, spriteSheet.SafeGetImage().Height,
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(0, 20, 20, 32), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(28, 20, 20, 32), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(20, 0, 8, 20), false),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(0, 0, 1, 1), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(20, 20, 8, 32), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(20, 52, 8, 32), true)));
            }

            AddChild(new PrimitiveComponent(Manager,
                                            Matrix.CreateTranslation(new Vector3(-0.25f, 0.0f, 0.35f - 0.15f)),
                                            new Vector3(0.5f, 0.5f, 0.5f),
                                            new Vector3(0.0f, 0.0f, 0.0f),
                                            SharedPrimitive,
                                            "Entities\\Furniture\\bookshelf"))
            .SetFlag(Flag.ShouldSerialize, false);

            AddChild(new GenericVoxelListener(Manager, Matrix.Identity, new Vector3(0.5f, 0.5f, 0.5f), new Vector3(0.0f, -0.5f, 0.0f), (changeEvent) =>
            {
                if (changeEvent.Type == VoxelChangeEventType.VoxelTypeChanged && changeEvent.NewVoxelType == 0)
                {
                    Die();
                }
            })).SetFlag(Flag.ShouldSerialize, false).SetFlag(Flag.RotateBoundingBox, true);
        }
Exemple #5
0
        public override void CreateCosmeticChildren(ComponentManager Manager)
        {
            base.CreateCosmeticChildren(Manager);

            if (SharedPrimitive == null)
            {
                var spriteSheet = new NamedImageFrame("Entities\\Furniture\\bedtex");
                SharedPrimitive = new OldBoxPrimitive(DwarfGame.GuiSkin.Device, 0.8f, 0.5f, 1.8f,
                                                      new OldBoxPrimitive.BoxTextureCoords(spriteSheet.SafeGetImage().Width, spriteSheet.SafeGetImage().Height,
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(0, 24, 24, 16), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(72, 24, 24, 16), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(24, 0, 48, 24), false),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(0, 0, 1, 1), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(24, 24, 48, 16), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(24, 40, 48, 16), true)));
            }

            AddChild(new PrimitiveComponent(Manager,
                                            Matrix.CreateTranslation(-0.40f, 0.00f, -0.45f) * Matrix.CreateRotationY((float)Math.PI * 0.5f),
                                            new Vector3(1.0f, 1.0f, 2.0f),
                                            new Vector3(0.0f, 0.0f, 0.0f),
                                            SharedPrimitive,
                                            "Entities\\Furniture\\bedtex"))
            .SetFlag(Flag.ShouldSerialize, false)
            .SetFlag(Flag.RotateBoundingBox, true);

            AddChild(new GenericVoxelListener(Manager,
                                              Matrix.Identity,
                                              new Vector3(1.5f, 0.5f, 0.75f), // Position just below surface.
                                              new Vector3(0.5f, -0.30f, 0.0f),
                                              (v) =>
            {
                if (v.Type == VoxelChangeEventType.VoxelTypeChanged &&
                    v.NewVoxelType == 0)
                {
                    Die();
                }
            }))
            .SetFlag(Flag.ShouldSerialize, false)
            .SetFlag(Flag.RotateBoundingBox, true);
        }
Exemple #6
0
        public override void CreateCosmeticChildren(ComponentManager Manager)
        {
            base.CreateCosmeticChildren(Manager);

            if (SharedPrimitive == null)
            {
                var spriteSheet = new NamedImageFrame("Terrain\\terrain_tiles");
                SharedPrimitive = new OldBoxPrimitive(DwarfGame.GuiSkin.Device, 0.9f, 0.9f, 0.9f,
                                                      new OldBoxPrimitive.BoxTextureCoords(spriteSheet.SafeGetImage().Width, spriteSheet.SafeGetImage().Height,
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(224, 0, 32, 32), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(224, 0, 32, 32), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(256, 0, 32, 32), false),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(224, 0, 32, 32), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(224, 0, 32, 32), true),
                                                                                           new OldBoxPrimitive.FaceData(new Rectangle(224, 0, 32, 32), true)));
            }

            AddChild(new PrimitiveComponent(Manager,
                                            Matrix.CreateRotationY(MathFunctions.Rand(-0.25f, 0.25f)),
                                            new Vector3(1.0f, 1.0f, 1.0f),
                                            new Vector3(0.5f, 0.5f, 0.5f),
                                            SharedPrimitive,
                                            "Terrain\\terrain_tiles"))
            .SetFlag(Flag.ShouldSerialize, false);
        }