package com.kreative.paint.material.sprite; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; public class SpriteSheet { public final BufferedImage image; public final String name; public final int intent; public final int columns; public final int rows; public final ArrayOrdering order; public final List<SpriteSheetSlice> slices; public final SpriteTreeNode.Branch root; public SpriteSheet( BufferedImage image, int hotspotX, int hotspotY, ColorTransform transform ) { this(image, "", 0, 1, 1, ArrayOrdering.LTR_TTB); int w = image.getWidth(), h = image.getHeight(); this.slices.add(new SpriteSheetSlice( 0, 0, w, h, hotspotX, hotspotY, 0, 0, 1, 1, ArrayOrdering.LTR_TTB, transform )); this.root.children.add(new SpriteTreeNode.Leaf("", 0, 0, 1)); } public SpriteSheet( BufferedImage image, String name, int intent, int columns, int rows, ArrayOrdering order ) { this.image = image; this.name = name; this.intent = intent; this.columns = columns; this.rows = rows; this.order = order; this.slices = new ArrayList<SpriteSheetSlice>(); this.root = new SpriteTreeNode.Branch(name, 0, 0); } public int getSliceCount() { int count = 0; for (SpriteSheetSlice slice : slices) { count += slice.getSliceCount(); } return count; } public Rectangle getSliceRect(int i) { if (i < 0) return null; for (SpriteSheetSlice slice : slices) { int count = slice.getSliceCount(); if (i < count) { return slice.getSliceRect(i); } else { i -= count; } } return null; } public SpriteSheetSlice getSlice(int i) { if (i < 0) return null; for (SpriteSheetSlice slice : slices) { int count = slice.getSliceCount(); if (i < count) { return slice.getSlice(i); } else { i -= count; } } return null; } public int getNodeCount() { return root.getChildCount(); } public SpriteTreeNode getNode(int index) { return root.getChild(index); } public SpriteTreeNode getNodeByPath(int... path) { return root.getChildByPath(path); } public int getSpriteCount() { return root.getChildCount(); } public Sprite getSprite(int index) { SpriteTreeNode c = root.getChild(index); return (c == null) ? null : new Sprite(this, c); } public Sprite getSpriteByPath(int... path) { SpriteTreeNode c = root.getChildByPath(path); return (c == null) ? null : new Sprite(this, c); } public List<Sprite> getSprites() { int n = root.getChildCount(); List<Sprite> sprites = new ArrayList<Sprite>(n); for (int i = 0; i < n; i++) { SpriteTreeNode c = root.getChild(i); sprites.add(new Sprite(this, c)); } return sprites; } }