Changeset 61


Ignore:
Timestamp:
02/24/12 11:09:05 (3 years ago)
Author:
acarter
Message:

Can now pick up parts to go in inventory

Location:
Code/oMaE
Files:
12 added
9 edited

Legend:

Unmodified
Added
Removed
  • Code/oMaE/oMaE/GameDriver.cs

    r60 r61  
    192192        public void EndSequence()
    193193        {
     194//            World3D.Visible = true;
    194195            Play2DGame(Map.Entrance.DoorLock, new Vector2(0, 0));
    195196            // FIXME
     
    267268        }
    268269
     270        public void GetNewItem()
     271        {
     272            if (World3D.UI.MapVisible)
     273            {
     274                Screens.Inventory.FindPart();
     275                DisplayScreen(Screens.Inventory);
     276
     277            }
     278            else
     279            {
     280                World3D.UI.MapVisible = true;
     281                DisplayMap();
     282            }
     283        }
    269284        /// <summary>
    270285        /// Displays a screen such as the inventory, or encyclophant.
  • Code/oMaE/oMaE/Overworld/Display3D.cs

    r58 r61  
    2727        /// The User Interface of the overworld.
    2828        /// </summary>
    29         private OverworldUI UI = new OverworldUI();
     29        public OverworldUI UI = new OverworldUI();
    3030        /// <summary>
    3131        /// The player's elephant.
     
    6161            Walls.AddRange(driver.Map.Walls);
    6262            Walls.AddRange(driver.Map.Doors);
     63            Walls.AddRange(driver.Map.Crates);
    6364            children.Add(new Tile(Color.DarkViolet, new Vector3(400, 0, 400), new Vector3(0, 0, -800), new Vector3(-800, 0, 0)));
    6465            children.Add(new Tile(Color.Gray, new Vector3(400, 40, 400), new Vector3(-800, 0, 0), new Vector3(0, 0, -800)));
  • Code/oMaE/oMaE/Overworld/Map.cs

    r59 r61  
    5454        public LinkedList<Door> Doors { get { return GenerateDoors(); } }
    5555        /// <summary>
     56        /// All the crates in the compound.
     57        /// </summary>
     58        public LinkedList<Crate> Crates { get { return GenerateCrates(); } }
     59        /// <summary>
    5660        /// Makes a new map.
    5761        /// </summary>
     
    150154                            minimap[3 * i + 2][3 * j + 3] = -1;
    151155                            break;
     156                        case 'M':
    152157                        case '*':
    153                             minimap[3 * i + 1][3 * j + 1] = 2;
     158                            minimap[3 * i + 2][3 * j + 2] = 2;
    154159                            break;
    155160                        case 'Y':
     
    161166            }
    162167            floodFill(1 + 3 * (int)start.Y, 1 + 3 * (int)start.X);
     168        }
     169        public void GetCrate(Point p)
     170        {
     171            minimap[p.X][p.Y] = 1;
     172        }
     173        private LinkedList<Crate> GenerateCrates()
     174        {
     175            LinkedList<Crate> crates = new LinkedList<Crate>();
     176            for (int i = 0; i < map.Length; ++i)
     177            {
     178                for (int j = 0; j < map[i].Length; ++j)
     179                {
     180                    Vector2 center = 20 * (new Vector2(j, i) - start);
     181                    switch (map[i][j])
     182                    {
     183                        case '*':
     184                        case 'M':
     185                            crates.AddFirst(new Crate(center, new Point(3*i + 2, 3*j+2)));
     186                            break;
     187                    }
     188                }
     189            }
     190            return crates;
    163191        }
    164192        private LinkedList<Door> GenerateDoors()
  • Code/oMaE/oMaE/Overworld/Objects/Crate.cs

    r59 r61  
    33using System.Linq;
    44using System.Text;
     5using Microsoft.Xna.Framework;
     6using Microsoft.Xna.Framework.Audio;
     7using Microsoft.Xna.Framework.Content;
     8using Microsoft.Xna.Framework.GamerServices;
     9using Microsoft.Xna.Framework.Graphics;
     10using Microsoft.Xna.Framework.Input;
     11using Microsoft.Xna.Framework.Media;
    512
    613namespace oMaE.Overworld.Objects
    714{
    8     class Crate
     15    /// <summary>
     16    /// A 3D crate.
     17    /// </summary>
     18    public class Crate : Collidable
    919    {
     20        private Model crate;
     21        private Texture2D texture;
     22        private Matrix transform;
     23        private Matrix[] transformBones;
     24        private Point map;
     25        private BoundingSphere bounds, near;
     26        private Vector3 center;
     27        private bool elephantNear;
     28        /// <summary>
     29        /// Makes a new crate
     30        /// </summary>
     31        /// <param name="Center">Center location</param>
     32        public Crate(Vector2 Center, Point Map)
     33        {
     34            map = Map;
     35            center = new Vector3(Center.X, 0, Center.Y);
     36            transform = Matrix.CreateTranslation(new Vector3(Center.X, 0, Center.Y));
     37            bounds = new BoundingSphere(center, 10);
     38            near = new BoundingSphere(center, 20f);
     39        }
     40        public override void LoadContent(ContentManager Content)
     41        {
     42            if (crate == null)
     43            {
     44                crate = Content.Load<Model>("Models/cratemaya");
     45                SetupEffectDefaults();
     46            }
     47            else if (texture == null)
     48            {
     49                texture = Content.Load<Texture2D>("Models/box");
     50            }
     51            base.LoadContent(Content);
     52        }
     53        private void SetupEffectDefaults()
     54        {
     55            transformBones = new Matrix[crate.Bones.Count];
     56            crate.CopyAbsoluteBoneTransformsTo(transformBones);
     57            foreach (ModelMesh mesh in crate.Meshes)
     58            {
     59                foreach (BasicEffect effect in mesh.Effects)
     60                {
     61                    effect.EnableDefaultLighting();
     62                    effect.TextureEnabled = false;
     63                }
     64            }
     65        }
     66        public void DrawModel(Model model, Matrix modelTransform, Matrix[] absoluteBoneTransforms)
     67        {
     68            //Draw the model, a model can have multiple meshes, so loop
     69            foreach (ModelMesh mesh in model.Meshes)
     70            {
     71                //This is where the mesh orientation is set
     72                foreach (BasicEffect effect in mesh.Effects)
     73                {
     74                    effect.Projection = driver.World3D.ProjectionMatrix;
     75                    effect.View = driver.World3D.ViewMatrix;
     76                    effect.World =
     77                        absoluteBoneTransforms[mesh.ParentBone.Index] *
     78                        modelTransform;
     79                }
     80                //Draw the mesh, will use the effects set above.
     81                mesh.Draw();
     82            }
     83        }
     84        public override bool Collide(Vector3 position, ref Vector3 delta)
     85        {
     86            if (Visible && bounds.Contains(position + delta) == ContainmentType.Contains)
     87                delta = Vector3.Zero;
     88            return base.Collide(position, ref delta);
     89        }
     90        public override bool Near(Vector3 position)
     91        {
     92            return (elephantNear = (Visible && near.Contains(position) == ContainmentType.Contains));
     93        }
     94        /// <summary>
     95        /// Updates the crate.
     96        /// </summary>
     97        /// <param name="gameState"></param>
     98        public override void Update(GameState gameState)
     99        {
     100            if (elephantNear && gameState.Pressed(Keys.Space))
     101            {
     102                gameState.handle(Keys.Space);
     103                Visible = false;
     104                driver.Map.GetCrate(map);
     105                driver.GetNewItem();
     106            }
     107            base.Update(gameState);
     108        }
     109        /// <summary>
     110        /// The text to be displayed for being near the crate.
     111        /// </summary>
     112        public override string NearText { get { return "Press the space button to open the crate."; } }
     113        /// <summary>
     114        /// Draws the crate.
     115        /// </summary>
     116        public override void Draw()
     117        {
     118            Matrix transformMatrix = transform;
     119            DrawModel(crate, transformMatrix, transformBones);
     120            base.Draw();
     121        }
    10122    }
    11123}
  • Code/oMaE/oMaE/Overworld/Objects/Elephant.cs

    r57 r61  
    3232        private static readonly float stopTurning = 0.75f;
    3333
     34        private Model trunk;
     35        protected Matrix[] transformBones;
     36
     37        private void SetupEffectDefaults()
     38        {
     39            transformBones = new Matrix[trunk.Bones.Count];
     40            trunk.CopyAbsoluteBoneTransformsTo(transformBones);
     41            foreach (ModelMesh mesh in trunk.Meshes)
     42            {
     43                foreach (BasicEffect effect in mesh.Effects)
     44                {
     45                    effect.EnableDefaultLighting();
     46                    effect.TextureEnabled = false;
     47                }
     48            }
     49        }
     50        public override void LoadContent(ContentManager Content)
     51        {
     52            if (trunk == null)
     53            {
     54                trunk = Content.Load<Model>("Models/trunk");
     55                SetupEffectDefaults();
     56            }
     57
     58            base.LoadContent(Content);
     59        }
    3460
    3561        public override void Update(GameState gameState) {
     
    99125            }
    100126        }
     127        public void DrawModel(Model model, Matrix modelTransform, Matrix[] absoluteBoneTransforms)
     128        {
     129            //Draw the model, a model can have multiple meshes, so loop
     130            foreach (ModelMesh mesh in model.Meshes)
     131            {
     132                //This is where the mesh orientation is set
     133                foreach (BasicEffect effect in mesh.Effects)
     134                {
     135                    effect.Projection = driver.World3D.ProjectionMatrix;
     136                    effect.View = driver.World3D.ViewMatrix;
     137                    effect.World =
     138                        absoluteBoneTransforms[mesh.ParentBone.Index] *
     139                        modelTransform;
     140                }
     141                //Draw the mesh, will use the effects set above.
     142                mesh.Draw();
     143            }
     144        }
     145        public override void Draw()
     146        {
     147            Matrix transformMatrix = Matrix.CreateScale(0.25f) * Matrix.CreateRotationZ(7 * MathHelper.Pi / 8) * Matrix.CreateRotationY(angle + 9 * MathHelper.Pi / 8)  * Matrix.CreateTranslation(position + 0.2f * Vector3.Up + 2f * Heading + 0.0f * Vector3.Cross(Heading, Vector3.Up));
     148            DrawModel(trunk, transformMatrix, transformBones);
     149            base.Draw();
     150        }
    101151    }
    102152}
  • Code/oMaE/oMaE/Overworld/OverworldUI.cs

    r44 r61  
    3737            children.Add(menu.addButtonListener(this));
    3838            children.Add(map.addButtonListener(this));
     39            MapVisible = false;
    3940            base.Initialize();
    4041        }
     42        public bool MapVisible { get { return map.Visible; } set { map.Visible = value; } }
    4143        /// <summary>
    4244        /// Action for when a button is clicked.
     
    5860            screen.FillRectangle(new Rectangle(0, 430, 1000, 70), new Color(50, 50, 50));
    5961            screen.FillRectangle(new Rectangle(800, 0, 200, 50), Color.Brown);
    60             screen.FillRectangle(new Rectangle(0, 0, 200, 50), Color.Brown);
     62            if(MapVisible)
     63                screen.FillRectangle(new Rectangle(0, 0, 200, 50), Color.Brown);
    6164            screen.DrawText(Text, new Vector2(500, 400), TextHorizontal.CENTERED, TextVertical.TOP, Color.White);
    6265            base.Draw(screen);
  • Code/oMaE/oMaE/ScreenFactory.cs

    r41 r61  
    2929    public class ScreenFactory : GameObject
    3030    {
    31         private GameObject inventory = new Inventory();
    32         private GameObject encyclophant = new Encyclophant();
     31        private Inventory inventory = new Inventory();
     32        private Encyclophant encyclophant = new Encyclophant();
     33        public Inventory Inventory { get { return inventory; } }
    3334        /// <summary>
    3435        /// Initializes the screen factory.
     
    5152        public Button createScreenButton(Rectangle loc, String text, SCREENS screen)
    5253        {
    53             return new ScreenButton(loc, text, screen == SCREENS.INVENTORY ? inventory : encyclophant);
     54            return new ScreenButton(loc, text, screen == SCREENS.INVENTORY ? (GameObject)inventory : (GameObject)encyclophant);
    5455        }
    5556        private class ScreenButton : Button
  • Code/oMaE/oMaE/Screens/Inventory.cs

    r41 r61  
    2020    public class Inventory : GameObject, IButtonListener
    2121    {
     22        int count = 0;
     23        Image2D[] Car = new Image2D[5];
    2224        /// <summary>
    2325        /// Initializes the inventory screen.
     
    2830            children.Add(driver.Screens.createScreenButton(new Rectangle(200, 0, 200, 50), "Encyclophant", SCREENS.ENCYCLOPHANT));
    2931            children.Add(new Button(new Rectangle(800, 0, 200, 50), "Back").addButtonListener(this));
     32            Car[0] = new Image2D("Sprites/Car/seat", new Rectangle(441, 227, 156, 207));
     33            Car[1] = new Image2D("Sprites/Car/cockpit", new Rectangle(312, 207, 321, 233));
     34            Car[2] = new Image2D("Sprites/Car/door", new Rectangle(305, 213, 327, 207));
     35            Car[3] = new Image2D("Sprites/Car/chassis", new Rectangle(25, 200, 961, 251));
     36            Car[4] = new Image2D("Sprites/Car/wheels", new Rectangle(115, 330, 756, 148));
     37            foreach(Image2D car in Car)
     38                car.Visible = false;
     39            children.AddRange(Car);
    3040            base.Initialize();
     41        }
     42        public bool FindPart()
     43        {
     44            Car[count++].Visible = true;
     45            return count == Car.Length;
    3146        }
    3247        /// <summary>
     
    4560        {
    4661            screen.FillRectangle(new Rectangle(0, 0, 200, 50), Color.Bisque);
     62            if (count == Car.Length)
     63                screen.DrawText("Good Job!", new Vector2(500, 470), TextHorizontal.CENTERED, TextVertical.TOP, Color.White);
    4764            base.Draw(screen);
    4865        }
  • Code/oMaE/oMaEContent/oMaEContent.contentproj

    r60 r61  
    7070  </ItemGroup>
    7171  <ItemGroup>
     72    <Compile Include="Models\crate.x">
     73      <Name>crate</Name>
     74      <Importer>XImporter</Importer>
     75      <Processor>ModelProcessor</Processor>
     76      <ProcessorParameters_ResizeTexturesToPowerOfTwo>True</ProcessorParameters_ResizeTexturesToPowerOfTwo>
     77    </Compile>
    7278    <Compile Include="pixel.bmp">
    7379      <Name>pixel</Name>
     
    211217      <Importer>TextureImporter</Importer>
    212218      <Processor>TextureProcessor</Processor>
     219    </Compile>
     220  </ItemGroup>
     221  <ItemGroup>
     222    <Compile Include="Models\trunk.x">
     223      <Name>trunk</Name>
     224      <Importer>XImporter</Importer>
     225      <Processor>ModelProcessor</Processor>
     226    </Compile>
     227  </ItemGroup>
     228  <ItemGroup>
     229    <Compile Include="Models\box.png">
     230      <Name>box</Name>
     231      <Importer>TextureImporter</Importer>
     232      <Processor>TextureProcessor</Processor>
     233      <ProcessorParameters_ResizeToPowerOfTwo>True</ProcessorParameters_ResizeToPowerOfTwo>
     234    </Compile>
     235  </ItemGroup>
     236  <ItemGroup>
     237    <Compile Include="Sprites\Car\chassis.png">
     238      <Name>chassis</Name>
     239      <Importer>TextureImporter</Importer>
     240      <Processor>TextureProcessor</Processor>
     241    </Compile>
     242    <Compile Include="Sprites\Car\cockpit.png">
     243      <Name>cockpit</Name>
     244      <Importer>TextureImporter</Importer>
     245      <Processor>TextureProcessor</Processor>
     246    </Compile>
     247    <Compile Include="Sprites\Car\door.png">
     248      <Name>door</Name>
     249      <Importer>TextureImporter</Importer>
     250      <Processor>TextureProcessor</Processor>
     251    </Compile>
     252    <Compile Include="Sprites\Car\lights.png">
     253      <Name>lights</Name>
     254      <Importer>TextureImporter</Importer>
     255      <Processor>TextureProcessor</Processor>
     256    </Compile>
     257    <Compile Include="Sprites\Car\seat.png">
     258      <Name>seat</Name>
     259      <Importer>TextureImporter</Importer>
     260      <Processor>TextureProcessor</Processor>
     261    </Compile>
     262    <Compile Include="Sprites\Car\tail.png">
     263      <Name>tail</Name>
     264      <Importer>TextureImporter</Importer>
     265      <Processor>TextureProcessor</Processor>
     266    </Compile>
     267    <Compile Include="Sprites\Car\wheels.png">
     268      <Name>wheels</Name>
     269      <Importer>TextureImporter</Importer>
     270      <Processor>TextureProcessor</Processor>
     271    </Compile>
     272  </ItemGroup>
     273  <ItemGroup>
     274    <Compile Include="Models\cratemaya.fbx">
     275      <Name>cratemaya</Name>
     276      <Importer>FbxImporter</Importer>
     277      <Processor>ModelProcessor</Processor>
     278      <ProcessorParameters_ResizeTexturesToPowerOfTwo>True</ProcessorParameters_ResizeTexturesToPowerOfTwo>
    213279    </Compile>
    214280  </ItemGroup>
Note: See TracChangeset for help on using the changeset viewer.