group.java

来自「Sony Ericsson手机上的Facebook客户端全套代码」· Java 代码 · 共 239 行

JAVA
239
字号
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   Group.java

package se.southend.drops.scene;

import java.util.Vector;
import javax.microedition.lcdui.Graphics;

// Referenced classes of package se.southend.drops.scene:
//            Node, Sprite, Camera

public class Group extends Node
{

    public Group()
    {
        children = new Vector(3);
    }

    public Node find(String id)
    {
        if(super.find(id) != null)
            return this;
        for(int i = 0; i < children.size(); i++)
        {
            Node child = (Node)children.elementAt(i);
            Node found = child.find(id);
            if(found != null)
                return found;
        }

        return null;
    }

    public void add(Node node)
    {
        children.addElement(node);
        node.setParent(this);
        node.setParentPosition(getX(), getY(), getZ());
        sizeUpdated = true;
    }

    public void add(Node node, String id)
    {
        node.setId(id);
        add(node);
    }

    public void remove(Node node)
    {
        children.removeElement(node);
        sizeUpdated = true;
    }

    public void remove(int node)
    {
        children.removeElementAt(node);
        sizeUpdated = true;
    }

    public void empty()
    {
        children.removeAllElements();
        sizeUpdated = true;
    }

    public Node getChild(int index)
    {
        return (Node)children.elementAt(index);
    }

    public int getChildCount()
    {
        return children.size();
    }

    public Vector getChildren()
    {
        return children;
    }

    public final void setWorldPosition(int x, int y)
    {
        super.setWorldPosition(x, y);
        updateChildren();
    }

    public final void setLocalPosition(int x, int y)
    {
        super.setLocalPosition(x, y);
        updateChildren();
    }

    public final void setWorldPosition(int x, int y, int z)
    {
        super.setWorldPosition(x, y, z);
        updateChildren();
    }

    public final void setLocalPosition(int x, int y, int z)
    {
        super.setLocalPosition(x, y, z);
        updateChildren();
    }

    public final void setParentPosition(int x, int y, int z)
    {
        super.setParentPosition(x, y, z);
        updateChildren();
    }

    public final void adjustToCamera(Camera camera)
    {
        for(int i = 0; i < children.size(); i++)
        {
            Node node = (Node)children.elementAt(i);
            if(node.isVisible())
                node.adjustToCamera(camera);
        }

    }

    public Vector getAllDescendants()
    {
        Vector children = new Vector();
        addToDescendants(this, children);
        return children;
    }

    public int getWidth()
    {
        int xMin = 0x7fffffff;
        int xMax = 0x80000000;
        Vector children = getAllDescendants();
        int nbrChildren = children.size();
        for(int i = 0; i < nbrChildren; i++)
        {
            Node node = (Node)children.elementAt(i);
            if(!(node instanceof Sprite))
                continue;
            Sprite sprite = (Sprite)node;
            int xSpr = (sprite.getX() >> 8) - sprite.getAnchorX();
            int wSpr = sprite.getWidth();
            if(xSpr < xMin)
                xMin = xSpr;
            if(xSpr + wSpr > xMax)
                xMax = xSpr + wSpr;
        }

        return xMax <= xMin ? 0 : xMax - xMin;
    }

    public int getHeight()
    {
        int yMin = 0x7fffffff;
        int yMax = 0x80000000;
        Vector children = getAllDescendants();
        int nbrChildren = children.size();
        for(int i = 0; i < nbrChildren; i++)
        {
            Node node = (Node)children.elementAt(i);
            if(!node.isVisible() || !(node instanceof Sprite))
                continue;
            Sprite sprite = (Sprite)node;
            int ySpr = (sprite.getY() >> 8) - sprite.getAnchorY();
            int hSpr = sprite.getHeight();
            if(ySpr < yMin)
                yMin = ySpr;
            if(ySpr + hSpr > yMax)
                yMax = ySpr + hSpr;
        }

        return yMax <= yMin ? 0 : yMax - yMin;
    }

    public void paint(Graphics graphics)
    {
        if(sizeUpdated || sorted == null)
        {
            sizeUpdated = false;
            sorted = new Node[children.size()];
            children.copyInto(sorted);
        }
        sort(sorted);
        int nbrNodes = sorted.length;
        for(int i = 0; i < nbrNodes; i++)
        {
            Node node = sorted[i];
            if(node.isVisible())
                node.paint(graphics);
        }

    }

    private final void updateChildren()
    {
        for(int i = 0; i < children.size(); i++)
        {
            Node node = (Node)children.elementAt(i);
            node.setParentPosition(getX(), getY(), getZ());
        }

    }

    private static void addToDescendants(Group group, Vector children)
    {
        for(int i = 0; i < group.getChildCount(); i++)
        {
            Node child = group.getChild(i);
            children.addElement(child);
            if(child instanceof Group)
                addToDescendants((Group)child, children);
        }

    }

    static void sort(Node sorted[])
    {
        int nbrNodes = sorted.length;
        for(int current = 1; current < nbrNodes; current++)
        {
            Node node = sorted[current];
            int zNode = node.getZ();
            int compare;
            for(compare = current - 1; compare >= 0 && sorted[compare].getZ() > zNode; compare--)
                sorted[compare + 1] = sorted[compare];

            sorted[compare + 1] = node;
        }

    }

    boolean sizeUpdated;
    Vector children;
    Node sorted[];
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?