/* * 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; import org.kie.api.runtime.KieSession; import org.kie.api.runtime.rule.EntryPoint; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferStrategy; public class GameUI extends Canvas{ private GameConfiguration conf; private JFrame frame; private JPanel panel; private BufferStrategy bufferStrategy; private Graphics2D graphics; KieSession ksession; public GameUI(KieSession ksession, GameConfiguration conf) { this.ksession = ksession; this.conf = conf; } /** * Initialize the contents of the frame. */ public void init() { frame = new JFrame("Drools Example"); frame.setDefaultCloseOperation(conf.isExitOnClose() ? JFrame.EXIT_ON_CLOSE : JFrame.DISPOSE_ON_CLOSE); frame.setResizable( false ); frame.setBackground(Color.BLACK); frame.getContentPane().setBackground(Color.BLACK); panel = (JPanel) frame.getContentPane(); panel.setPreferredSize(new Dimension(conf.getWindowWidth(), conf.getWindowHeight())); panel.setLayout(null); setBounds(0, 0, conf.getWindowWidth(), conf.getWindowHeight()); panel.add(this); setIgnoreRepaint(true); panel.setFocusable(false); // GameUI is used in Canvas-based games only (Invaders, Pong) and only need keylistener on the external Swing JFrame setFocusable(false); KeyListener klistener = new GameKeyListener( ksession.getEntryPoint( "KeyPressedStream" ), ksession.getEntryPoint( "KeyReleasedStream" ) ); frame.addKeyListener(klistener); frame.setLocationRelativeTo(null); // Center in screen frame.pack(); frame.setResizable(false); frame.setVisible( true ); createBufferStrategy(2); bufferStrategy = getBufferStrategy(); } protected void registerWindowListenerOnFrame(WindowListener listener) { frame.addWindowListener(listener); } protected KieSession getKieSession() { return this.ksession; } public JPanel getCanvas() { return panel; } public Graphics getGraphics() { if ( graphics == null ) { graphics = (Graphics2D) bufferStrategy.getDrawGraphics(); } return graphics; } public void disposeGraphics() { if ( graphics != null ) { graphics.dispose(); } graphics = null; } public void repaint() { getBufferStrategy().show(); disposeGraphics(); } public static class GameKeyListener extends KeyAdapter { EntryPoint keyPressedEntryPoint; EntryPoint keyReleasedEntryPoint; public GameKeyListener(EntryPoint keyPressedEntryPoint, EntryPoint keyReleasedEntryPoint) { this.keyPressedEntryPoint = keyPressedEntryPoint; this.keyReleasedEntryPoint = keyReleasedEntryPoint; } public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { //System.out.println("pressed1" + e); this.keyPressedEntryPoint.insert( e ); } public void keyReleased(KeyEvent e) { //System.out.println("released1" + e); this.keyReleasedEntryPoint.insert( e ); } } }