internal void SetSpeakerArrow(int?x = null, SpeakerArrowSide side = SpeakerArrowSide.Bottom) { if (x != null) { SpeakerArrowPos = (x / 8) * 8; } else { SpeakerArrowPos = x; } ArrowSide = side; }
private void set_speaker(int id, int width, Maybe <int> speaker_loc_x, string name) { this.width = width; Speaker = id; int x = 0; // If an onscreen normal speaker if (speaker_loc_x.IsSomething) { x = (int)speaker_loc_x + 20; draw_offset.Y = 0; } // Else a special case speaker else { // Offscreen right if (Speaker == Face_Sprite_Data.FACE_COUNT + 1) { x = Config.WINDOW_WIDTH - (Width + OFFSCREEN_GUTTER); draw_offset.Y = OFFSCREEN_OFFSET; } else { switch (Speaker) { // Background case Window_Message.CENTER_TOP_SPEAKER: x = Config.WINDOW_WIDTH / 2; draw_offset.Y = BACKGROUND_OFFSET; break; // CG Voiceover case Window_Message.CG_VOICEOVER_SPEAKER: x = Config.WINDOW_WIDTH / 2; draw_offset.Y = CG_OFFSET; break; // No speaker case Window_Message.NO_SPEAKER: x = Config.WINDOW_WIDTH * 2; break; // Offscreen left case 0: x = OFFSCREEN_GUTTER; draw_offset.Y = OFFSCREEN_OFFSET; break; } } } int window_x, speaker_x; // If offscreen speaker if (Speaker == 0 || Speaker == Face_Sprite_Data.FACE_COUNT + 1) { window_x = x; if (Speaker == 0) { speaker_x = 8; } else { speaker_x = Width - 24; } } else { if (Speaker > Face_Sprite_Data.FACE_COUNT / 2) { x -= 56; } window_x = (x + 8) - Width / 2; if (Speaker > 0 && Speaker <= Face_Sprite_Data.FACE_COUNT) { if (Speaker <= Face_Sprite_Data.FACE_COUNT / 2) { window_x = Math.Max(window_x, GUTTERS); } else { window_x = Math.Min(window_x, Config.WINDOW_WIDTH - (Width + GUTTERS)); } } speaker_x = x - window_x; } Loc.X = window_x; Text_Rect.X = window_x + 8; //x -= window_x; //Debug if (Speaker >= 0 && Speaker <= Face_Sprite_Data.FACE_COUNT + 1) { SpeakerArrowPos = speaker_x / 8 * 8; } else { SpeakerArrowPos = null; } ArrowSide = SpeakerArrowSide.Bottom; opacity = 0; set_speaker_name(name); }