public override bool OnInteract() { Ring.Floor floor = Ring.GetFloor(Radius); if (floor == null) { return(false); } Ring.Floor.Wing wing = floor.GetWing(Radians); if (wing != null) { return(false); } float position = (floor.RadiansToMeters(Radians) / Ring.UnitWingWidth).RoundDown() * Ring.UnitWingWidth; float radian_position = floor.MetersToRadians(position); if (InputUtility.WasMouseLeftReleased) { floor.Wings.Add(new Ring.Floor.Wing(floor, position, 1)); } else { Overlay.StartRadians = radian_position; Overlay.EndRadians = radian_position + floor.MetersToRadians(Ring.UnitWingWidth); Overlay.StartRadius = floor.Radius - floor.CeilingHeight; Overlay.EndRadius = floor.Radius; } return(true); }
public override bool OnInteract() { Ring.Floor floor = Ring.GetFloor(Radius); if (floor == null) { return(false); } Ring.Floor.Wing wing = floor.GetWing(Radians); if (wing != null) { if (InputUtility.WasMouseLeftReleased) { floor.Wings.Remove(wing); } else { Overlay.StartRadians = wing.StartRadians; Overlay.EndRadians = wing.EndRadians; Overlay.StartRadius = floor.Radius - floor.CeilingHeight; Overlay.EndRadius = floor.Radius; } } else { int floor_index = Ring.Floors.IndexOf(floor); bool is_in_bottom_half = floor_index < Ring.Floors.Count / 2; if (InputUtility.WasMouseLeftReleased) { if (is_in_bottom_half) { Ring.Floors.RemoveRange(0, floor_index + 1); } else { Ring.Floors.RemoveRange(floor_index, Ring.Floors.Count - floor_index); } } else { Overlay.StartRadians = 0; Overlay.EndRadians = 2 * Mathf.PI; if (is_in_bottom_half) { Overlay.StartRadius = floor.Radius - floor.CeilingHeight; Overlay.EndRadius = Ring.GroundFloorRadius; } else { Overlay.StartRadius = Ring.RoofRadius; Overlay.EndRadius = floor.Radius; } } } return(true); }