How to Stop and Go the entity?
Posted: Sun Aug 28, 2011 12:53 am
I want to "Stop and Go" the specific entity.
This code is correct physically?
Or there any other easier way?
struct EntityMotion
{
public Vector3 vel;
public Vector3 ang;
public float dam;
public Vector3 mom;
public bool grav;
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
GamePadState padState = GamePad.GetState(PlayerIndex.One);
//stop! even number index entity
if (padState.Buttons.A == ButtonState.Pressed
&& oldPadState.Buttons.A == ButtonState.Released)
{
entityMotions.Clear();
for (int i = 0; i < space.Entities.Count; i++)
{
if (i % 2 == 1)continue;
EntityMotion em = new EntityMotion();
em.vel = space.Entities.LinearVelocity;
em.ang = space.Entities.AngularVelocity;
em.dam = space.Entities.LinearDamping;
em.mom = space.Entities.LinearMomentum;
em.grav = space.Entities.IsAffectedByGravity;
entityMotions.Add(em);
space.Entities.LinearVelocity = Vector3.Zero;
space.Entities.AngularVelocity = Vector3.Zero;
space.Entities.LinearDamping = 0;
space.Entities.LinearMomentum = Vector3.Zero;
space.Entities.IsAffectedByGravity = false;
}
}
//go! even number index entity
if (padState.Buttons.B == ButtonState.Pressed
&& oldPadState.Buttons.B == ButtonState.Released)
{
int j = 0;
for (int i = 0; i < space.Entities.Count; i++)
{
if (i % 2 == 1) continue;
space.Entities[i].LinearVelocity = entityMotions[j].vel;
space.Entities[i].AngularVelocity = entityMotions[j].ang;
space.Entities[i].LinearDamping = entityMotions[j].dam;
space.Entities[i].LinearMomentum = entityMotions[j].mom;
space.Entities[i].IsAffectedByGravity = entityMotions[j].grav;
j++;
}
}
space.Update();
oldPadState = padState;
base.Update(gameTime);
}
This code is correct physically?
Or there any other easier way?
struct EntityMotion
{
public Vector3 vel;
public Vector3 ang;
public float dam;
public Vector3 mom;
public bool grav;
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
GamePadState padState = GamePad.GetState(PlayerIndex.One);
//stop! even number index entity
if (padState.Buttons.A == ButtonState.Pressed
&& oldPadState.Buttons.A == ButtonState.Released)
{
entityMotions.Clear();
for (int i = 0; i < space.Entities.Count; i++)
{
if (i % 2 == 1)continue;
EntityMotion em = new EntityMotion();
em.vel = space.Entities.LinearVelocity;
em.ang = space.Entities.AngularVelocity;
em.dam = space.Entities.LinearDamping;
em.mom = space.Entities.LinearMomentum;
em.grav = space.Entities.IsAffectedByGravity;
entityMotions.Add(em);
space.Entities.LinearVelocity = Vector3.Zero;
space.Entities.AngularVelocity = Vector3.Zero;
space.Entities.LinearDamping = 0;
space.Entities.LinearMomentum = Vector3.Zero;
space.Entities.IsAffectedByGravity = false;
}
}
//go! even number index entity
if (padState.Buttons.B == ButtonState.Pressed
&& oldPadState.Buttons.B == ButtonState.Released)
{
int j = 0;
for (int i = 0; i < space.Entities.Count; i++)
{
if (i % 2 == 1) continue;
space.Entities[i].LinearVelocity = entityMotions[j].vel;
space.Entities[i].AngularVelocity = entityMotions[j].ang;
space.Entities[i].LinearDamping = entityMotions[j].dam;
space.Entities[i].LinearMomentum = entityMotions[j].mom;
space.Entities[i].IsAffectedByGravity = entityMotions[j].grav;
j++;
}
}
space.Update();
oldPadState = padState;
base.Update(gameTime);
}