Changeset 61

Show
Ignore:
Timestamp:
02/24/2012 11:09:05 AM (2 years ago)
Author:
acarter
Message:

Can now pick up parts to go in inventory

Location:
Code/oMaE
Files:
12 added
9 modified

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>