Added Box2D
This commit is contained in:
132
external/Box2D-2.3.1/Contributions/Platforms/TestBed.Net/MainWindow.cs
vendored
Normal file
132
external/Box2D-2.3.1/Contributions/Platforms/TestBed.Net/MainWindow.cs
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using Tao.OpenGl;
|
||||
using Box2D.Net;
|
||||
using System.Reflection;
|
||||
|
||||
namespace TestBed.Net
|
||||
{
|
||||
public partial class MainWindow : Form
|
||||
{
|
||||
private Settings Settings = new Settings();
|
||||
private Test mCurrentTest;
|
||||
public Test CurrentTest
|
||||
{
|
||||
get
|
||||
{
|
||||
return mCurrentTest;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
//Call code to reset current test
|
||||
mCurrentTest = value;
|
||||
}
|
||||
}
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
//Find all Tests in this module
|
||||
foreach (Type type in Assembly.GetExecutingAssembly().GetExportedTypes())
|
||||
{
|
||||
Test test = new Test();
|
||||
if (type.IsSubclassOf(test.GetType()))
|
||||
{
|
||||
TestsComboBox.Items.Add(System.Activator.CreateInstance(type));
|
||||
}
|
||||
}
|
||||
TestsComboBox.SelectedIndex = 0;
|
||||
CurrentTest = (Test)System.Activator.CreateInstance(TestsComboBox.SelectedItem.GetType());
|
||||
|
||||
OpenGLControl.Dock = DockStyle.Fill;
|
||||
}
|
||||
|
||||
private void MainWindow_Load(object sender, EventArgs e)
|
||||
{
|
||||
OpenGLControl.InitializeContexts();
|
||||
panel1.Dock = DockStyle.Fill;
|
||||
panel2.Dock = DockStyle.Right;
|
||||
MainWindow_Resize(null, null);
|
||||
RedrawTimer.Interval = (int)(1000.0f / (float)Settings.Hz);
|
||||
RedrawTimer.Start();
|
||||
}
|
||||
|
||||
private void MainWindow_Resize(object sender, EventArgs e)
|
||||
{
|
||||
Size size = new Size(OpenGLControl.Size.Width - panel2.Width, OpenGLControl.Size.Height);
|
||||
Renderer.InitOpenGL(size, CurrentTest.Zoom, CurrentTest.ViewOffset);
|
||||
Renderer.OpenGLDraw(CurrentTest);
|
||||
}
|
||||
|
||||
private void OpenGLControl_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
Renderer.OpenGLDraw(CurrentTest);
|
||||
}
|
||||
|
||||
private Vector RelativeCoordinates(Point MousePoint)
|
||||
{
|
||||
float Height = (float)OpenGLControl.Size.Height;
|
||||
float Width = (float)(OpenGLControl.Size.Width - panel2.Width);
|
||||
if(Height <= 0)
|
||||
Height = 1;
|
||||
|
||||
float AspectRatio = Width / Height;
|
||||
|
||||
Vector relative = new Vector(
|
||||
(float)MousePoint.X / Width,
|
||||
(float)MousePoint.Y / Height);
|
||||
|
||||
relative -= new Vector(.5f, .5f);
|
||||
relative *= 2;
|
||||
relative.Y *= -1;
|
||||
relative.X *= AspectRatio;
|
||||
return relative;
|
||||
}
|
||||
|
||||
private void OpenGLControl_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
CurrentTest.MouseMove(RelativeCoordinates(e.Location));
|
||||
}
|
||||
|
||||
private void OpenGLControl_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
CurrentTest.MouseUp(RelativeCoordinates(e.Location));
|
||||
}
|
||||
|
||||
private void OpenGLControl_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
CurrentTest.MouseDown(RelativeCoordinates(e.Location));
|
||||
}
|
||||
|
||||
private void RedrawTimer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
CurrentTest.Step(Settings);
|
||||
Renderer.OpenGLDraw(CurrentTest);
|
||||
OpenGLControl.Draw();
|
||||
|
||||
int errorCode = 0;
|
||||
if ((errorCode = Gl.glGetError()) > 0)
|
||||
{
|
||||
RedrawTimer.Stop();
|
||||
|
||||
//Handled by the OpenGLControl
|
||||
//MessageBox.Show(Glu.gluErrorString(errorCode));
|
||||
}
|
||||
}
|
||||
|
||||
private void OpenGLControl_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
|
||||
{
|
||||
if(e.KeyCode == Keys.R)
|
||||
CurrentTest = (Test)System.Activator.CreateInstance(CurrentTest.GetType());
|
||||
else
|
||||
CurrentTest.KeyPress(e.KeyCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user