/// <summary> /// Override the ToString to return all the velocity data as a string. /// </summary> /// <returns></returns> public override string ToString() { StringBuilder builder = new StringBuilder(); builder.Append("X : " + VelocityX.ToString() + "\n"); builder.Append("Y : " + VelocityY.ToString() + "\n"); builder.Append("Z : " + VelocityZ.ToString() + "\n"); builder.Append("Q : " + VelocityQ.ToString() + "\n"); builder.Append("Depth Layer : " + WaterMassDepthLayer.ToString()); return(builder.ToString()); }
protected int Collision(TestScreen parent) { int Result = 0; bool flag = false; foreach (GameObject o in parent.Objects) { if (o is Block) { switch (Rectangle.OverlapTestEX(o.Rectangle)) { case 1: VelocityX = 0; X = o.X + o.Width; Result = 1; break; case 2: VelocityX = 0; X = o.X - Rectangle.Width; Result = 2; break; case 3: VelocityY = 0; //jumpStep = 0; Y = o.Y + o.Height; Result = 3; break; case 4: if (VelocityY > 0) { flag = true; Y = o.Y - Rectangle.Height; Result = 4; } break; } if (flag) { VelocityY = 0; //jumpStep = 0; } DebugMessage = " vx:" + VelocityX.ToString(); } else if (o is Slope) { int res = Rectangle.OverlapTestEX(o.Rectangle); if (((Slope)o).Mode == 1) { if (res != 0 && Rectangle.Y + Rectangle.Height > o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Rectangle.X + Rectangle.Width - o.Rectangle.X)) { if (res == 1) { VelocityX = 0; X = o.Rectangle.X + o.Rectangle.Width; Result = 1; } else { Y = o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Math.Abs(Rectangle.X + Rectangle.Width - o.Rectangle.X)) - Rectangle.Height; o.DebugMessage = " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString(); VelocityY = 0; //jumpStep = 0; if (VelocityX > 0) { VelocityX -= 10; } Result = 4; } DebugMessage = " " + res.ToString() + " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString(); Result = res; } } else if (((Slope)o).Mode == -1) { if (res != 0 && Rectangle.Y + Rectangle.Height > o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Rectangle.X - o.Rectangle.X)) { if (res == 2) { VelocityX = 0; X = o.Rectangle.X - Rectangle.Width; Result = 1; } else { Y = o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Rectangle.X - o.Rectangle.X) - Rectangle.Height; o.DebugMessage = " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString(); VelocityY = 0; //jumpStep = 0; if (VelocityX < 0) { VelocityX += 10; } Result = 4; } DebugMessage = " " + res.ToString() + " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString(); } } } else if (o is Floor) { if (Rectangle.OverlapTestEX(o.Rectangle) == 4 && VelocityY > 0) { //if (VelocityY > 101) Console.WriteLine("Y:" + VelocityY.ToString()); VelocityY = 0; Y = o.Y - Height; //jumpStep = 0; Result = 4; } } } return(Result); }
public override void Update(double deltaTime) { base.Update(deltaTime); if (dead) { goto last; } if (Input.onKeyDown(Keys.LeftShift)) { Y += 50; Height = 50; } if (Input.IsKeyDown(Keys.LeftShift)) { Height = 50; } else { Height = 100; } if (Input.IsKeyDown(Keys.Left) && VelocityX > -500) { VelocityX -= 40; } else if (Input.IsKeyDown(Keys.Right) && VelocityX < 500) { VelocityX += 40; } else { if (VelocityX < -1) { VelocityX += 20; } else if (VelocityX > 1) { VelocityX -= 20; } if (VelocityX < 0.5 && VelocityX > -0.5) { VelocityX = 0; } } bool flag = false; foreach (GameObject o in parent.Objects) { if (o is Block) { switch (Rectangle.OverlapTestEX(o.Rectangle)) { case 1: VelocityX = 0; X = o.X + o.Width; break; case 2: VelocityX = 0; X = o.X - Rectangle.Width; break; case 3: VelocityY = 0; jumpStep = 0; Y = o.Y + o.Height; break; case 4: if (VelocityY > 0) { flag = true; Y = o.Y - Rectangle.Height; } break; } if (flag) { VelocityY = 0; jumpStep = 0; } DebugMessage = " vx:" + VelocityX.ToString(); } else if (o is Slope) { int res = Rectangle.OverlapTestEX(o.Rectangle); if (((Slope)o).Mode == 1) { if (res != 0 && Y + Height > o.Y + o.Height - ((Slope)o).getY(X + Width - o.X)) { if (res == 1) { VelocityX = 0; X = o.X + o.Width; } else { Y = o.Y + o.Height - ((Slope)o).getY(Math.Abs(X + Width - o.X)) - Height; o.DebugMessage = " X-ox:" + (X - o.X).ToString(); VelocityY = 0; jumpStep = 0; if (VelocityX > 0) { VelocityX -= 10; } } DebugMessage = " " + res.ToString(); } } else if (((Slope)o).Mode == -1) { if (res != 0 && Rectangle.Y + Rectangle.Height > o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Rectangle.X - o.Rectangle.X)) { if (res == 2) { VelocityX = 0; X = o.Rectangle.X - Rectangle.Width; } else { Y = o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Rectangle.X - o.Rectangle.X) - Rectangle.Height; o.DebugMessage = " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString(); VelocityY = 0; jumpStep = 0; if (VelocityX < 0) { VelocityX += 10; } } DebugMessage = " " + res.ToString() + " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString(); } } } else if (o is Floor) { if (Rectangle.OverlapTestEX(o.Rectangle) == 4 && VelocityY > 0) { // if (VelocityY > 101) Console.WriteLine("Y:" + VelocityY.ToString()); VelocityY = 0; Y = o.Y - Height; jumpStep = 0; } } } foreach (enemy o in parent.Enemys) { switch (Rectangle.OverlapTestEX(new Rectangle((int)o.X + 20, (int)o.Y + 20, (int)o.Width - 40, (int)o.Height - 20))) { case 1: case 2: case 3: if (o.dead || VelocityY > 0) { break; } dead = true; parent.pause = true; a.Enable = true; break; case 4: if (o.dead) { break; } isStepped = true; o.dead = true; VelocityY = -600; break; } } if (Input.onKeyDown(Keys.Space) && jumpStep < 2) { VelocityY = -1500; jumpStep++; } if (Input.IsKeyDown(Keys.Space) && isStepped) { VelocityY = -2000; } if (X > 500) { parent.X = 500 - X; } isStepped = false; last: if (Y > 1200) { parent.X = 0; X = 0; Y = 0; dead = false; } if (dead) { Alpha = 0.5f; } else { Alpha = 1; } // Console.WriteLine("XX:" + X.ToString()); // X += VelocityX * deltaTime; // Y += VelocityY * deltaTime; }