private void CreateHousingWaypoint(int housingID, GameObject objRoot, Vector3 areaSize) { if (Object.op_Equality((Object)objRoot, (Object)null) || !Singleton <Resources> .IsInstance()) { return; } LocomotionProfile locomotionProfile = Singleton <Resources> .Instance.LocomotionProfile; if (Object.op_Equality((Object)locomotionProfile, (Object)null)) { return; } List <ValueTuple <Vector3, Waypoint> > waypointList; if (!this._housingWaypointCacheTable.TryGetValue(housingID, out waypointList) || waypointList == null) { this._housingWaypointCacheTable[housingID] = waypointList = new List <ValueTuple <Vector3, Waypoint> >(); Transform transform = objRoot.get_transform(); if (Object.op_Equality((Object)transform, (Object)null)) { return; } float installationDistance = locomotionProfile.HousingWaypointSetting.InstallationDistance; float installationHeight = locomotionProfile.HousingWaypointSetting.InstallationHeight; SpiralPoint spiralPoint = new SpiralPoint(999); for (int index = 0; (double)installationHeight * (double)index < areaSize.y; ++index) { float num = installationHeight * (float)index; spiralPoint.Clear(); spiralPoint.Limit = 999; while (!spiralPoint.End) { Vector3 vector3 = Vector3.op_Multiply(new Vector3((float)((Vector2Int) ref spiralPoint.Current).get_x(), 0.0f, (float)((Vector2Int) ref spiralPoint.Current).get_y()), installationDistance); vector3.y = (__Null)(double)num; if (areaSize.y > vector3.y && vector3.x > -areaSize.x / 2.0 && (areaSize.x / 2.0 > vector3.x && vector3.z > -areaSize.z / 2.0) && areaSize.z / 2.0 > vector3.z) { vector3 = Vector3.op_Addition(transform.get_position(), Quaternion.op_Multiply(transform.get_rotation(), vector3)); waypointList.Add(new ValueTuple <Vector3, Waypoint>(vector3, (Waypoint)null)); spiralPoint.Next(); } else { break; } } } } this.RefreshWaypoints(housingID, waypointList); }