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); }
/// <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); }
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); } }
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); }
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); }