@ -59,10 +59,11 @@ public class ScreenshotAppState extends AbstractAppState implements ActionListen
private static final Logger logger = Logger . getLogger ( ScreenshotAppState . class . getName ( ) ) ;
private static final Logger logger = Logger . getLogger ( ScreenshotAppState . class . getName ( ) ) ;
private String filePath = null ;
private String filePath = null ;
private boolean capture = false ;
private boolean capture = false ;
private boolean numbered = true ;
private Renderer renderer ;
private Renderer renderer ;
private RenderManager rm ;
private RenderManager rm ;
private ByteBuffer outBuf ;
private ByteBuffer outBuf ;
private String app Name;
private String shot Name;
private long shotIndex = 0 ;
private long shotIndex = 0 ;
private int width , height ;
private int width , height ;
@ -79,19 +80,32 @@ public class ScreenshotAppState extends AbstractAppState implements ActionListen
* Include the seperator at the end of the path .
* Include the seperator at the end of the path .
* Use an emptry string to use the application folder . Use NULL to use the system
* Use an emptry string to use the application folder . Use NULL to use the system
* default storage folder .
* default storage folder .
* @param file The screenshot file path to use . Include the seperator at the end of the path .
* @param filePath The screenshot file path to use . Include the seperator at the end of the path .
* /
* /
public ScreenshotAppState ( String filePath ) {
public ScreenshotAppState ( String filePath ) {
this . filePath = filePath ;
this . filePath = filePath ;
}
}
/ * *
* This constructor allows you to specify the output file path of the screenshot .
* Include the seperator at the end of the path .
* Use an emptry string to use the application folder . Use NULL to use the system
* default storage folder .
* @param filePath The screenshot file path to use . Include the seperator at the end of the path .
* @param fileName The name of the file to save the screeshot as .
* /
public ScreenshotAppState ( String filePath , String fileName ) {
this . filePath = filePath ;
this . shotName = fileName ;
}
/ * *
/ * *
* This constructor allows you to specify the output file path of the screenshot and
* This constructor allows you to specify the output file path of the screenshot and
* a base index for the shot index .
* a base index for the shot index .
* Include the seperator at the end of the path .
* Include the seperator at the end of the path .
* Use an emptry string to use the application folder . Use NULL to use the system
* Use an emptry string to use the application folder . Use NULL to use the system
* default storage folder .
* default storage folder .
* @param file The screenshot file path to use . Include the seperator at the end of the path .
* @param filePath The screenshot file path to use . Include the seperator at the end of the path .
* @param shotIndex The base index for screen shots . The first screen shot will have
* @param shotIndex The base index for screen shots . The first screen shot will have
* shotIndex + 1 appended , the next shotIndex + 2 , and so on .
* shotIndex + 1 appended , the next shotIndex + 2 , and so on .
* /
* /
@ -100,17 +114,42 @@ public class ScreenshotAppState extends AbstractAppState implements ActionListen
this . shotIndex = shotIndex ;
this . shotIndex = shotIndex ;
}
}
/ * *
* This constructor allows you to specify the output file path of the screenshot and
* a base index for the shot index .
* Include the seperator at the end of the path .
* Use an emptry string to use the application folder . Use NULL to use the system
* default storage folder .
* @param filePath The screenshot file path to use . Include the seperator at the end of the path .
* @param fileName The name of the file to save the screeshot as .
* @param shotIndex The base index for screen shots . The first screen shot will have
* shotIndex + 1 appended , the next shotIndex + 2 , and so on .
* /
public ScreenshotAppState ( String filePath , String fileName , long shotIndex ) {
this . filePath = filePath ;
this . shotName = fileName ;
this . shotIndex = shotIndex ;
}
/ * *
/ * *
* Set the file path to store the screenshot .
* Set the file path to store the screenshot .
* Include the seperator at the end of the path .
* Include the seperator at the end of the path .
* Use an emptry string to use the application folder . Use NULL to use the system
* Use an emptry string to use the application folder . Use NULL to use the system
* default storage folder .
* default storage folder .
* @param file File path to use to store the screenshot . Include the seperator at the end of the path .
* @param filePath File path to use to store the screenshot . Include the seperator at the end of the path .
* /
* /
public void setFilePath ( String filePath ) {
public void setFilePath ( String filePath ) {
this . filePath = filePath ;
this . filePath = filePath ;
}
}
/ * *
* Set the file name of the screenshot .
* @param fileName File name to save the screenshot as .
* /
public void setFileName ( String fileName ) {
this . shotName = fileName ;
}
/ * *
/ * *
* Sets the base index that will used for subsequent screen shots .
* Sets the base index that will used for subsequent screen shots .
* /
* /
@ -118,6 +157,15 @@ public class ScreenshotAppState extends AbstractAppState implements ActionListen
this . shotIndex = index ;
this . shotIndex = index ;
}
}
/ * *
* Sets if the filename should be appended with a number representing the
* current sequence .
* @param numberedWanted If numbering is wanted .
* /
public void setIsNumbered ( boolean numberedWanted ) {
this . numbered = numberedWanted ;
}
@Override
@Override
public void initialize ( AppStateManager stateManager , Application app ) {
public void initialize ( AppStateManager stateManager , Application app ) {
if ( ! super . isInitialized ( ) ) {
if ( ! super . isInitialized ( ) ) {
@ -129,7 +177,9 @@ public class ScreenshotAppState extends AbstractAppState implements ActionListen
ViewPort last = vps . get ( vps . size ( ) - 1 ) ;
ViewPort last = vps . get ( vps . size ( ) - 1 ) ;
last . addProcessor ( this ) ;
last . addProcessor ( this ) ;
appName = app . getClass ( ) . getSimpleName ( ) ;
if ( shotName = = null ) {
shotName = app . getClass ( ) . getSimpleName ( ) ;
}
}
}
super . initialize ( stateManager , app ) ;
super . initialize ( stateManager , app ) ;
@ -171,7 +221,6 @@ public class ScreenshotAppState extends AbstractAppState implements ActionListen
public void postFrame ( FrameBuffer out ) {
public void postFrame ( FrameBuffer out ) {
if ( capture ) {
if ( capture ) {
capture = false ;
capture = false ;
shotIndex + + ;
Camera curCamera = rm . getCurrentCamera ( ) ;
Camera curCamera = rm . getCurrentCamera ( ) ;
int viewX = ( int ) ( curCamera . getViewPortLeft ( ) * curCamera . getWidth ( ) ) ;
int viewX = ( int ) ( curCamera . getViewPortLeft ( ) * curCamera . getWidth ( ) ) ;
@ -184,10 +233,18 @@ public class ScreenshotAppState extends AbstractAppState implements ActionListen
renderer . setViewPort ( viewX , viewY , viewWidth , viewHeight ) ;
renderer . setViewPort ( viewX , viewY , viewWidth , viewHeight ) ;
File file ;
File file ;
String filename ;
if ( numbered ) {
shotIndex + + ;
filename = shotName + shotIndex ;
} else {
filename = shotName ;
}
if ( filePath = = null ) {
if ( filePath = = null ) {
file = new File ( JmeSystem . getStorageFolder ( ) + File . separator + appName + shotIndex + ".png" ) . getAbsoluteFile ( ) ;
file = new File ( JmeSystem . getStorageFolder ( ) + File . separator + filename + ".png" ) . getAbsoluteFile ( ) ;
} else {
} else {
file = new File ( filePath + appName + shotIndex + ".png" ) . getAbsoluteFile ( ) ;
file = new File ( filePath + filename + ".png" ) . getAbsoluteFile ( ) ;
}
}
logger . log ( Level . FINE , "Saving ScreenShot to: {0}" , file . getAbsolutePath ( ) ) ;
logger . log ( Level . FINE , "Saving ScreenShot to: {0}" , file . getAbsolutePath ( ) ) ;