/* * NSEWPiece - the cross pipe piece * * by Adam Doppelt * http://www.cs.brown.edu/people/amd/ */ import java.awt.*; public class NSEWPiece extends Piece { static PieceType type_; boolean swap_; static public void SetupStatics(Component c, Image image) { type_ = new PieceType(c); for (int loop = 0; loop < SLICES; ++loop) { type_.x1_[loop] = WEPiece.type_.x1_[loop]; type_.y1_[loop] = WEPiece.type_.y1_[loop]; type_.x2_[loop] = WEPiece.type_.x2_[loop]; type_.y2_[loop] = WEPiece.type_.y2_[loop]; type_.visible_[loop] = true; } type_.red_ = true; type_.green_ = true; type_.blue_ = true; type_.legalDirections_ = NORTH + SOUTH + EAST + WEST; type_.flipDirections_ = NORTH + WEST; if (image == null) { Graphics stampG = type_.stamp_.getGraphics(); stampG.setColor(Board.BACKGROUND); stampG.fillRect(0, 0, SIZE, SIZE); for (int loop = 0; loop < SLICES; ++loop) if (type_.visible_[loop]) PieceType.ShadeLine(stampG, type_.x1_[loop], type_.y1_[loop], type_.x2_[loop], type_.y2_[loop]); for (int loop = 0; loop < SLICES; ++loop) if (type_.visible_[loop]) PieceType.ShadeLine(stampG, type_.y1_[loop], type_.x1_[loop], type_.y2_[loop], type_.x2_[loop]); stampG.dispose(); } else type_.stamp_ = image; } public void WaterEnters(Water water) { if (oldDirection_ != NONE) Score.CompletedCross(); super.WaterEnters(water); swap_ = oldDirection_ == NORTH || oldDirection_ == SOUTH; } public void AdjustWater(Water water, int slice) { water.SetColor(type_.red_, type_.green_, type_.blue_, (double)slice / (double)DIV_SLICES); if (flip_) slice = DIV_SLICES - slice; if (type_.visible_[slice]) { if (swap_) water.SetTileOffset(type_.y1_[slice], type_.x1_[slice], type_.y2_[slice], type_.x2_[slice]); else water.SetTileOffset(type_.x1_[slice], type_.y1_[slice], type_.x2_[slice], type_.y2_[slice]); water.SetVisible(true); } else water.SetVisible(false); } public NSEWPiece() { super(type_); } }