|   |   | 
| Line 1: | Line 1: | 
| − | /**
 | + | http://www.atitd.org/wiki/tale4/Image:GlassMacro.zip | 
| − |  *
 |  | 
| − |  * Glass.java is used for making sheetglass. At the moment it's a bit
 |  | 
| − |  * CC inefficient but should work with most if not all benches. If you
 |  | 
| − |  * have a bench which drops more than 4 times as much as it gains from
 |  | 
| − |  * 2cc it will drop bellow 1600. Additionally if you have a bench
 |  | 
| − |  * which drops more than 200 or heats more than 150 it will break
 |  | 
| − |  * glass. You should modify the numWindows and numCols to match the
 |  | 
| − |  * number of benches and how many Columns of them you have before they
 |  | 
| − |  * wrap to the next line. Bench windows should be pinned and lined up
 |  | 
| − |  * exactly next to eachother without any space between (if you'd
 |  | 
| − |  * rather not do this by hand there's a method in Functions.java which
 |  | 
| − |  * will do it for you).
 |  | 
| − |  *
 |  | 
| − |  * EldradUlthran 2/29/08
 |  | 
| − |  *
 |  | 
| − |  * Modified by Orrin
 |  | 
| − |  *
 |  | 
| − |  *
 |  | 
| − |  **/
 |  | 
| − | import java.awt.MouseInfo;
 |  | 
| − | import java.awt.Color;
 |  | 
| − |   |  | 
| − | public class Glass {
 |  | 
| − |     private int numWindows = 2; //Total Number of windows open
 |  | 
| − |     private int numCols = 1;	//Number of columns *OR* number of windows in each line. Same thing.
 |  | 
| − | 	private int isGuilded = 1;	//1 if guilded, 0 if private
 |  | 
| − | 	private int isLabelled = 1;	//1 if it has a label, 0 if not
 |  | 
| − | 	private int ySystemOffset = 45;	//Offset in px between the top of the screen and the top of the glazier bench dialogue
 |  | 
| − | 	private int YOffset = (16*(isGuilded+isLabelled));	//Total Y offset
 |  | 
| − |     private int windowX = 288;	//Width of the Glazier bench window
 |  | 
| − |     private int windowY = 416+YOffset;	//Height of the Glazier bench window
 |  | 
| − |     private int xRefresh = 10;	//Unknown, where to click to refresh the window?
 |  | 
| − |     private int yRefresh = 10;	//Unknown, where to click to refresh the window?
 |  | 
| − |     private int xCC = 32;		//X position of 'Add CC' button. Remember to take position when making an item.
 |  | 
| − |     private int yCC = 82+YOffset;	//Y position of 'Add CC' button. Remember to take position when making an item.
 |  | 
| − |     private int xSheetglass = 32;	//X position of 'Make SG' button
 |  | 
| − |     private int ySheetglass = 146+YOffset;	//Y position of 'Make SG' button
 |  | 
| − |     private int xTemp = 10;		//X Position of Temperature bar, aim it at the very very start of the bar.
 |  | 
| − |     private int yTemp = 318+YOffset;	//Y Position of Temperature bar, aim it at the middle of the bar
 |  | 
| − |     private int tempWidth = 268;	//Width of the Temperature bar, fixed.
 |  | 
| − |     private int xProject = 10;		//X Location of the window in which the current project time is displayed.
 |  | 
| − |     private int yProject = 398+YOffset;		//y Location of the window in which the current project time is displayed.
 |  | 
| − |     private int maxTemp = 2400 - 200;	//The maximum temp allowed. 200 is the safety margin in which it will not add more cc.
 |  | 
| − |     private int minTemp = 1600 + 200;	//The minimum temp allowed. 200 is the safety margin in which it will not start SG.
 |  | 
| − |     private int delay = 1;		//Delay between checks. MS?
 |  | 
| − |     private Functions functions;
 |  | 
| − | 	
 |  | 
| − |   |  | 
| − |     
 |  | 
| − |     public Glass() {
 |  | 
| − | 		
 |  | 
| − | 		//System.out.println(windowY);
 |  | 
| − | 		
 |  | 
| − | 		functions = new Functions(windowX, windowY, numWindows, numCols);
 |  | 
| − |         //functions.SetupWindows();
 |  | 
| − | 		
 |  | 
| − | 		int red=0;
 |  | 
| − | 		int green=0;
 |  | 
| − | 		int blue=0;
 |  | 
| − | 		int pixels=tempWidth;
 |  | 
| − | 		Color color;
 |  | 
| − | 		int[] temp = new int[numWindows];
 |  | 
| − | 		int[] oldtemp = new int[numWindows];
 |  | 
| − | 		int i,w;
 |  | 
| − | 		boolean projectCooling=false;
 |  | 
| − | 		
 |  | 
| − | 		System.out.println("****************");
 |  | 
| − | 		
 |  | 
| − | 		System.out.println("YTemp: " + yTemp);
 |  | 
| − | 		
 |  | 
| − | 		//??
 |  | 
| − | 		while(true){
 |  | 
| − | 			//repeats over all open windows
 |  | 
| − | 			for(w=0;w<numWindows;w++){
 |  | 
| − | 				System.out.println(WindowNumber % NumberOfRows);
 |  | 
| − | 				
 |  | 
| − | 				projectCooling = false;
 |  | 
| − | 				
 |  | 
| − | 				for(i=0;i<=tempWidth;i++){
 |  | 
| − | 					color = functions.getPixelColor(xTemp + i, yTemp, w);
 |  | 
| − | 					red = color.getRed();
 |  | 
| − | 					green = color.getGreen();
 |  | 
| − | 					blue = color.getBlue();
 |  | 
| − | 					//System.out.println("Red: " + red);
 |  | 
| − | 					//System.out.println("Green: " + green);
 |  | 
| − | 					//System.out.println("Blue: " + blue);
 |  | 
| − | 					//System.out.println("-----------");
 |  | 
| − | 					if((red-20)<green){ //Looks to see where the red stops
 |  | 
| − | 						pixels = i; //sets 'pixels' to the length of the temp bar
 |  | 
| − | 						//System.out.println("pixels:" + pixels);
 |  | 
| − | 						//temp[w] = (int)pixels*187000/10000;
 |  | 
| − | 						//System.out.println("Calculated Temperature: " + temp[w]);
 |  | 
| − | 						break;
 |  | 
| − | 					}
 |  | 
| − | 				}
 |  | 
| − | 				
 |  | 
| − | 				//Scans the line of pixels defined by ProjectX for anything dark, which would mean a project is in progress
 |  | 
| − | 				for(i=0;i<tempWidth;i++){
 |  | 
| − | 					color = functions.getPixelColor(xProject + i, yProject, w);
 |  | 
| − | 					red = color.getRed();
 |  | 
| − | 					green = color.getGreen();
 |  | 
| − | 					blue = color.getBlue();
 |  | 
| − | 					if(blue < 30 && green < 30 && red < 30){
 |  | 
| − | 						projectCooling = true;
 |  | 
| − | 						break;
 |  | 
| − | 					}
 |  | 
| − | 				}
 |  | 
| − | 		
 |  | 
| − | 				if(!projectCooling && temp[w]>1600 && temp[w]<2400){
 |  | 
| − | 					System.out.println("Starting Sheetglass" + "Window: " + w);
 |  | 
| − | 					functions.PressButton(xRefresh, yRefresh, w);
 |  | 
| − | 					functions.delay(50);
 |  | 
| − | 					functions.PressButton(xSheetglass, ySheetglass, w);
 |  | 
| − | 				}
 |  | 
| − | 				
 |  | 
| − | 				oldtemp[w]=temp[w];
 |  | 
| − | 				temp[w] = (int)pixels*186567/10000;
 |  | 
| − | 				if(temp[w]!=oldtemp[w]){
 |  | 
| − | 					System.out.println("CurrentTemp:" + temp[w] + "Window: " +  w);
 |  | 
| − | 					if(temp[w]<oldtemp[w] && temp[w]<maxTemp){
 |  | 
| − | 						System.out.println("adding CC" + "Window: " +  w);
 |  | 
| − | 						functions.PressButton(xCC, yCC, w);
 |  | 
| − | 						if(temp[w]<minTemp){
 |  | 
| − | 							System.out.println("adding extra CC" + "Window: " +  w);
 |  | 
| − | 							functions.PressButton(xCC, yCC, w);
 |  | 
| − | 							functions.PressButton(xCC, yCC, w);
 |  | 
| − | 							functions.PressButton(xCC, yCC, w);
 |  | 
| − | 							functions.PressButton(xCC, yCC, w);
 |  | 
| − | 						}
 |  | 
| − | 					}
 |  | 
| − | 				}
 |  | 
| − | 			}
 |  | 
| − | 			
 |  | 
| − | 			functions.delay(50);
 |  | 
| − | 		}
 |  | 
| − | 	}
 |  | 
| − | 	public static void main(String[] args) {
 |  | 
| − | 		new Glass();
 |  | 
| − | 	}
 |  | 
| − | }
 |  |