コード例 #1
0
    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);
    }
コード例 #2
0
    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);
    }