// We need separation create/destroy functions from the constructor/destructor because // the destructor cannot access the allocator (no destructor arguments allowed by C++). public void Create(Body body, FixtureDef def) { UserData = def.UserData; Friction = def.Friction; Restitution = def.Restitution; Body = body; Next = null; Filter.Set(def.Filter); IsSensor = def.IsSensor; Shape = def.Shape.Clone(); // Reserve proxy space int childCount = Shape.ChildCount; if (Proxies == null) { Proxies = new FixtureProxy[childCount]; for (int i = 0; i < childCount; i++) { Proxies[i] = new FixtureProxy { Fixture = null, ProxyId = BroadPhase.NULL_PROXY }; } } if (Proxies.Length < childCount) { FixtureProxy[] old = Proxies; int newLen = MathUtils.Max(old.Length * 2, childCount); Proxies = new FixtureProxy[newLen]; Array.Copy(old, 0, Proxies, 0, old.Length); for (int i = 0; i < newLen; i++) { if (i >= old.Length) { Proxies[i] = new FixtureProxy(); } Proxies[i].Fixture = null; Proxies[i].ProxyId = BroadPhase.NULL_PROXY; } } ProxyCount = 0; m_density = def.Density; }