Changeset 140


Ignore:
Timestamp:
04/24/12 12:25:28 (3 years ago)
Author:
zpurdy
Message:

Lots of improvements and 3 new levels for Energy Transfer MiniGame?.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Code/oMaE/oMaE/MiniGames/EnergyTransfer.cs

    r126 r140  
    1515namespace oMaE.MiniGames
    1616{
    17     public enum EnergyTypes { None, Heat, Kinetic, Chemical, Electric, Wind }
     17    public enum EnergyTypes { None, Heat, Kinetic, Chemical, Electric, Wind, Fire }
     18   
    1819
    1920    public class EnergyTransfer : MiniGame
    2021    {
     22        public List<Slot> toBeChecked = new List<Slot>();
    2123        public List<ConnectableSlot> connectableSlots = new List<ConnectableSlot>();
    2224        public List<Piece> pieces = new List<Piece>();
     25        public static Dictionary<EnergyTypes, string> stringDic = new Dictionary<EnergyTypes, string>()
     26            {
     27                {EnergyTypes.Heat, "heat"},
     28                {EnergyTypes.Kinetic, "kinetic"},
     29                {EnergyTypes.Chemical, "chemical"},
     30                {EnergyTypes.Electric, "electric"},
     31                {EnergyTypes.Wind, "wind"},
     32                {EnergyTypes.Fire, "fire"},
     33            };
     34       
    2335        Slot source;
     36
     37        private string incorrectString;
     38        private bool displayIncorrect = false;
    2439
    2540        public int SlotDistance = 100;
     
    3449        public override void Initialize()
    3550        {
     51            if (game < 0 || game > 3)
     52                game = 0;
     53           
    3654            if (game == 0)
    3755            {
     
    4563                    + SlotDistance;
    4664                ETDoor door = new ETDoor(this,
    47                     doorX, 200, null);
    48                 children.Add(door);
     65                    doorX, 200, null, DoorType.Conduction);
     66                children.Add(door);
     67                toBeChecked.Add(door);
    4968               
    5069                Pipe pipe = new Pipe(this, true, 100, 420);
    5170                children.Add(pipe);
    52                 pieces.Add(pipe);             
     71                pieces.Add(pipe);
     72
     73                Wood wood = new Wood(this, true, 250, 420);
     74                children.Add(wood);
     75                pieces.Add(wood);   
    5376               
    5477                ConnectableSlot slot1 = new ConnectableSlot(this,
     
    5679                door.In = slot1;
    5780                source.Out = slot1;
     81                toBeChecked.Add(slot1);
    5882                connectableSlots.Add(slot1);
    5983
    6084                children.Add(slot1);             
    6185            }
    62            
     86            else if (game == 1)
     87            {
     88                Fire fire = new Fire(this, 100, 200, null);
     89                children.Add(fire);
     90                source = fire;
     91
     92                int slotX = fire.EndX + SlotDistance
     93                    - ConnectableSlot.ConnectableWidth / 2;
     94                int doorX = slotX + ConnectableSlot.ConnectableWidth / 2
     95                    + SlotDistance;
     96                ETDoor door = new ETDoor(this,
     97                    doorX, 200, null, DoorType.Fire);
     98                children.Add(door);
     99
     100                Pipe pipe = new Pipe(this, true, 100, 420);
     101                children.Add(pipe);
     102                pieces.Add(pipe);
     103
     104                Wood wood = new Wood(this, true, 250, 420);
     105                children.Add(wood);
     106                pieces.Add(wood);
     107
     108                ConnectableSlot slot1 = new ConnectableSlot(this,
     109                    slotX, 200, source, door);
     110                door.In = slot1;
     111                source.Out = slot1;
     112                toBeChecked.Add(slot1);
     113                connectableSlots.Add(slot1);
     114
     115                children.Add(slot1);   
     116            }
     117            else if (game == 2)
     118            {
     119                Outlet outlet = new Outlet(this, 100, 200, null);
     120                children.Add(outlet);
     121                source = outlet;
     122
     123                int slotX = outlet.EndX + SlotDistance
     124                    - ConnectableSlot.ConnectableWidth / 2;
     125                int doorX = slotX + ConnectableSlot.ConnectableWidth / 2
     126                    + SlotDistance;
     127                ETDoor door = new ETDoor(this,
     128                    doorX, 200, null, DoorType.Electricity);
     129                children.Add(door);
     130
     131                Pipe pipe = new Pipe(this, true, 100, 420);
     132                children.Add(pipe);
     133                pieces.Add(pipe);
     134
     135                Cord cord = new Cord(this, true, 250, 420);
     136                children.Add(cord);
     137                pieces.Add(cord);
     138
     139                Wood wood = new Wood(this, true, 400, 420);
     140                children.Add(wood);
     141                pieces.Add(wood);
     142
     143                ConnectableSlot slot1 = new ConnectableSlot(this,
     144                    slotX, 200, source, door);
     145                door.In = slot1;
     146                source.Out = slot1;
     147                toBeChecked.Add(slot1);
     148                connectableSlots.Add(slot1);
     149
     150                children.Add(slot1);
     151            }
     152
     153            else if (game == 3)
     154            {
     155                WindSource windsource = new WindSource(this, 100, 200, null);
     156                children.Add(windsource);
     157                source = windsource;
     158
     159                int slot1X = windsource.EndX + SlotDistance
     160                    - ConnectableSlot.ConnectableWidth / 2;
     161                int slot2X = slot1X + ConnectableSlot.ConnectableWidth / 2 + SlotDistance
     162                    - ConnectableSlot.ConnectableWidth / 2;
     163                int doorX = slot2X + ConnectableSlot.ConnectableWidth / 2
     164                    + SlotDistance;
     165                ETDoor door = new ETDoor(this,
     166                    doorX, 200, null, DoorType.Electricity);
     167                children.Add(door);
     168
     169                WindMill windmill = new WindMill(this, true, 50, 420);
     170                children.Add(windmill);
     171                pieces.Add(windmill);
     172
     173                Cord cord = new Cord(this, true, 150, 420);
     174                children.Add(cord);
     175                pieces.Add(cord);
     176
     177                Pipe pipe = new Pipe(this, true, 300, 420);
     178                children.Add(pipe);
     179                pieces.Add(pipe);
     180
     181                ConnectableSlot slot1 = new ConnectableSlot(this,
     182                    slot1X, 200, source, null);
     183                ConnectableSlot slot2 = new ConnectableSlot(this,
     184                    slot2X, 200, slot1, door);
     185                door.In = slot2;
     186                source.Out = slot1;
     187                slot1.Out = slot2;
     188                toBeChecked.Add(slot1);
     189                toBeChecked.Add(slot2);
     190                connectableSlots.Add(slot1);
     191                connectableSlots.Add(slot2);
     192
     193                children.Add(slot1);
     194                children.Add(slot2);
     195            }
    63196            base.Initialize();
    64197        }
     
    69202            {
    70203                bool correct = true;
    71                 foreach (ConnectableSlot slot in connectableSlots)
     204                foreach (Slot slot in toBeChecked)
    72205                {
    73206                    if (!slot.energyIn.Contains(slot.In.energyOut))
    74207                    {
     208                        incorrectString = "Incorrect. " + slot.In.name + " outputs energy type "
     209                            + stringDic[slot.In.energyOut] + " which cannot be input to " + slot.name + ".";
    75210                        correct = false;
     211                        displayIncorrect = true;
     212                        break;
    76213                    }
    77214                }
     
    99236        }
    100237
     238        public override void Update(GameState gamestate)
     239        {
     240            if (gamestate.Pressed(MouseButton.LEFT))
     241            {
     242                displayIncorrect = false;
     243            }
     244            base.Update();
     245        }
     246
    101247        public override void Draw(Screen2D screen)
    102248        {
     249            if (displayIncorrect)
     250            {
     251                Vector2 vec = screen.Measure(incorrectString);
     252                Vector2 stringLoc = new Vector2(30, 75);
     253                Rectangle textRectangle = new Rectangle((int)stringLoc.X, (int)stringLoc.Y, (int)vec.X, (int)vec.Y);
     254                screen.FillRectangle(textRectangle, Color.White);
     255                screen.DrawText(incorrectString, stringLoc, TextHorizontal.LEFT, TextVertical.TOP, Color.Black);
     256            }
    103257            screen.DrawText("Activate the door by placing pieces to transfer energy from one form to another.", new Vector2(30, 50), TextHorizontal.LEFT, TextVertical.TOP, Color.White);
    104258            screen.DrawLine(new Vector2(0, 390), new Vector2(1000, 390), Color.Black);
Note: See TracChangeset for help on using the changeset viewer.