private SpriteProperties GetFittingShape(int x, int y)
    {
        SpriteProperties testSprite    = null;
        SpriteProperties currentSprite = null;
        int count = 0;

        while (testSprite == null)
        {
            currentSprite = tileSettings.GetRandomTile();

            if (DoesShapeFitInGrid(x, y, (int)(currentSprite.width * 4), (int)(currentSprite.height * 4)) == true)
            {
                if (DoesShapeOverlap(x, y, (int)(currentSprite.width * 4), (int)(currentSprite.height * 4)) == false)
                {
                    testSprite = currentSprite;
                }
                else
                {
                    count++;
                }
            }
            else
            {
                count++;
            }

            if (count > 50)
            {
                break;
            }
        }

        return(testSprite);
    }
Ejemplo n.º 2
0
 /// <summary>
 /// Directly render a texture to the screen with the given position and properties.
 /// </summary>
 /// <param name="texture"></param>
 /// <param name="position"></param>
 /// <param name="properties"></param>
 public void Render(Texture2D texture, Vector2 position, SpriteProperties properties)
 {
     Render(texture
            , position
            , properties.SourceRectangle
            , properties.Tint
            , properties.Rotation
            , properties.Origin
            , properties.Scale
            , properties.SpriteEffects
            , originIsRelative: properties.OriginIsRelative);
 }
Ejemplo n.º 3
0
        public ScoreChunk(ShockwaveReader input, ChunkHeader header)
            : base(header)
        {
            int totalLength = input.ReadBigEndian <int>();
            int headerType  = input.ReadBigEndian <int>(); //-3

            int spritePropertiesOffsetThingy = input.ReadBigEndian <int>();

            int[] spritePropertyOffsets = new int[input.ReadBigEndian <int>() + 1];

            int notationOffset           = input.ReadBigEndian <int>() * 4 + 12 + spritePropertiesOffsetThingy;
            int lastSpritePropertyOffset = input.ReadBigEndian <int>();

            for (int i = 0; i < spritePropertyOffsets.Length; i++)
            {
                spritePropertyOffsets[i] = input.ReadBigEndian <int>();
            }

            Debug.Assert(input.Position == (Header.Offset + notationOffset), "What");

            int frameEndOffset = input.ReadBigEndian <int>();

            Remnants.Enqueue(input.ReadBigEndian <int>());

            Frames = new Frame[input.ReadBigEndian <int>()];
            short framesType = input.ReadBigEndian <short>(); //13, 14

            short channelLength  = input.ReadBigEndian <short>();
            short lastChannelMax = input.ReadBigEndian <short>(); //1006
            short lastChannel    = input.ReadBigEndian <short>();

            for (int i = 0; i < Frames.Length; i++)
            {
                Frames[i] = new Frame(input);
            }

            int[] spritePropertyOffsetIndices = new int[input.ReadBigEndian <int>()];
            for (int i = 0; i < spritePropertyOffsetIndices.Length; i++)
            {
                spritePropertyOffsetIndices[i] = input.ReadBigEndian <int>();
            }

            SpriteProperties[] spriteProperties = new SpriteProperties[spritePropertyOffsetIndices.Length];
            for (int i = 0; i < spritePropertyOffsetIndices.Length; i++)
            {
                int spritePropertyOffset = spritePropertyOffsets[spritePropertyOffsetIndices[i]];

                input.Position      = Header.Offset + notationOffset + spritePropertyOffset;
                spriteProperties[i] = new SpriteProperties(input);
            }
        }
Ejemplo n.º 4
0
        public ScoreChunk(ref ShockwaveReader input, ChunkHeader header)
            : base(header)
        {
            int totalLength = input.ReadInt32();
            int headerType  = input.ReadInt32(); //-3

            int spritePropertiesOffsetThingy = input.ReadInt32();

            int[] spritePropertyOffsets = new int[input.ReadInt32() + 1];

            int notationOffset           = input.ReadInt32() * sizeof(int) + 12 + spritePropertiesOffsetThingy; //..* 4 *..
            int lastSpritePropertyOffset = input.ReadInt32();

            for (int i = 0; i < spritePropertyOffsets.Length; i++)
            {
                spritePropertyOffsets[i] = input.ReadInt32();
            }

            //notationOffset

            int frameEndOffset = input.ReadInt32();

            Remnants.Enqueue(input.ReadInt32());

            Frames = new Frame[input.ReadInt32()];
            short framesType = input.ReadInt16(); //13, 14

            short channelLength  = input.ReadInt16();
            short lastChannelMax = input.ReadInt16(); //1006
            short lastChannel    = input.ReadInt16();

            for (int i = 0; i < Frames.Length; i++)
            {
                Frames[i] = new Frame(ref input);
            }

            int[] spritePropertyOffsetIndices = new int[input.ReadInt32()];
            for (int i = 0; i < spritePropertyOffsetIndices.Length; i++)
            {
                spritePropertyOffsetIndices[i] = input.ReadInt32();
            }

            SpriteProperties[] spriteProperties = new SpriteProperties[spritePropertyOffsetIndices.Length];
            for (int i = 0; i < spritePropertyOffsetIndices.Length; i++)
            {
                int spritePropertyOffset = spritePropertyOffsets[spritePropertyOffsetIndices[i]];

                input.Position      = notationOffset + spritePropertyOffset;
                spriteProperties[i] = new SpriteProperties(ref input);
            }
        }
    private GameObject FillGrid(Vector2 rootPos)
    {
        filledSpaces = new int[cellWidth, cellHeight];

        GameObject container = new GameObject();

        container.name = "Tile";
        container.transform.SetParent(root);
        //container.transform.localPosition = rootPos;
        tileContainers.Add(container);
        //root.transform.localPosition = (Vector3)rootPos;

        for (int x = 0; x < cellWidth; x++)
        {
            for (int y = 0; y < cellHeight; y++)
            {
                if (CheckGridSpace(x, y) == true)
                {
                    SpriteProperties targetSprite = GetFittingShape(x, y);

                    if (targetSprite == null)
                    {
                        Debug.LogError("timed out");
                        continue;
                    }

                    FillInSpaces(x, y, (int)(targetSprite.width * 4), (int)(targetSprite.height * 4));
                    GameObject tile = Instantiate(targetSprite.spritePrefab, container.transform) as GameObject;

                    currentSprites.Add(tile.GetComponentInChildren <SpriteRenderer>());
                    Vector2 targetLocation = new Vector2(x / 4f, y / 4f);

                    tile.transform.localPosition = targetLocation;
                    //tile.transform.SetParent(holder, true);
                }
            }
        }

        return(container);
    }
Ejemplo n.º 6
0
        public PopAnim ReadPam()
        {
            PopAnim anim = new PopAnim();

            using (BinaryReader reader = new BinaryReader(File.Open(FileName, FileMode.Open)))
            {
                if (File.Exists(FileName))
                {
                    //Animation properties
                    anim.Anim = Path.GetFileNameWithoutExtension(FileName);
                    //Sprite collection
                    anim.Sprites = new List <Sprite>();
                    //Sub Anim collection
                    anim.SubAnims = new List <SubAnim>();
                    //Header: 17 Bytes
                    byte[] header = reader.ReadBytes(17);
                    //Total sprites - Int16
                    short spriteCount = reader.ReadInt16();
                    //Reading sprites
                    for (short i = 0; i < spriteCount; i++)
                    {
                        //Name's length - Int16
                        short nameLength = reader.ReadInt16();
                        //Sprite name | Sprite ID - String
                        string spriteName = BinaryConverter.ByteToString(reader.ReadBytes(nameLength));
                        //Width - Int16
                        short width = reader.ReadInt16();
                        //Height - Int16
                        short height = reader.ReadInt16();
                        //Linear transformations - Int32 (divided by 65536)
                        double x1 = (double)reader.ReadInt32() / 65536;
                        double y1 = (double)reader.ReadInt32() / 65536;
                        double x2 = (double)reader.ReadInt32() / 65536;
                        double y2 = (double)reader.ReadInt32() / 65536;
                        //Left - Int16
                        short left = reader.ReadInt16();
                        //Top - Int16
                        short top = reader.ReadInt16();
                        //Split name
                        string[] name = spriteName.Split('|');
                        //Sprite properties
                        SpriteProperties properties = new SpriteProperties
                        {
                            ID     = name.Length > 1 ? name[1] : string.Empty,
                            Width  = width,
                            Height = height,
                            X1     = x1,
                            Y1     = y1,
                            X2     = x2,
                            Y2     = y2,
                            Left   = left,
                            Top    = top
                        };
                        //Sprite item
                        Sprite sprite = new Sprite
                        {
                            ID         = name[0],
                            Properties = properties
                        };
                        //Add to collection
                        anim.Sprites.Add(sprite);
                    }
                    //Total Sub Anims - Int16
                    short subAnimCount = reader.ReadInt16();
                    //Transform Array (2 Dimension)
                    SubAnimTransform[,] sats = new SubAnimTransform[subAnimCount, 255];
                    //Reading Sub Anims
                    for (short i = 0; i < subAnimCount; i++)
                    {
                        //Name's length - Int16
                        short nameLength = reader.ReadInt16();
                        //Name - String
                        string subAnimName = BinaryConverter.ByteToString(reader.ReadBytes(nameLength));
                        //Dummy bytes - 4 Bytes
                        int dummy = reader.ReadInt32();
                        //FPS - Int16
                        short fps = reader.ReadInt16();
                        //Frame count - Int16
                        short frames = reader.ReadInt16();
                        //Starting frame - Int16
                        short startingFrame = reader.ReadInt16();
                        //Ending frame - Int16
                        short endingFrame = reader.ReadInt16();
                        //Sub Anim item
                        SubAnim subAnim = new SubAnim
                        {
                            ID                = subAnimName,
                            Dummy             = dummy,
                            FPS               = fps,
                            Frames            = frames,
                            StartingFrame     = startingFrame,
                            EndingFrame       = endingFrame,
                            SubAnimTransforms = new List <SubAnimTransform>()
                        };
                        for (int j = 0; j < frames; j++)
                        {
                            //Transform key
                            byte key = reader.ReadByte();
                            //Key == 0x07 (Delete then create a new frame)
                            if (key == 0x07)
                            {
                                //TODO
                            }
                            //Total Transforms
                            byte transCount = reader.ReadByte();
                            //Key == 0x06 (Create new frame)
                            if (key == 0x06)
                            {
                            }
                            //Key == 0x04 (Keep using the current frame i guess)
                            else if (key == 0x04)
                            {
                            }
                            //Index in ref
                            short iRef = 0;
                            //Index ref num
                            short iRefNum = 0;
                            //Sub Anim num
                            short[] subAnimNum = new short[transCount];
                            for (byte k = 0; k < transCount; k++)
                            {
                                //Reference ID
                                byte refID = reader.ReadByte();
                                //Reference Type (0x00, 0x80, 0x90)
                                byte refType = reader.ReadByte();
                                //Reference Index
                                byte refIndex = reader.ReadByte();
                                //Declare
                                sats[i, iRefNum] = new SubAnimTransform
                                {
                                    RefID     = refID,
                                    RefType   = refType,
                                    RefIndex  = refIndex,
                                    Transform = new Transform()
                                };
                                //Check Reference Type
                                //TODO: Get exact RefID's value
                                bool isTransformDetected = false;
                                if (refType == 0x80)
                                {
                                    //Declare
                                    if (sats[sats[i, iRefNum].RefIndex, iRef] == null)
                                    {
                                        sats[sats[i, iRefNum].RefIndex, iRef] = new SubAnimTransform();
                                    }
                                    //Take an declared transform
                                    iRef = 0;
                                    //Get transform type from a declared transform
                                    byte transType = sats[sats[i, iRefNum].RefIndex, iRef].Transform.Type;
                                    //Allowed transfrom types
                                    List <byte> allowedTransTypes = new List <byte> {
                                        0x08, 0x18, 0x28, 0x38, 0x48, 0x68
                                    };
                                    //Check if transform type is valid
                                    if (allowedTransTypes.Contains(transType))
                                    {
                                        //Copy it
                                        //sats[i, iRefNum] = sats[sats[i, iRefNum].RefIndex, iRef];
                                        //
                                        subAnimNum[k] = iRefNum;
                                        //
                                        iRef++;
                                        iRefNum++;
                                        //
                                        isTransformDetected = true;
                                    }
                                }
                                //
                                if (!isTransformDetected)
                                {
                                    iRefNum++;
                                    subAnimNum[k] = iRefNum;
                                }
                            }
                            //Total Transforms
                            transCount = reader.ReadByte();
                            //Index ref num
                            iRefNum = 0;
                            //
                            for (byte k = 0; k < transCount; k++)
                            {
                                //Index ID
                                byte indexID = reader.ReadByte();
                                //Temporary fix
                                if (sats[i, iRefNum] == null)
                                {
                                    sats[i, iRefNum]           = new SubAnimTransform();
                                    sats[i, iRefNum].Transform = new Transform();
                                }
                                //Transform ID
                                sats[i, iRefNum].Transform.ID = indexID;
                                //
                                key = reader.ReadByte();
                                //
                                switch (key)
                                {
                                case 0x08:
                                    sats[i, iRefNum].Transform.Type  = key;
                                    sats[i, iRefNum].Transform.Point = new Point
                                    {
                                        Left = reader.ReadInt32(),
                                        Top  = reader.ReadInt32()
                                    };
                                    break;

                                case 0x18:
                                    sats[i, iRefNum].Transform.Type   = key;
                                    sats[i, iRefNum].Transform.Matrix = new Matrix
                                    {
                                        X1 = (double)reader.ReadInt32() / 65536,
                                        Y1 = (double)reader.ReadInt32() / 65536,
                                        X2 = (double)reader.ReadInt32() / 65536,
                                        Y2 = (double)reader.ReadInt32() / 65536
                                    };
                                    sats[i, iRefNum].Transform.Point = new Point
                                    {
                                        Left = reader.ReadInt32(),
                                        Top  = reader.ReadInt32()
                                    };
                                    break;

                                case 0x28:
                                    sats[i, iRefNum].Transform.Type  = key;
                                    sats[i, iRefNum].Transform.Point = new Point
                                    {
                                        Left = reader.ReadInt32(),
                                        Top  = reader.ReadInt32()
                                    };
                                    sats[i, iRefNum].Transform.Color = new Color
                                    {
                                        Red   = reader.ReadByte(),
                                        Green = reader.ReadByte(),
                                        Blue  = reader.ReadByte(),
                                        Alpha = reader.ReadByte()
                                    };
                                    break;

                                case 0x38:
                                    sats[i, iRefNum].Transform.Type   = key;
                                    sats[i, iRefNum].Transform.Matrix = new Matrix
                                    {
                                        X1 = (double)reader.ReadInt32() / 65536,
                                        Y1 = (double)reader.ReadInt32() / 65536,
                                        X2 = (double)reader.ReadInt32() / 65536,
                                        Y2 = (double)reader.ReadInt32() / 65536
                                    };
                                    sats[i, iRefNum].Transform.Point = new Point
                                    {
                                        Left = reader.ReadInt32(),
                                        Top  = reader.ReadInt32()
                                    };
                                    sats[i, iRefNum].Transform.Color = new Color()
                                    {
                                        Red   = reader.ReadByte(),
                                        Green = reader.ReadByte(),
                                        Blue  = reader.ReadByte(),
                                        Alpha = reader.ReadByte()
                                    };
                                    break;

                                case 0x48:
                                    sats[i, iRefNum].Transform.Type   = key;
                                    sats[i, iRefNum].Transform.Rotate = reader.ReadInt16();
                                    sats[i, iRefNum].Transform.Point  = new Point
                                    {
                                        Left = reader.ReadInt32(),
                                        Top  = reader.ReadInt32()
                                    };
                                    break;

                                case 0x68:
                                    sats[i, iRefNum].Transform.Type   = key;
                                    sats[i, iRefNum].Transform.Rotate = reader.ReadInt16();
                                    sats[i, iRefNum].Transform.Point  = new Point
                                    {
                                        Left = reader.ReadInt32(),
                                        Top  = reader.ReadInt32()
                                    };
                                    sats[i, iRefNum].Transform.Color = new Color()
                                    {
                                        Red   = reader.ReadByte(),
                                        Green = reader.ReadByte(),
                                        Blue  = reader.ReadByte(),
                                        Alpha = reader.ReadByte()
                                    };
                                    break;

                                default:
                                    break;
                                }
                                //
                                if (k != transCount - 1)
                                {
                                    //
                                    if (subAnimNum[k + 1] - subAnimNum[k] > 1)
                                    {
                                        //
                                        for (short l = 0; l < subAnimNum[k + 1] - subAnimNum[k] - 1; l++)
                                        {
                                            iRefNum++;
                                            sats[i, iRefNum].Transform = sats[i, iRefNum - 1].Transform;
                                        }
                                    }
                                }
                                subAnim.SubAnimTransforms.Add(sats[i, iRefNum]);
                                iRefNum++;
                            }
                        }
                        //Add to collection
                        anim.SubAnims.Add(subAnim);
                    }
                }
            }
            return(anim);
        }