public static bool CollideWithArena(ref Vec a, bool verb) { double rimbalzo; if (a.r == 1) { rimbalzo = rules.ROBOT_ARENA_E; } else { rimbalzo = rules.BALL_ARENA_E; } Dan dta = a.DanToArena(); double penet = a.r - dta.distance; if (penet <= 0) { return(false); } if (verb) { De("penet=" + penet); } a.DoAdd(dta.normal.Mul(penet)); double vel = a.VelocityVec().Dot(dta.normal) - a.rcs; if (vel < 0) { Vec zs = dta.normal.Mul(-vel * (1 + rimbalzo)); if (verb) { De("vel added " + zs.x + " " + zs.y + " " + zs.z); } a.AddVelocity(zs); return(true); } return(false); }