コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
ファイル: AGSMessageBox.cs プロジェクト: ebrucucen/MonoAGS
            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));
            }
コード例 #4
0
        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);
		}
コード例 #5
0
ファイル: AGSSayConfig.cs プロジェクト: tzachshabtay/MonoAGS
		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;
		}
コード例 #6
0
ファイル: AGSMessageBox.cs プロジェクト: tzachshabtay/MonoAGS
            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));
            }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: AGSSayComponent.cs プロジェクト: saizant/MonoAGS
 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;
 }
コード例 #9
0
		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;
		}
コード例 #10
0
        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));
        }
コード例 #11
0
        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());
            }
        }
コード例 #12
0
 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());
     }
 }
コード例 #13
0
        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);
        }
コード例 #14
0
ファイル: AGSMessageBox.cs プロジェクト: tzachshabtay/MonoAGS
            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);
			}