/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.games.pong;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.image.BufferedImage;
import javax.swing.*;
import org.drools.games.GameConfiguration;
import org.drools.games.GameUI;
import org.kie.api.runtime.KieSession;
import org.kie.internal.runtime.StatefulKnowledgeSession;
import org.kie.api.runtime.rule.FactHandle;
import org.kie.api.runtime.rule.EntryPoint;
public class PongUI extends GameUI {
private PongConfiguration pconf;
public PongUI(KieSession ksession, GameConfiguration conf) {
super(ksession, conf);
this.pconf = (PongConfiguration) conf;
}
@Override
public void init() {
super.init();
registerWindowListenerOnFrame(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
getKieSession().halt();
}
});
}
public void drawGame(Ball ball, Bat bat1, Bat bat2, Player p1, Player p2) {
Graphics tableG = getGraphics(); //ui.getTablePanel().getTableG();
tableG.setColor( Color.BLACK ); // background
tableG.fillRect(0,0, getWidth(), getHeight() );
tableG.setColor( Color.WHITE ); // background
drawScore( p1, 100 );
drawScore( p2, pconf.getTableWidth()-120 );
drawTable();
drawBall(ball);
drawBat(bat1);
drawBat(bat2);
repaint();
}
public void drawTable() {
Graphics tableG = getGraphics(); //ui.getTablePanel().getTableG();
int padding = pconf.getPadding();
int tableWidth = pconf.getTableWidth();
int tableHeight = pconf.getTableHeight();
int sideLineWidth = pconf.getSideLineWidth();
tableG.fillRect( padding, padding,
tableWidth-(padding*2), sideLineWidth );
tableG.fillRect( padding, tableHeight-padding-sideLineWidth,
tableWidth-(padding*2), sideLineWidth );
// draw dash line net
int netWidth = pconf.getNetWidth();
int gap = pconf.getNetGap();
int dash = pconf.getNetDash();
int x = (tableWidth/2) - (netWidth/2);
for (int i = 0; i < tableHeight; i = i + dash + gap) {
tableG.fillRect( (int) x, i, netWidth, dash );
}
}
public void drawBall(Ball ball) {
Graphics g = getGraphics();
g.setColor( Color.WHITE ); // background
g.fillOval( ball.getX(), ball.getY(), ball.getWidth(), ball.getWidth() );
}
public void drawBat(Bat bat) {
Graphics g = getGraphics();
g.setColor( Color.WHITE ); // background
g.fillRect( bat.getX(), bat.getY(), bat.getWidth(), bat.getHeight() );
}
public void drawScore(Player p, int x) {
Graphics g = getGraphics(); //ui.getTablePanel().getTableG();
int y = (pconf.boundedTop()+ 60);
g.setColor( Color.BLACK ); // background
g.fillRect( x, y-60, 90, 90 );
FontRenderContext frc = ((Graphics2D)g).getFontRenderContext();
Font f = new Font("Monospaced",Font.BOLD, 70);
String s = "" + p.getScore();
TextLayout tl = new TextLayout(s, f, frc);
g.setColor( Color.WHITE );
tl.draw(((Graphics2D)g), x, y );
}
}