private PointF getTextLocation(string text, ISayConfig config, float x, float y) { SizeF labelSize = (config.LabelSize.Width - config.TextConfig.PaddingLeft - config.TextConfig.PaddingRight, config.LabelSize.Height - config.TextConfig.PaddingTop - config.TextConfig.PaddingBottom); AGS.API.SizeF size = config.TextConfig.GetTextSize(text, labelSize); float width = size.Width + config.TextConfig.PaddingLeft + config.TextConfig.PaddingRight; float height = size.Height + config.TextConfig.PaddingTop + config.TextConfig.PaddingBottom; float horizontalGap = (config.LabelSize.Width - width) / 2f; y = MathUtils.Clamp(y, 0f, Math.Min(_settings.VirtualResolution.Height, _settings.VirtualResolution.Height - height)); y -= config.PortraitConfig == null ? 0f : config.PortraitConfig.TextOffset.Y; y = MathUtils.Clamp(y, 0f, Math.Min(_settings.VirtualResolution.Height, _settings.VirtualResolution.Height - height)); y += config.TextOffset.Y; float rightPortraitX = _settings.VirtualResolution.Width - 100; x += config.PortraitConfig == null?getTextXOffset(config.LabelSize.Width, config.TextConfig.Alignment) : (x > rightPortraitX ? -config.PortraitConfig.TextOffset.X - getTextXOffsetPortrait(horizontalGap, config.TextConfig.Alignment) : config.PortraitConfig.TextOffset.X - getTextXOffsetPortrait(horizontalGap, config.TextConfig.Alignment)); float maxX = y > _settings.VirtualResolution.Height - 100 && x > rightPortraitX? Math.Min(x, _settings.VirtualResolution.Width) : _settings.VirtualResolution.Width; x += config.TextOffset.X; x = clampX(x, config.TextConfig.Alignment, horizontalGap, maxX, width); return(new PointF(x, y)); }
private PointF getTextLocation(string text, ISayConfig config, float x, float y) { //todo: need to account for alignment AGS.API.SizeF size = config.TextConfig.GetTextSize(text, config.LabelSize); float width = size.Width + config.TextConfig.PaddingLeft + config.TextConfig.PaddingRight; float height = size.Height + config.TextConfig.PaddingTop + config.TextConfig.PaddingBottom; y = MathUtils.Clamp(y, 0f, Math.Min(_settings.VirtualResolution.Height, _settings.VirtualResolution.Height - height)); y -= config.PortraitConfig == null ? 0f : config.PortraitConfig.TextOffset.Y; y = MathUtils.Clamp(y, 0f, Math.Min(_settings.VirtualResolution.Height, _settings.VirtualResolution.Height - height)); y += config.TextOffset.Y; float rightPortraitX = _settings.VirtualResolution.Width - 100; x += config.PortraitConfig == null ? 0f : (x > rightPortraitX ? -config.PortraitConfig.TextOffset.X : config.PortraitConfig.TextOffset.X); float maxX = y > _settings.VirtualResolution.Height - 100 && x > rightPortraitX? Math.Min(x, _settings.VirtualResolution.Width) : _settings.VirtualResolution.Width; x = MathUtils.Clamp(x, 0f, Math.Max(0f, maxX - width - 10f)); x += config.TextOffset.X; return(new PointF(x, y)); }
public ISayLocation GetLocation(string text, ISayConfig sayConfig) { var config = sayConfig.TextConfig; SizeF size = config.GetTextSize(text, sayConfig.LabelSize); float height = size.Height + config.PaddingTop + config.PaddingBottom; float width = size.Width + config.PaddingLeft + config.PaddingRight; return(new AGSSayLocation(new PointF(_game.Settings.VirtualResolution.Width / 2f - width / 2f, _game.Settings.VirtualResolution.Height / 2f - height / 2f), null)); }
public ISayLocation GetLocation(string text, ISayConfig config) { var portraitLocation = getPortraitLocation(config); _lastSpeaker = _obj; float x = portraitLocation == null ? (_obj.BoundingBox.MaxX - (_obj.IgnoreViewport ? 0 : _obj.Room.Viewport.X)) : portraitLocation.Value.X; if (portraitLocation != null && _lastSpeakerOnLeft) x += config.PortraitConfig.Portrait.Width + getBorderWidth(config.PortraitConfig, true).X; float y = portraitLocation == null ? (_obj.BoundingBox.MaxY - (_obj.IgnoreViewport ? 0 : _obj.Room.Viewport.Y)) : _settings.VirtualResolution.Height; return new AGSSayLocation(getTextLocation(text, config, x, y), portraitLocation); }
public static AGSSayConfig FromConfig(ISayConfig config, float paddingBottomOffset = 0f) { AGSSayConfig sayConfig = new AGSSayConfig(); sayConfig.TextConfig = AGSTextConfig.FromConfig (config.TextConfig, paddingBottomOffset); sayConfig.TextDelay = config.TextDelay; sayConfig.SkipText = config.SkipText; sayConfig.LabelSize = config.LabelSize; sayConfig.Border = config.Border; sayConfig.BackgroundColor = config.BackgroundColor; sayConfig.PortraitConfig = config.PortraitConfig; return sayConfig; }
public ISayLocation GetLocation(string text, ISayConfig sayConfig) { var config = sayConfig.TextConfig; float labelHeight = config.GetTextSize(text, sayConfig.LabelSize).Height; float height = labelHeight + config.PaddingTop + config.PaddingBottom; float width = sayConfig.LabelSize.Width + config.PaddingLeft + config.PaddingRight; var screenWidth = _settings.RenderLayer.IndependentResolution?.Width ?? _game.Settings.VirtualResolution.Width; var screenHeight = _settings.RenderLayer.IndependentResolution?.Height ?? _game.Settings.VirtualResolution.Height; return(new AGSSayLocation(new PointF(screenWidth / 2f - width / 2f, screenHeight / 2f - height / 2f), null)); }
public static AGSSayConfig FromConfig(ISayConfig config, float paddingBottomOffset = 0f) { AGSSayConfig sayConfig = new AGSSayConfig(); sayConfig.TextConfig = AGSTextConfig.FromConfig(config.TextConfig, paddingBottomOffset); sayConfig.TextDelay = config.TextDelay; sayConfig.SkipText = config.SkipText; sayConfig.LabelSize = config.LabelSize; sayConfig.Border = config.Border; sayConfig.BackgroundColor = config.BackgroundColor; sayConfig.PortraitConfig = config.PortraitConfig; return(sayConfig); }
public AGSSayComponent(IGameState state, IGameFactory factory, IInput input, ISayLocationProvider location, FastFingerChecker fastFingerChecker, ISayConfig sayConfig, IBlockingEvent <BeforeSayEventArgs> onBeforeSay, ISoundEmitter emitter, ISpeechCache speechCache) { _state = state; _factory = factory; _input = input; _location = location; _fastFingerChecker = fastFingerChecker; _emitter = emitter; _speechCache = speechCache; SpeechConfig = sayConfig; OnBeforeSay = onBeforeSay; }
public AGSSayBehavior(IGameState state, IGameFactory factory, IInput input, ISayLocationProvider location, FastFingerChecker fastFingerChecker, ISayConfig sayConfig, IHasOutfit outfit, IFaceDirectionBehavior faceDirection, IBlockingEvent<BeforeSayEventArgs> onBeforeSay, ISoundEmitter emitter, ISpeechCache speechCache) { _state = state; _factory = factory; _input = input; _location = location; _fastFingerChecker = fastFingerChecker; _outfit = outfit; _faceDirection = faceDirection; _emitter = emitter; _speechCache = speechCache; SpeechConfig = sayConfig; OnBeforeSay = onBeforeSay; }
public ISayLocation GetLocation(string text, ISayConfig config) { var portraitLocation = getPortraitLocation(config); _lastSpeaker = _obj; float x = portraitLocation == null ? (_obj.BoundingBox.MaxX - (_obj.IgnoreViewport ? 0 : _obj.Room.Viewport.X)) : portraitLocation.Value.X; if (portraitLocation != null && _lastSpeakerOnLeft) { x += config.PortraitConfig.Portrait.Width + getBorderWidth(config.PortraitConfig, true).X; } float y = portraitLocation == null ? (_obj.BoundingBox.MaxY - (_obj.IgnoreViewport ? 0 : _obj.Room.Viewport.Y)) : _settings.VirtualResolution.Height; return(new AGSSayLocation(getTextLocation(text, config, x, y), portraitLocation)); }
private PointF?getPortraitLocation(ISayConfig config) { var portraitConfig = config.PortraitConfig; if (portraitConfig == null) { return(null); } var portrait = portraitConfig.Portrait; if (portrait == null) { return(null); } switch (portraitConfig.Positioning) { case PortraitPositioning.Custom: return(null); case PortraitPositioning.Alternating: portrait.Pivot = new PointF(0f, 0f); if (_obj != _lastSpeaker) { _lastSpeakerOnLeft = !_lastSpeakerOnLeft; } return(getPortraitLocation(portraitConfig)); case PortraitPositioning.SpeakerPosition: portrait.Pivot = new PointF(0f, 0f); if (_obj.X < _settings.VirtualResolution.Width / 2f) { _lastSpeakerOnLeft = true; } else { _lastSpeakerOnLeft = false; } return(getPortraitLocation(portraitConfig)); default: throw new NotSupportedException(portraitConfig.Positioning.ToString()); } }
private PointF? getPortraitLocation(ISayConfig config) { var portraitConfig = config.PortraitConfig; if (portraitConfig == null) return null; var portrait = portraitConfig.Portrait; if (portrait == null) return null; switch (portraitConfig.Positioning) { case PortraitPositioning.Custom: return null; case PortraitPositioning.Alternating: portrait.Anchor = new PointF(0f, 0f); if (_obj != _lastSpeaker) { _lastSpeakerOnLeft = !_lastSpeakerOnLeft; } return getPortraitLocation(portraitConfig); case PortraitPositioning.SpeakerPosition: portrait.Anchor = new PointF(0f, 0f); if (_obj.X < _settings.VirtualResolution.Width / 2) _lastSpeakerOnLeft = true; else _lastSpeakerOnLeft = false; return getPortraitLocation(portraitConfig); default: throw new NotSupportedException(portraitConfig.Positioning.ToString()); } }
private PointF getTextLocation(string text, ISayConfig config, float x, float y) { //todo: need to account for alignment AGS.API.SizeF size = config.TextConfig.GetTextSize(text, config.LabelSize); float width = size.Width + config.TextConfig.PaddingLeft + config.TextConfig.PaddingRight; float height = size.Height + config.TextConfig.PaddingTop + config.TextConfig.PaddingBottom; y = MathUtils.Clamp(y, 0f, Math.Min(_settings.VirtualResolution.Height, _settings.VirtualResolution.Height - height)); y -= config.PortraitConfig == null ? 0f : config.PortraitConfig.TextOffset.Y; y = MathUtils.Clamp(y, 0f, Math.Min(_settings.VirtualResolution.Height, _settings.VirtualResolution.Height - height)); y += config.TextOffset.Y; float rightPortraitX = _settings.VirtualResolution.Width - 100; x += config.PortraitConfig == null ? 0f : (x > rightPortraitX ? -config.PortraitConfig.TextOffset.X : config.PortraitConfig.TextOffset.X); float maxX = y > _settings.VirtualResolution.Height - 100 && x > rightPortraitX ? Math.Min(x, _settings.VirtualResolution.Width) : _settings.VirtualResolution.Width; x = MathUtils.Clamp(x, 0f, Math.Max(0f, maxX - width - 10f)); x += config.TextOffset.X; return new PointF(x, y); }
public ISayLocation GetLocation(string text, ISayConfig sayConfig) { var config = sayConfig.TextConfig; SizeF size = config.GetTextSize(text, sayConfig.LabelSize); float height = size.Height + config.PaddingTop + config.PaddingBottom; float width = size.Width + config.PaddingLeft + config.PaddingRight; return new AGSSayLocation(new PointF (_game.Settings.VirtualResolution.Width / 2f - width / 2f, _game.Settings.VirtualResolution.Height / 2f - height / 2f), null); }