package org.pokenet.client.backend.time; import mdes.slick.sui.Label; import org.newdawn.slick.Color; import org.pokenet.client.GameClient; /** * Handles time and rendering of night. Also acts as a label for usage in GUI * @author shadowkanji * */ public class TimeService extends Label implements Runnable { private int m_hour, m_minutes, m_daylight, m_targetDaylight; private Thread m_thread; /** * Default constructor */ public TimeService() { super("00:00"); this.pack(); this.setLocation(4, 4); this.setVisible(true); this.setFont(GameClient.getFontLarge()); this.setForeground(new Color(255, 255, 255)); m_thread = new Thread(this); } /** * Called by thread.start() */ public void run() { String min; String hour; while(true) { m_minutes = m_minutes == 59 ? 0 : m_minutes + 1; if(m_minutes == 0) { m_hour = m_hour == 23 ? 0 : m_hour + 1; switch(m_hour) { case 3: m_targetDaylight = 150; break; case 4: m_targetDaylight = 125; break; case 5: m_targetDaylight = 100; break; case 6: m_targetDaylight = 75; break; case 7: m_targetDaylight = 0; break; case 17: m_targetDaylight = 75; break; case 18: m_targetDaylight = 100; break; case 19: m_targetDaylight = 125; break; case 20: m_targetDaylight = 150; break; case 21: m_targetDaylight = 175; break; default: break; } } hour = m_hour < 10 ? "0" + String.valueOf(m_hour) : String.valueOf(m_hour); min = m_minutes < 10 ? "0" + String.valueOf(m_minutes) : String.valueOf(m_minutes); this.setText(hour + ":" + min); this.pack(); try { Thread.sleep(60000); } catch (Exception e) {} } } /** * Updates daylight */ public void updateDaylight() { if(m_daylight < m_targetDaylight) m_daylight++; else if(m_daylight > m_targetDaylight) m_daylight--; } /** * Sets the current time and starts the time service * @param hours * @param minutes */ public void setTime(int hour, int minutes) { m_hour = hour; m_minutes = minutes; if(hour == 17) { m_daylight = 75; m_targetDaylight = 75; } else if(hour == 18) { m_daylight = 100; m_targetDaylight = 100; } else if(hour == 19) { m_daylight = 125; m_targetDaylight = 125; } else if(hour == 20) { m_daylight = 150; m_targetDaylight = 150; } else if(hour == 3) { m_daylight = 150; m_targetDaylight = 150; } else if(hour == 4) { m_daylight = 125; m_targetDaylight = 125; } else if(hour == 5) { m_daylight = 100; m_targetDaylight = 100; } else if(hour == 6) { m_daylight = 75; m_targetDaylight = 75; } else if(hour >= 8 && hour <= 17) { m_daylight = 0; m_targetDaylight = 0; } else { m_daylight = 175; m_targetDaylight = 175; } this.setText(hour + ":" + minutes); // Stop was causing this next part not to work for some reason... // hopefully this doesn't cause any problems if setTime gets called // in the future m_thread.start(); } /** * Returns true if it is night * @return */ public boolean isNight() { return m_hour >= 18 && m_hour <= 7; } /** * Returns the current daylight * @return */ public int getDaylight() { return m_daylight; } /** * Returns the target daylight * @return */ public int getTargetDaylight() { return m_targetDaylight; } }