Subversion Repositories BlockadePP

Rev

Rev 5 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * Created by SharpDevelop.
 * User: Freddie
 * Date: 28/05/2010
 * Time: 20:58
 *
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */

using System;
using System.Drawing;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Resources;

namespace blockade
{
        /// <summary>
        /// Description of Form2.
        /// </summary>
        public partial class Form2 : Form
        {
               
                public class smoke
                {
                        public Point loc;
                        public Color colour;
                       
                        public smoke(Point locN, Color colourN)
                        {
                                loc = locN;
                                colour = colourN;
                        }
                }
               
                Image bgImg, fgImg;
                int sel = 0;
                int glow = 0;
                int scroll = 0;
                float offX, offY, cX, cY;
                string[] langList;
                int lang = 0;
                int cDelay;
                bool changeLang;
                string[] play;
                string[] credits;
                string[] exit;
                string[] language;
               
                string[] creditsList;
               
                string pattern = "";
               
                List<smoke> smokes = new List<smoke>();
                bool smokeOn = false;
                bool hover = false;
                Random rnd = new Random();
               
                string keyPattern = "";
                string story = "lmeh";
               
                public Form2()
                {
                        //
                        // The InitializeComponent() call is required for Windows Forms designer support.
                        //
                        InitializeComponent();
                }
               
                void Form2Load(object sender, EventArgs e)
                {
                       
                        System.IO.StreamReader reader = new System.IO.StreamReader(@"data/menuStart.dat", System.Text.Encoding.UTF8);
                        string[] data = reader.ReadToEnd().Split(',');
                       
                        langList = new string[2];
                        bgImg = Image.FromFile(@"data/" + data[0]);
                        fgImg = Image.FromFile(@"data/" + data[1]);
                        cDelay = int.Parse(data[2]);
                        offX = (bgImg.Width - 300) / 2;
                        offY = (bgImg.Height - 300) / 2;
                        cX = 0.5f;
                        cY = 0.5f;
                        if (data[3] == "1")
                                smokeOn = true;
                       
                        reader = new System.IO.StreamReader(@"data/menuTexts.dat", System.Text.Encoding.UTF8);
                        string[] lines = reader.ReadToEnd().Split('\n');
                        langList = lines[0].Split(':');
                        play = lines[1].Split(':');
                        credits = lines[2].Split(':');
                        exit = lines[3].Split(':');
                        language = lines[4].Split(':');
                       
                        reader = new System.IO.StreamReader(@"data/credits.dat", System.Text.Encoding.UTF8);
                        creditsList = reader.ReadToEnd().Split('\n');
                       
                        reader.Close();
                       
                        timer1.Start();
                }
               
                void draw()
                {
                        Bitmap img  = new Bitmap(300, 300);
                        Graphics g = Graphics.FromImage(img);
                       
                        if (hover)
                        {
                                //make BLUE only array
                                float[][] blueArray = {
                                        new float[] { 0, 0, 0, 0, 0 },
                                        new float[] { 0, 0, 0, 0, 0 },
                                        new float[] { 0, 0, 1, 0, 0 },
                                        new float[] { 0, 0, 0, 1, 0 },
                                        new float[] { 0, 0, 0, 0, 1 }
                                };
                                System.Drawing.Imaging.ColorMatrix colourMatrix = new System.Drawing.Imaging.ColorMatrix(blueArray);
                                System.Drawing.Imaging.ImageAttributes imgAttributes = new System.Drawing.Imaging.ImageAttributes();
                                imgAttributes.SetColorMatrix(colourMatrix, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Default);
                               
                                Bitmap bgImgN = (Bitmap)bgImg;
                               
                                g.DrawImage(bgImgN, new Rectangle((int)-offX, (int)-offY, bgImg.Width, bgImg.Height), 0, 0, bgImg.Width, bgImg.Height, GraphicsUnit.Pixel, imgAttributes);
                        }
                        else
                                g.DrawImage(bgImg, -offX, -offY);
                       
                        g.DrawImage(fgImg, 0, 0, 300, 300);
                       
                        StringFormat sf = new StringFormat();
                        sf.Alignment = StringAlignment.Center;
                       
                        Font font1;
                       
                        if (changeLang)
                        {
                                font1 = new Font(FontFamily.GenericMonospace, 13, FontStyle.Bold);
                               
                                for (int i = 0; i < langList.Length; i++)
                                {
                                        if (lang == i)
                                                g.DrawString("--> " + langList[i] + " <--", font1, new SolidBrush(Color.FromArgb((int)(0 - scroll * 25.5f), 255 - Math.Abs(glow) * 5, Math.Abs(glow) * 25, 0)), 150, 70 + i * 18, sf);
                                        else
                                                g.DrawString("--> " + langList[i] + " <--", font1, new SolidBrush(Color.FromArgb((int)(0 - scroll * 25.5f), Color.White)), 150, 70 + i * 18, sf);
                                }
                        }
                        else if (scroll < 1)
                        {
                               
                                font1 = new Font(FontFamily.GenericMonospace, 20, FontStyle.Bold);
                       
                                if (sel == 0)
                                        g.DrawString("--> " + play[lang] + " <--", font1, new SolidBrush(Color.FromArgb((int)(255 + scroll * 25.5f), 255 - Math.Abs(glow) * 5, Math.Abs(glow) * 25, 0)), 150, 80, sf);
                                else
                                        g.DrawString("--- " + play[lang] + " ---", font1, new SolidBrush(Color.FromArgb((int)(255 + scroll * 25.5f), Color.White)), 150, 80, sf);
                                if (sel == 1)
                                        g.DrawString("--> " + credits[lang] + " <--", font1, new SolidBrush(Color.FromArgb((int)(255 + scroll * 25.5f), 255 - Math.Abs(glow) * 5, Math.Abs(glow) * 25, 0)), 150, 120, sf);
                                else
                                        g.DrawString("--- " + credits[lang] + " ---", font1, new SolidBrush(Color.FromArgb((int)(255 + scroll * 25.5f), Color.White)), 150, 120, sf);
                                if (sel == 2)
                                        g.DrawString("--> " + exit[lang] + " <--", font1, new SolidBrush(Color.FromArgb((int)(255 + scroll * 25.5f), 255 - Math.Abs(glow) * 5, Math.Abs(glow) * 25, 0)), 150, 160, sf);
                                else
                                        g.DrawString("--- " + exit[lang] + " ---", font1, new SolidBrush(Color.FromArgb((int)(255 + scroll * 25.5f), Color.White)), 150, 160, sf);
                                if (sel == 3)
                                        g.DrawString("--> " + language[lang] + " <--", font1, new SolidBrush(Color.FromArgb((int)(255 + scroll * 25.5f), 255 - Math.Abs(glow) * 5, Math.Abs(glow) * 25, 0)), 150, 200, sf);
                                else
                                        g.DrawString("--- " + language[lang] + " ---", font1, new SolidBrush(Color.FromArgb((int)(255 + scroll * 25.5f), Color.White)), 150, 200, sf);
                       
                        }
                        else
                        {
                                // credits
                                Image tempImg;

                                for (int i = 0; i < creditsList.Length; i++)
                                {
                                        if (scroll > i * cDelay && scroll < 100 + i * cDelay)
                                        {
                                                if (creditsList[i].Substring(0, 1) == "i")
                                                {
                                                        tempImg = Image.FromFile(@"data/" + creditsList[i].Substring(1));
                                                        g.DrawImage(tempImg, 150 - tempImg.Width / 2, 180 - (int)(scroll - i * cDelay));
                                                }
                                                else
                                                {
                                                        switch (creditsList[i].Substring(0, 1))
                                                        {
                                                                case ("b"):
                                                                        font1 = new Font(FontFamily.GenericMonospace, 16, FontStyle.Bold);
                                                                        break;
                                                                case ("l"):
                                                                        font1 = new Font(FontFamily.GenericMonospace, 20, FontStyle.Bold);
                                                                        break;
                                                                case ("s"):
                                                                        font1 = new Font(FontFamily.GenericMonospace, 8, FontStyle.Bold);
                                                                        break;
                                                                case ("n"):
                                                                        font1 = new Font(FontFamily.GenericMonospace, 13, FontStyle.Bold);
                                                                        break;
                                                                default:
                                                                        font1 = new Font(FontFamily.GenericMonospace, 13, FontStyle.Bold);
                                                                        break;
                                                        }
                                                        if (hover)
                                                                g.DrawString(creditsList[i].Substring(1), font1, new SolidBrush(Color.FromArgb(255 - (int)(Math.Abs((scroll - i * cDelay) - 50) / 50.0f * 255.0f), 0, 0, 255)), 150, 200 - (int)(scroll - i * cDelay), sf);
                                                        else
                                                                g.DrawString(creditsList[i].Substring(1), font1, new SolidBrush(Color.FromArgb(255 - (int)(Math.Abs((scroll - i * cDelay) - 50) / 50.0f * 255.0f), 255, 255, 255)), 150, 200 - (int)(scroll - i * cDelay), sf);
                                                }      
                                        }
                                }
                               
                        }
                       
                        if (smokeOn)
                        {
                                for (int i = 0; i < smokes.Count; i++)
                                        g.FillEllipse(new SolidBrush(smokes[i].colour), smokes[i].loc.X - 1, smokes[i].loc.Y - 1, 2, 2);
                        }
                       
                        this.BackgroundImage = (Image)img.Clone();
                       
                        g.Dispose();
                        img.Dispose();
                       
                }
               
                void go()
                {
                        Form1 game = new Form1(lang);
                        game.Show();
                        if (pattern == "3141")
                        {
                                game.towerTypes.Add(new Form1.towerType("Blue", "100000", "5000", "10000", "700", "1000", "10000", "0", "go.png:1", "basicTurret.png:10:hyperTurret.png:10:protonTurret.Png:10:neutronTurret1.png:10:craverTurret1.png:10:rackerTurret1.png:10:wraverTurret1.png:10","single1.wav", "2", "250", "5","Tim32 SuperSheep-0 'Lassitor'", "Lassitor:Lassitor:Lassitor:Lassitor:Lassitor:Lassitor:Lassitor:Lassitor:Lassitor"));
                        }
                        timer1.Stop();
                        this.Hide();
                }
               
                void viewCredits()
                {
                        scroll = 1;
                }
               
                void Form2KeyDown(object sender, KeyEventArgs e)
                {
                       
                        this.Text = keyPattern;
                        if (e.KeyCode == Keys.Back)
                    {
                                if (keyPattern.ToLower().EndsWith("story"))
                                {
                                        setStory("blockadeStory.txt");
                                        creditsList = story.Split('\n');
                                        viewCredits();
                                }
                                else if (keyPattern.ToLower().EndsWith("aremd0"))
                                {
                                        setStory("arem0.txt");
                                        creditsList = story.Split('\n');
                                        viewCredits();
                                }
                    }
                       
                        keyPattern += e.KeyCode.ToString();
                           
                        if (changeLang)
                        {
                                if (e.KeyCode == Keys.Up)
                                {
                                        lang--;
                                        if (lang < 0)
                                                lang = langList.Length - 1;
                                }
                                else if (e.KeyCode == Keys.Down)
                                {
                                        lang++;
                                        if (lang > langList.Length - 1)
                                                lang = 0;
                                }
                        }
                        else
                        {
                                if (e.KeyCode == Keys.Up)
                                {
                                        sel--;
                                        if (sel < 0)
                                                sel = 3;
                                }
                                else if (e.KeyCode == Keys.Down)
                                {
                                        sel++;
                                        if (sel > 3)
                                                sel = 0;
                                }
                        }
                        if (e.KeyCode == Keys.Enter)
                        {
                                if (changeLang)
                                {
                                        changeLang = false;
                                        pattern += lang;
                                }
                                else if (scroll == 0)
                                {
                                        if (sel == 0)
                                                go();
                                        else if (sel == 1)
                                                viewCredits();
                                        else if (sel == 3)
                                        {
                                                scroll = 0;
                                                changeLang = true;
                                        }
                                        else
                                                Application.ExitThread();
                                }
                                else
                                        scroll = -10;
                        }
                        draw();
                }
                       
                void Timer1Tick(object sender, EventArgs e)
                {
                        if (scroll < 1)
                        {
                                glow++;
                                if (glow > 10)
                                        glow = -10;
                        }
                        if (changeLang)
                        {
                                scroll--;
                                if (scroll < -10)
                                        scroll = -10;
                        }
                        else if (scroll != 0)
                        {
                                scroll++;
                                if (scroll > creditsList.Length * cDelay + 100)
                                {
                                        scroll = -10;
                                }
                        }
                       
                        offX += cX;
                        offY += cY;
                       
                        if (offX < 0.0f)
                        {
                                cX = 0.5f;
                                offX = 0.0f;
                        }
                        else if (offX > bgImg.Width - 300.0f)
                        {
                                cX = -0.5f;
                                offX = bgImg.Width - 300.0f;
                        }
                        if (offY < 0.0f)
                        {
                                cY = 0.5f;
                                offY = 0.0f;
                        }
                        else if (offY > bgImg.Height - 300.0f)
                        {
                                cY = -0.5f;
                                offY = bgImg.Height - 300.0f;
                        }
                       
                        if (smokeOn)
                        {
                                for (int i = smokes.Count - 1; i >= 0; i--)
                                {      
                                        if (rnd.Next(0, 18) == 0)
                                                smokes.RemoveAt(i);
                                        else
                                        {
                                                if (rnd.Next(0, 2) == 0)
                                                        smokes[i].loc.X--;
                                                if (rnd.Next(0, 2) == 0)
                                                        smokes[i].loc.Y--;
                                        }
                                }
                               
                                int grey;
                               
                                for (int i = 0; i < 10; i++)
                                {
                                        if (rnd.Next(0,5) < 3)
                                        {
                                                grey = rnd.Next(50, 200);
                                                if (hover)
                                                        smokes.Add(new smoke(new Point(187, 275), Color.FromArgb(200, 0, 0, grey)));
                                                else
                                                        smokes.Add(new smoke(new Point(187, 275), Color.FromArgb(200, grey, grey, grey)));
                                        }
                                }
                        }
                       
                        draw();
                }
               
                void Form2FormClosing(object sender, FormClosingEventArgs e)
                {
                        Application.ExitThread();
                }
               
                void Form2MouseClick(object sender, MouseEventArgs e)
                {
                        if (Math.Abs(e.X - 193) < 3 && Math.Abs(e.Y - 285) < 3)
                        {
                                System.Diagnostics.Process p = new System.Diagnostics.Process();
                                System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
                                psi.FileName = "http://tim32.org";
                                p.StartInfo = psi;
                                p.Start();
                        }
                }
               
                void Form2MouseMove(object sender, MouseEventArgs e)
                {
                        if (Math.Abs(e.X - 193) < 3 && Math.Abs(e.Y - 285) < 3)
                                hover = true;
                        else
                                hover = false;
                }
               
                public void setStory(string s)
                {      
                        System.Net.WebClient wClient = new System.Net.WebClient();
                        story = wClient.DownloadString("http://tim32.org/~freddie/Blockade/" + s);
                }
        }
}