/// <summary> /// Constructs a new input state. /// </summary> public InputHelper(ScreenManager manager) { _currentKeyboardState = new KeyboardState(); _currentGamePadState = new GamePadState(); _currentMouseState = new MouseState(); _currentVirtualState = new GamePadState(); _lastKeyboardState = new KeyboardState(); _lastGamePadState = new GamePadState(); _lastMouseState = new MouseState(); _lastVirtualState = new GamePadState(); _manager = manager; _cursorIsVisible = false; _cursorMoved = false; #if WINDOWS_PHONE _cursorIsValid = false; #else _cursorIsValid = true; #endif _cursor = Vector2.Zero; _handleVirtualStick = false; }
public FarseerPhysicsGame() { Window.Title = "Farseer Samples Framework"; _graphics = new GraphicsDeviceManager(this); _graphics.PreferMultiSampling = true; #if WINDOWS || XBOX _graphics.PreferredBackBufferWidth = 1280; _graphics.PreferredBackBufferHeight = 720; ConvertUnits.SetDisplayUnitToSimUnitRatio(24f); IsFixedTimeStep = true; #elif WINDOWS_PHONE _graphics.PreferredBackBufferWidth = 800; _graphics.PreferredBackBufferHeight = 480; ConvertUnits.SetDisplayUnitToSimUnitRatio(16f); IsFixedTimeStep = false; #endif #if WINDOWS _graphics.IsFullScreen = false; #elif XBOX || WINDOWS_PHONE _graphics.IsFullScreen = true; #endif Content.RootDirectory = "Content"; //new-up components and add to Game.Components ScreenManager = new ScreenManager(this); Components.Add(ScreenManager); FrameRateCounter frameRateCounter = new FrameRateCounter(ScreenManager); frameRateCounter.DrawOrder = 101; Components.Add(frameRateCounter); }
public Agent(World world, ScreenManager screenManager, Vector2 position) { _batch = screenManager.SpriteBatch; _collidesWith = Category.All; _collisionCategories = Category.All; _agentBody = BodyFactory.CreateBody(world, position); _agentBody.BodyType = BodyType.Dynamic; //Center FixtureFactory.AttachCircle(0.5f, 0.5f, _agentBody); //Left arm FixtureFactory.AttachRectangle(1.5f, 0.4f, 1f, new Vector2(-1f, 0f), _agentBody); FixtureFactory.AttachCircle(0.5f, 0.5f, _agentBody, new Vector2(-2f, 0f)); //Right arm FixtureFactory.AttachRectangle(1.5f, 0.4f, 1f, new Vector2(1f, 0f), _agentBody); FixtureFactory.AttachCircle(0.5f, 0.5f, _agentBody, new Vector2(2f, 0f)); //Top arm FixtureFactory.AttachRectangle(0.4f, 1.5f, 1f, new Vector2(0f, 1f), _agentBody); FixtureFactory.AttachCircle(0.5f, 0.5f, _agentBody, new Vector2(0f, 2f)); //Bottom arm FixtureFactory.AttachRectangle(0.4f, 1.5f, 1f, new Vector2(0f, -1f), _agentBody); FixtureFactory.AttachCircle(0.5f, 0.5f, _agentBody, new Vector2(0f, -2f)); //GFX _box = new Sprite(screenManager.Assets.TextureFromVertices(PolygonTools.CreateRectangle(1.75f, 0.2f), MaterialType.Blank, Color.White, 1f)); _knob = new Sprite(screenManager.Assets.CircleTexture(0.5f, MaterialType.Blank, Color.Orange, 1f)); _offset = ConvertUnits.ToDisplayUnits(2f); }
/// <summary> /// Constructs a new input state. /// </summary> public InputHelper(ScreenManager manager) { KeyboardState = new KeyboardState(); GamePadState = new GamePadState(); MouseState = new MouseState(); VirtualState = new GamePadState(); PreviousKeyboardState = new KeyboardState(); PreviousGamePadState = new GamePadState(); PreviousMouseState = new MouseState(); PreviousVirtualState = new GamePadState(); _manager = manager; _cursorIsVisible = false; IsCursorMoved = false; #if WINDOWS_PHONE IsCursorValid = false; #else IsCursorValid = true; #endif Cursor = Vector2.Zero; _handleVirtualStick = false; }
public Border(World world, ScreenManager screenManager, Camera2D camera) { _screenManager = screenManager; _camera = camera; float halfWidth = ConvertUnits.ToSimUnits(screenManager.GraphicsDevice.Viewport.Width) / 2f - 0.75f; float halfHeight = ConvertUnits.ToSimUnits(screenManager.GraphicsDevice.Viewport.Height) / 2f - 0.75f; Vertices borders = new Vertices(4); borders.Add(new Vector2(-halfWidth, halfHeight)); borders.Add(new Vector2(halfWidth, halfHeight)); borders.Add(new Vector2(halfWidth, -halfHeight)); borders.Add(new Vector2(-halfWidth, -halfHeight)); _anchor = BodyFactory.CreateLoopShape(world, borders); _anchor.CollisionCategories = Category.All; _anchor.CollidesWith = Category.All; _basicEffect = new BasicEffect(screenManager.GraphicsDevice); _basicEffect.VertexColorEnabled = true; _basicEffect.TextureEnabled = true; _basicEffect.Texture = screenManager.Content.Load<Texture2D>("Materials/pavement"); VertexPositionColorTexture[] vertice = new VertexPositionColorTexture[8]; vertice[0] = new VertexPositionColorTexture(new Vector3(-halfWidth, -halfHeight, 0f), Color.LightGray, new Vector2(-halfWidth, -halfHeight) / 5.25f); vertice[1] = new VertexPositionColorTexture(new Vector3(halfWidth, -halfHeight, 0f), Color.LightGray, new Vector2(halfWidth, -halfHeight) / 5.25f); vertice[2] = new VertexPositionColorTexture(new Vector3(halfWidth, halfHeight, 0f), Color.LightGray, new Vector2(halfWidth, halfHeight) / 5.25f); vertice[3] = new VertexPositionColorTexture(new Vector3(-halfWidth, halfHeight, 0f), Color.LightGray, new Vector2(-halfWidth, halfHeight) / 5.25f); vertice[4] = new VertexPositionColorTexture(new Vector3(-halfWidth - 2f, -halfHeight - 2f, 0f), Color.LightGray, new Vector2(-halfWidth - 2f, -halfHeight - 2f) / 5.25f); vertice[5] = new VertexPositionColorTexture(new Vector3(halfWidth + 2f, -halfHeight - 2f, 0f), Color.LightGray, new Vector2(halfWidth + 2f, -halfHeight - 2f) / 5.25f); vertice[6] = new VertexPositionColorTexture(new Vector3(halfWidth + 2f, halfHeight + 2f, 0f), Color.LightGray, new Vector2(halfWidth + 2f, halfHeight + 2f) / 5.25f); vertice[7] = new VertexPositionColorTexture(new Vector3(-halfWidth - 2f, halfHeight + 2f, 0f), Color.LightGray, new Vector2(-halfWidth - 2f, halfHeight + 2f) / 5.25f); _borderVerts = new VertexPositionColorTexture[24]; _borderVerts[0] = vertice[0]; _borderVerts[1] = vertice[5]; _borderVerts[2] = vertice[4]; _borderVerts[3] = vertice[0]; _borderVerts[4] = vertice[1]; _borderVerts[5] = vertice[5]; _borderVerts[6] = vertice[1]; _borderVerts[7] = vertice[6]; _borderVerts[8] = vertice[5]; _borderVerts[9] = vertice[1]; _borderVerts[10] = vertice[2]; _borderVerts[11] = vertice[6]; _borderVerts[12] = vertice[2]; _borderVerts[13] = vertice[7]; _borderVerts[14] = vertice[6]; _borderVerts[15] = vertice[2]; _borderVerts[16] = vertice[3]; _borderVerts[17] = vertice[7]; _borderVerts[18] = vertice[3]; _borderVerts[19] = vertice[4]; _borderVerts[20] = vertice[7]; _borderVerts[21] = vertice[3]; _borderVerts[22] = vertice[0]; _borderVerts[23] = vertice[4]; }
public Ragdoll(World world, ScreenManager screenManager, Vector2 position) { _batch = screenManager.SpriteBatch; CreateBody(world, position); CreateJoints(world); CreateGFX(screenManager.Assets); }
public Objects(World world, ScreenManager screenManager, Vector2 startPosition, Vector2 endPosition, int count, float radius, ObjectType type) { _batch = screenManager.SpriteBatch; _bodies = new List<Body>(count); CollidesWith = Category.All; CollisionCategories = Category.All; for (int i = 0; i < count; ++i) { switch (type) { case ObjectType.Circle: _bodies.Add(BodyFactory.CreateCircle(world, radius, 1f)); break; case ObjectType.Rectangle: _bodies.Add(BodyFactory.CreateRectangle(world, radius, radius, 1f)); break; case ObjectType.Star: _bodies.Add(BodyFactory.CreateGear(world, radius, 10, 0f, 1f, 1f)); break; case ObjectType.Gear: _bodies.Add(BodyFactory.CreateGear(world, radius, 10, 100f, 1f, 1f)); break; } } for (int i = 0; i < _bodies.Count; ++i) { Body body = _bodies[i]; body.BodyType = BodyType.Dynamic; body.Position = Vector2.Lerp(startPosition, endPosition, i / (float)(count - 1)); body.Restitution = .7f; body.Friction = .2f; body.CollisionCategories = CollisionCategories; body.CollidesWith = CollidesWith; } //GFX AssetCreator creator = screenManager.Assets; switch (type) { case ObjectType.Circle: _object = new Sprite(creator.CircleTexture(radius, MaterialType.Dots, Color.DarkRed, 0.8f)); break; case ObjectType.Rectangle: _object = new Sprite(creator.TextureFromVertices(PolygonTools.CreateRectangle(radius / 2f, radius / 2f), MaterialType.Dots, Color.Blue, 0.8f)); break; case ObjectType.Star: _object = new Sprite(creator.TextureFromVertices(PolygonTools.CreateGear(radius, 10, 0f, 1f), MaterialType.Dots, Color.Yellow, 0.8f)); break; case ObjectType.Gear: _object = new Sprite(creator.TextureFromVertices(PolygonTools.CreateGear(radius, 10, 100f, 1f), MaterialType.Dots, Color.DarkGreen, 0.8f)); break; } }
public FrameRateCounter(ScreenManager screenManager) : base(screenManager.Game) { _screenManager = screenManager; _format = new NumberFormatInfo(); _format.NumberDecimalSeparator = "."; #if XBOX _position = new Vector2(55, 35); #else _position = new Vector2(30, 25); #endif }
public Spider(World world, ScreenManager screenManager, Vector2 position) { _batch = screenManager.SpriteBatch; //Load bodies _circle = BodyFactory.CreateCircle(world, SpiderBodyRadius, 0.1f, position); _circle.BodyType = BodyType.Dynamic; //Left upper leg _leftUpper = BodyFactory.CreateRectangle(world, _upperLegSize.X, _upperLegSize.Y, 0.1f, _circle.Position - new Vector2(SpiderBodyRadius, 0f) - new Vector2(_upperLegSize.X / 2f, 0f)); _leftUpper.BodyType = BodyType.Dynamic; //Left lower leg _leftLower = BodyFactory.CreateRectangle(world, _lowerLegSize.X, _lowerLegSize.Y, 0.1f, _circle.Position - new Vector2(SpiderBodyRadius, 0f) - new Vector2(_upperLegSize.X, 0f) - new Vector2(_lowerLegSize.X / 2f, 0f)); _leftLower.BodyType = BodyType.Dynamic; //Right upper leg _rightUpper = BodyFactory.CreateRectangle(world, _upperLegSize.X, _upperLegSize.Y, 0.1f, _circle.Position + new Vector2(SpiderBodyRadius, 0f) + new Vector2(_upperLegSize.X / 2f, 0f)); _rightUpper.BodyType = BodyType.Dynamic; //Right lower leg _rightLower = BodyFactory.CreateRectangle(world, _lowerLegSize.X, _lowerLegSize.Y, 0.1f, _circle.Position + new Vector2(SpiderBodyRadius, 0f) + new Vector2(_upperLegSize.X, 0f) + new Vector2(_lowerLegSize.X / 2f, 0f)); _rightLower.BodyType = BodyType.Dynamic; //Create joints JointFactory.CreateRevoluteJoint(world, _circle, _leftUpper, new Vector2(_upperLegSize.X / 2f, 0f)); _leftShoulderAngleJoint = JointFactory.CreateAngleJoint(world, _circle, _leftUpper); _leftShoulderAngleJoint.MaxImpulse = 3f; JointFactory.CreateRevoluteJoint(world, _circle, _rightUpper, new Vector2(-_upperLegSize.X / 2f, 0f)); _rightShoulderAngleJoint = JointFactory.CreateAngleJoint(world, _circle, _rightUpper); _rightShoulderAngleJoint.MaxImpulse = 3f; JointFactory.CreateRevoluteJoint(world, _leftUpper, _leftLower, new Vector2(_lowerLegSize.X / 2f, 0f)); _leftKneeAngleJoint = JointFactory.CreateAngleJoint(world, _leftUpper, _leftLower); _leftKneeAngleJoint.MaxImpulse = 3f; JointFactory.CreateRevoluteJoint(world, _rightUpper, _rightLower, new Vector2(-_lowerLegSize.X / 2f, 0f)); _rightKneeAngleJoint = JointFactory.CreateAngleJoint(world, _rightUpper, _rightLower); _rightKneeAngleJoint.MaxImpulse = 3; //GFX AssetCreator creator = screenManager.Assets; _torso = new Sprite(creator.CircleTexture(SpiderBodyRadius, MaterialType.Waves, Color.Gray, 1f)); _upperLeg = new Sprite(creator.TextureFromShape(_leftUpper.FixtureList[0].Shape, MaterialType.Blank, Color.DimGray, 1f)); _lowerLeg = new Sprite(creator.TextureFromShape(_leftLower.FixtureList[0].Shape, MaterialType.Blank, Color.DarkSlateGray, 1f)); }
public TheoJansenWalker(World world, ScreenManager screenManager, Camera2D camera, Vector2 position) { _position = position; _motorSpeed = 2.0f; _spriteBatch = screenManager.SpriteBatch; _lineBatch = screenManager.LineBatch; _camera = camera; _walkerJoints = new List<DistanceJoint>(); _leftShoulders = new Body[3]; _rightShoulders = new Body[3]; _leftLegs = new Body[3]; _rightLegs = new Body[3]; Vector2 pivot = new Vector2(0f, -0.8f); CreateChassis(world, pivot, screenManager.Assets); Vector2 wheelAnchor = pivot + new Vector2(0f, 0.8f); CreateLegTextures(screenManager.Assets); CreateLeg(world, -1f, wheelAnchor, 0); CreateLeg(world, 1f, wheelAnchor, 0); _leftLeg.Origin = AssetCreator.CalculateOrigin(_leftLegs[0]); _leftShoulder.Origin = AssetCreator.CalculateOrigin(_leftShoulders[0]); _rightLeg.Origin = AssetCreator.CalculateOrigin(_rightLegs[0]); _rightShoulder.Origin = AssetCreator.CalculateOrigin(_rightShoulders[0]); _wheel.SetTransform(_wheel.Position, 120f * Settings.Pi / 180f); CreateLeg(world, -1f, wheelAnchor, 1); CreateLeg(world, 1f, wheelAnchor, 1); _wheel.SetTransform(_wheel.Position, -120f * Settings.Pi / 180f); CreateLeg(world, -1f, wheelAnchor, 2); CreateLeg(world, 1f, wheelAnchor, 2); }
public Pyramid(World world, ScreenManager screenManager, Vector2 position, int count, float density) { _batch = screenManager.SpriteBatch; Vertices rect = PolygonTools.CreateRectangle(0.5f, 0.5f); PolygonShape shape = new PolygonShape(rect, density); Vector2 rowStart = position; rowStart.Y -= 0.5f + count * 1.1f; Vector2 deltaRow = new Vector2(-0.625f, 1.1f); const float spacing = 1.25f; _boxes = new List<Body>(); for (int i = 0; i < count; ++i) { Vector2 pos = rowStart; for (int j = 0; j < i + 1; ++j) { Body body = BodyFactory.CreateBody(world); body.BodyType = BodyType.Dynamic; body.Position = pos; body.CreateFixture(shape); _boxes.Add(body); pos.X += spacing; } rowStart += deltaRow; } //GFX AssetCreator creator = screenManager.Assets; _box = new Sprite(creator.TextureFromVertices(rect, MaterialType.Dots, Color.SaddleBrown, 2f)); }
/// <summary> /// Responds to user input, changing the selected entry and accepting /// or cancelling the menu. /// </summary> public override void HandleInput(InputHelper input, GameTime gameTime) { // Mouse or touch on a menu item int hoverIndex = GetMenuEntryAt(input.Cursor); if (hoverIndex > -1 && _menuEntries[hoverIndex].IsSelectable() && !_scrollLock) { _selectedEntry = hoverIndex; } else { _selectedEntry = -1; } _scrollSlider.Hover = false; if (input.IsCursorValid) { _scrollUp.Collide(input.Cursor); _scrollDown.Collide(input.Cursor); _scrollSlider.Collide(input.Cursor); } else { _scrollUp.Hover = false; _scrollDown.Hover = false; _scrollLock = false; } // Accept or cancel the menu? if (input.IsMenuSelect() && _selectedEntry != -1) { if (_menuEntries[_selectedEntry].IsExitItem()) { ScreenManager.Game.Exit(); } else if (_menuEntries[_selectedEntry].Screen != null) { ScreenManager.AddScreen(_menuEntries[_selectedEntry].Screen); if (_menuEntries[_selectedEntry].Screen is IDemoScreen) { ScreenManager.AddScreen(new MessageBoxScreen((_menuEntries[_selectedEntry].Screen as IDemoScreen).GetDetails())); } } } else if (input.IsMenuCancel()) { ScreenManager.Game.Exit(); } if (input.IsMenuPressed()) { if (_scrollUp.Hover) { _menuOffset = Math.Max(_menuOffset - 200f * (float)gameTime.ElapsedGameTime.TotalSeconds, 0f); _scrollLock = false; } if (_scrollDown.Hover) { _menuOffset = Math.Min(_menuOffset + 200f * (float)gameTime.ElapsedGameTime.TotalSeconds, _maxOffset); _scrollLock = false; } if (_scrollSlider.Hover) { _scrollLock = true; } } if (input.IsMenuReleased()) { _scrollLock = false; } if (_scrollLock) { _scrollSlider.Hover = true; _menuOffset = Math.Max(Math.Min(((input.Cursor.Y - _menuBorderTop) / (_menuBorderBottom - _menuBorderTop)) * _maxOffset, _maxOffset), 0f); } }