using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Diagnostics; using System.Net; using SdlDotNet; using SdlDotNet.Core; using SdlDotNet.Graphics; using SdlDotNet.Graphics.Sprites; using SdlDotNet.Input; using SdlDotNet.Audio; using Newtonsoft.Json; namespace ColorCycling { class Scene { public Window window; Bitmap scenebmp; SceneList sceneList; System.Drawing.Bitmap bmp; public bool blend = false; Surface sceneSurface; int currentScene; long sceneStartTicks; int updateTimer = 0; public Scene(Window w, SceneList s) { window = w; sceneList = s; bmp = new System.Drawing.Bitmap(640, 480); } public void LoadScene(int sceneindex) { currentScene = sceneindex; string str = ""; if (File.Exists("scenes/" + sceneList.scenes[sceneindex].jsonpath + ".LBM.JSON")) { str = File.ReadAllText("scenes/" + sceneList.scenes[sceneindex].jsonpath + ".LBM.JSON"); } else { string response = GetHTTP("http://www.effectgames.com/demos/canvascycle/image.php?file=" + sceneList.scenes[sceneindex].jsonpath); str = response.Substring(1, response.Length - 4); File.WriteAllText("scenes/" + sceneList.scenes[sceneindex].jsonpath + ".LBM.JSON", str); } Music m = new Music("audio/" + sceneList.scenes[sceneindex].soundpath + ".ogg"); m.Play(true); JSONBitmap j = JsonConvert.DeserializeObject(str); scenebmp = new Bitmap(this, j); sceneStartTicks = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; scenebmp.render(bmp, false); sceneSurface = new Surface(bmp); } public void NextScene() { if (currentScene < 34) { currentScene++; } else { currentScene = 0; } LoadScene(currentScene); } public void PreviousScene() { if (currentScene > 0) { currentScene--; } else { currentScene = 34; } LoadScene(currentScene); } string GetHTTP(string requeststr) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requeststr); request.KeepAlive = false; request.Method = "GET"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream()); return sr.ReadToEnd(); } public void Update() { updateTimer++; if (updateTimer > 2) { scenebmp.palette.cycle(scenebmp.palette.baseColors, GetTickCount(), 1, blend); scenebmp.render(bmp, false); Draw(); updateTimer = 0; } else { } } long GetTickCount() { long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; return milliseconds - sceneStartTicks; } void Draw() { sceneSurface = new Surface(bmp); window.BlitToScreen(sceneSurface); sceneSurface.Dispose(); } } }