Mega Code Archive

 
Categories / Android / Game
 

Abstract Sprite

/*  *                 [[ Frozen-Bubble ]]  *  * Copyright (c) 2000-2003 Guillaume Cottenceau.  * Java sourcecode - Copyright (c) 2003 Glenn Sanson.  *  * This code is distributed under the GNU General Public License  *  * This program is free software; you can redistribute it and/or  * modify it under the terms of the GNU General Public License  * version 2, as published by the Free Software Foundation.  *  * This program is distributed in the hope that it will be useful, but  * WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  * General Public License for more details.  *  * You should have received a copy of the GNU General Public License along  * with this program; if not, write to the Free Software Foundation, Inc.,  * 675 Mass Ave, Cambridge, MA 02139, USA.  *  *  * Artwork:  *    Alexis Younes <73lab at free.fr>  *      (everything but the bubbles)  *    Amaury Amblard-Ladurantie <amaury at linuxfr.org>  *      (the bubbles)  *  * Soundtrack:  *    Matthias Le Bidan <matthias.le_bidan at caramail.com>  *      (the three musics and all the sound effects)  *  * Design & Programming:  *    Guillaume Cottenceau <guillaume.cottenceau at free.fr>  *      (design and manage the project, whole Perl sourcecode)  *  * Java version:  *    Glenn Sanson <glenn.sanson at free.fr>  *      (whole Java sourcecode, including JIGA classes  *             http://glenn.sanson.free.fr/jiga/)  *  * Android port:  *    Pawel Aleksander Fedorynski <pfedor@fuw.edu.pl>  *  *          [[ http://glenn.sanson.free.fr/fb/ ]]  *          [[ http://www.frozen-bubble.org/   ]]  */ //package ch.racic.frozenegg; import java.util.Vector; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; import android.os.Bundle; public abstract class Sprite {   public static int TYPE_BUBBLE = 1;   public static int TYPE_IMAGE = 2;   public static int TYPE_LAUNCH_BUBBLE = 3;   public static int TYPE_PENGUIN = 4;   private Rect spriteArea;   private int saved_id;   public Sprite(Rect spriteArea)   {     this.spriteArea = spriteArea;     saved_id = -1;   }   public void saveState(Bundle map, Vector saved_sprites)   {     if (saved_id != -1)       return;     saved_id = saved_sprites.size();     saved_sprites.addElement(this);     map.putInt(String.format("%d-left", saved_id), spriteArea.left);     map.putInt(String.format("%d-right", saved_id), spriteArea.right);     map.putInt(String.format("%d-top", saved_id), spriteArea.top);     map.putInt(String.format("%d-bottom", saved_id), spriteArea.bottom);     map.putInt(String.format("%d-type", saved_id), getTypeId());   }   public final int getSavedId()   {     return saved_id;   }   public final void clearSavedId()   {     saved_id = -1;   }   public abstract int getTypeId();   public void changeSpriteArea(Rect newArea)   {     spriteArea = newArea;   }   public final void relativeMove(Point p)   {     spriteArea = new Rect(spriteArea);     spriteArea.offset(p.x, p.y);   }   public final void relativeMove(int x, int y)   {     spriteArea = new Rect(spriteArea);     spriteArea.offset(x, y);   }   public final void absoluteMove(Point p)   {     spriteArea = new Rect(spriteArea);     spriteArea.offsetTo(p.x, p.y);   }   public final Point getSpritePosition()   {     return new Point(spriteArea.left, spriteArea.top);   }   public final Rect getSpriteArea()   {     return spriteArea;   }   public static void drawImage(BmpWrap image, int x, int y,       Canvas c, double scale, int dx, int dy)   {     c.drawBitmap(image.bmp, (float)(x * scale + dx), (float)(y * scale + dy),         null);   }   public static void drawImageClipped(BmpWrap image, int x, int y, Rect clipr,       Canvas c, double scale, int dx, int dy)   {     c.save(Canvas.CLIP_SAVE_FLAG);     c.clipRect((float)(clipr.left * scale + dx),         (float)(clipr.top * scale + dy),         (float)(clipr.right * scale + dx),         (float)(clipr.bottom * scale + dy),         Region.Op.REPLACE);     c.drawBitmap(image.bmp, (float)(x * scale + dx), (float)(y * scale + dy),         null);     c.restore();   }   public abstract void paint(Canvas c, double scale, int dx, int dy); } /*  *                 [[ Frozen-Bubble ]]  *  * Copyright (c) 2000-2003 Guillaume Cottenceau.  * Java sourcecode - Copyright (c) 2003 Glenn Sanson.  *  * This code is distributed under the GNU General Public License  *  * This program is free software; you can redistribute it and/or  * modify it under the terms of the GNU General Public License  * version 2, as published by the Free Software Foundation.  *  * This program is distributed in the hope that it will be useful, but  * WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  * General Public License for more details.  *  * You should have received a copy of the GNU General Public License along  * with this program; if not, write to the Free Software Foundation, Inc.,  * 675 Mass Ave, Cambridge, MA 02139, USA.  *  *  * Artwork:  *    Alexis Younes <73lab at free.fr>  *      (everything but the bubbles)  *    Amaury Amblard-Ladurantie <amaury at linuxfr.org>  *      (the bubbles)  *  * Soundtrack:  *    Matthias Le Bidan <matthias.le_bidan at caramail.com>  *      (the three musics and all the sound effects)  *  * Design & Programming:  *    Guillaume Cottenceau <guillaume.cottenceau at free.fr>  *      (design and manage the project, whole Perl sourcecode)  *  * Java version:  *    Glenn Sanson <glenn.sanson at free.fr>  *      (whole Java sourcecode, including JIGA classes  *             http://glenn.sanson.free.fr/jiga/)  *  * Android port:  *    Pawel Aleksander Fedorynski <pfedor@fuw.edu.pl>  *  *          [[ http://glenn.sanson.free.fr/fb/ ]]  *          [[ http://www.frozen-bubble.org/   ]]  */ // Various classes take arguments of this type during construction.  We need // one level of indirection in case we want to swap the images from under them // (e.g., to resize them when the surface resolution changes.)  We couldn't // do it if references to Bitmap were kept directly everywhere since you can't // overwrite an Android Bitmap in place (or at least I haven't found how to // do it.) class BmpWrap {   BmpWrap(int id)   {     this.id = id;   }   public Bitmap bmp;   // Image id used for saving and restoring the image sprites.   public int id; }