root/src/AIDemos/Screens/Demos/Demo5.cs

User picture

Author: conkerjo

Revision: 30 («Previous)


File Size: 5.2 KB

(July 12, 2009 15:10 UTC) Almost 3 years ago


  

 
Show/hide line numbers
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using AIDemos;
using Microsoft.Xna.Framework.Content;
using System.Threading;
using Microsoft.Xna.Framework.Input;
using Brains.Framework;
using AIRendering;
using AIDemos.GameClasses;
using Brains;
using Brains.Framework.Behaviors;
using AIDemos.GameClasses.Behaviors;
using System.Collections;
using Brains.Framework.Map;
using Brains.Framework.Utility;

namespace AIDemos.Screens.Demos
{
    public class Demo5 : DemoGameScreen
    {

        public Demo5():base("Demo 5 - A Bigger World","")
        {
            TransitionOnTime = TimeSpan.FromSeconds(1.5);
            TransitionOffTime = TimeSpan.FromSeconds(0.5);
                
        }

        public override void LoadContent()
        {
            base.LoadContent();
            
            LoadAI();

            CenterCamOnMap();
            ((DrawableWorld)_engine.World).Batch = ScreenManager.SpriteBatch;
            ((DrawableWorld)_engine.World).Font= gameFont;
            ScreenManager.Game.ResetElapsedTime();
        }
        private void LoadAI()
        {
            _engine.CreateWorld(new DrawableWorld());
            _engine.World.LoadMapDataFromTexture(
                content.Load<Texture2D>("DemoTextures/MAPDemo3"),
                4,
                4,
                32,
                typeof(DrawableGrid));

            //GridCell fromcell=_engine.World.Map.AllCells.First<GridCell>(
            //    a => a.Labels[AIConsts.COLORR]==0&&
            //        a.Labels[AIConsts.COLORG]==255 &&
            //        a.Labels[AIConsts.COLORB]==0);
            //GridCell tocell = _engine.World.Map.AllCells.First<GridCell>(
            //    a => a.Labels[AIConsts.COLORR] == 255 &&
            //        a.Labels[AIConsts.COLORG] == 0 &&
            //        a.Labels[AIConsts.COLORB] == 0);
            //GameActor actor = new GameActor(fromcell.Position, 5);
            //actor.Locomotion = new Brains.Framework.Locomotion.LocomtionSteering();
            //actor.Locomotion.MaxSpeed = 70;
            //actor.Locomotion.MaxRotation = MathHelper.TwoPi;

            //_engine.World.AddActor(actor);
            //SequenceBehavior _sequence = new SequenceBehavior();

            
            //DrawableBehaviorGoTo _goto = new DrawableBehaviorGoTo();
            //_goto.StartNode = fromcell;
            //_goto.EndNode = tocell;
            //_sequence.SubBehaviors.Add(_goto);
            //_sequence.SubBehaviors.Add(new DieBehavior());
            //actor.RootBehavior = _sequence;

        }
        class CellComparer:IComparer
        {
            
            public int Compare(object x, object y)
            {
                GridCell p1;
                GridCell p2;

                if (x is GridCell)
                    p1 = x as GridCell;
                else
                    throw new ArgumentException("Object is not of type GridCell.");

                if (y is GridCell)
                    p2 = y as GridCell;
                else
                    throw new ArgumentException("Object is not of type GridCell.");

                return p1.Labels[AIConsts.COLORR].CompareTo(p2.Labels[AIConsts.COLORR]);
            }
        }
        
        GridCell _endNode;
        public override void UnloadContent()
        {
            content.Unload();
        }

        public override void Update(GameTime gameTime, bool otherScreenHasFocus,
                                                     bool coveredByOtherScreen)
        {
            base.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen);

            if (IsActive)
            {
                _engine.Update(gameTime);
            }
        }
        MouseState _currentMouse;
        MouseState _lastMouse;
        public override void HandleInput(InputState input)
        {
            if (input == null)
                throw new ArgumentNullException("input");

            _lastMouse = _currentMouse;
            _currentMouse = Mouse.GetState();


            int playerIndex = (int)ControllingPlayer.Value;
            
            KeyboardState keyboardState = input.CurrentKeyboardStates[playerIndex];
            GamePadState gamePadState = input.CurrentGamePadStates[playerIndex];

            bool gamePadDisconnected = !gamePadState.IsConnected &&
                                       input.GamePadWasConnected[playerIndex];

            

            base.HandleInput(input);
        }

        public override void Draw(GameTime gameTime)
        {
            ScreenManager.GraphicsDevice.Clear(ClearOptions.Target,
                                               Color.Black, 0, 0);

            SpriteBatch spriteBatch = ScreenManager.SpriteBatch;
            
            spriteBatch.Begin();
            
            base.Draw(gameTime);
            ((IRender)_engine.World).Render(primitiveBatch);
            spriteBatch.End();

            
            if (TransitionPosition > 0)
                ScreenManager.FadeBackBufferToBlack(255 - TransitionAlpha);
        }
    }
}