108 lines
2.5 KiB
Java
108 lines
2.5 KiB
Java
/*
|
|
BeamDecor.java
|
|
*
|
|
* Copyright (c) 2000, Ted Nelson and Tuomas Lukka
|
|
*
|
|
* You may use and distribute under the terms of either the GNU Lesser
|
|
* General Public License, either version 2 of the license or,
|
|
* at your choice, any later version. Alternatively, you may use and
|
|
* distribute under the terms of the XPL.
|
|
*
|
|
* See the LICENSE.lgpl and LICENSE.xpl files for the specific terms of
|
|
* the licenses.
|
|
*
|
|
* This software 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 README
|
|
* file for more details.
|
|
*
|
|
*/
|
|
/*
|
|
* Written by Tuomas Lukka
|
|
*/
|
|
|
|
package org.gzigzag;
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import java.util.*;
|
|
|
|
/** A class for drawing beam decorations.
|
|
* Beams are currently irregular octagons.
|
|
* NOTE: Beams are rendered in reverse order: the first beam put in here
|
|
* becomes the topmost.
|
|
*/
|
|
|
|
public class BeamDecor extends CoordDecor {
|
|
public static final String rcsid = "$Id: BeamDecor.java,v 1.4 2000/09/19 10:31:59 ajk Exp $";
|
|
public static boolean dbg = false;
|
|
static void p(String s) { if(dbg) System.out.println(s); }
|
|
static void pa(String s) { System.out.println(s); }
|
|
|
|
Color[] colors;
|
|
|
|
/** A simple class that knows how to efficiently build
|
|
* these things.
|
|
*/
|
|
static public class Builder extends CoordDecor.Builder {
|
|
Color []col;
|
|
public Builder(FlobSet into) {
|
|
super(into);
|
|
}
|
|
|
|
protected void makeRoom(int l) {
|
|
if(col != null && nth >= col.length)
|
|
endl();
|
|
super.makeRoom(l);
|
|
}
|
|
|
|
protected void alloc() {
|
|
super.alloc();
|
|
col = new Color[np/16];
|
|
}
|
|
/** Make a beam.
|
|
* Coords: first 8x, then 8y.
|
|
*/
|
|
public final void b(int []xy, Color c) {
|
|
makeRoom(16);
|
|
p("beam: "+p+" "+col+" "+curp+" "+nth);
|
|
for(int i=0; i<16; i++)
|
|
p[curp+i] = xy[i];
|
|
col[nth] = c;
|
|
curp += 16;
|
|
nth++;
|
|
}
|
|
protected Renderable create() {
|
|
Color[] col2 = col;
|
|
col = null;
|
|
return new BeamDecor(p, np, d, col2);
|
|
}
|
|
|
|
}
|
|
|
|
public BeamDecor(int[] coords, int n, int d, Color[] cols) {
|
|
super(coords, n, d);
|
|
this.colors = cols;
|
|
}
|
|
|
|
|
|
public void render(Graphics g) {
|
|
Color old = null;
|
|
old = g.getColor();
|
|
|
|
int[] x = new int[8];
|
|
int[] y = new int[8];
|
|
for(int i=(n-16)-n%16; i>=0; i-=16) {
|
|
for(int k = 0; k<8; k++)
|
|
x[k] = coords[i+k];
|
|
for(int k = 0; k<8; k++)
|
|
y[k] = coords[i+8+k];
|
|
|
|
g.setColor(colors[i/16]);
|
|
g.fillPolygon(x, y, 8);
|
|
}
|
|
|
|
g.setColor(old);
|
|
}
|
|
|
|
}
|