Exemplo n.º 1
0
        static BattleEffectInfo CreateFlyingEffect(IRenderView renderView, uint sourceTile, uint targetTile,
                                                   CombatGraphicIndex graphicIndex, Character[] battleField, float baseScale = 1.0f)
        {
            var info          = renderView.GraphicProvider.GetCombatGraphicInfo(graphicIndex);
            var startPosition = GetProjectileTargetPosition(renderView, sourceTile, battleField);
            var endPosition   = GetProjectileTargetPosition(renderView, targetTile, battleField);
            var sourceScale   = GetScaleFromRow(renderView, sourceTile, battleField);
            var targetScale   = GetScaleFromRow(renderView, targetTile, battleField);
            int maxY          = Global.CombatBackgroundArea.Bottom;

            if (startPosition.Y > maxY)
            {
                startPosition.Y = maxY;
            }
            if (endPosition.Y > maxY)
            {
                endPosition.Y = maxY;
            }

            return(new BattleEffectInfo
            {
                StartPosition = startPosition,
                EndPosition = endPosition,
                StartScale = sourceScale * baseScale,
                EndScale = targetScale * baseScale,
                StartTextureIndex = Graphics.CombatGraphicOffset + (uint)graphicIndex,
                FrameSize = new Size(info.GraphicInfo.Width, info.GraphicInfo.Height),
                FrameCount = info.FrameCount,
                Duration = GetFlyDuration(sourceTile, targetTile),
                InitialDisplayLayer = (byte)Math.Min(255, (sourceTile / 6) * 60 + 60), // display over the given row
                EndDisplayLayer = (byte)Math.Min(255, (targetTile / 6) * 60 + 60),     // display over the given row
                MirrorX = battleField[(int)sourceTile] is Monster ? startPosition.X <endPosition.X : startPosition.X> endPosition.X
            });
        }
Exemplo n.º 2
0
        static BattleEffectInfo CreateSimpleEffect(IRenderView renderView, uint tile, CombatGraphicIndex graphicIndex,
                                                   Character[] battleField, uint duration, Func <bool, int> yOffsetProvider = null, float scale = 1.0f, bool ground = false)
        {
            var info     = renderView.GraphicProvider.GetCombatGraphicInfo(graphicIndex);
            var position = GetCenterPosition(renderView, tile, battleField, yOffsetProvider?.Invoke(battleField[tile] is Monster) ?? 0);

            scale *= GetScaleFromRow(renderView, tile, battleField);

            if (ground && battleField[tile] is Monster)
            {
                var offsetY         = yOffsetProvider?.Invoke(true) ?? 0;
                var groundPositionY = Layout.GetMonsterCombatGroundPosition(renderView, (int)tile).Y + offsetY;
                int effectHeight    = Util.Round(scale * info.GraphicInfo.Height);
                position.Y = groundPositionY - effectHeight / 2;
            }

            return(new BattleEffectInfo
            {
                StartPosition = position,
                EndPosition = position,
                StartScale = scale,
                EndScale = scale,
                StartTextureIndex = Graphics.CombatGraphicOffset + (uint)graphicIndex,
                FrameSize = new Size(info.GraphicInfo.Width, info.GraphicInfo.Height),
                FrameCount = info.FrameCount,
                Duration = duration,
                InitialDisplayLayer = (byte)Math.Min(255, (tile / 6) * 60 + 60), // display over the given row
                EndDisplayLayer = (byte)Math.Min(255, (tile / 6) * 60 + 60),     // display over the given row
                MirrorX = false
            });
        }
Exemplo n.º 3
0
        static BattleEffectInfo CreateSimpleEffect(IRenderView renderView, uint sourceTile, uint targetTile, CombatGraphicIndex graphicIndex,
                                                   Character[] battleField, uint duration, float startScale = 1.0f, float scaleChangePerY = 0.0f)
        {
            var   info          = renderView.GraphicProvider.GetCombatGraphicInfo(graphicIndex);
            var   startPosition = GetCenterPosition(renderView, sourceTile, battleField);
            var   endPosition   = GetCenterPosition(renderView, targetTile, battleField);
            float endScale      = startScale + (endPosition.Y - startPosition.Y) * scaleChangePerY;

            return(new BattleEffectInfo
            {
                StartPosition = startPosition,
                EndPosition = endPosition,
                StartScale = startScale,
                EndScale = endScale,
                StartTextureIndex = Graphics.CombatGraphicOffset + (uint)graphicIndex,
                FrameSize = new Size(info.GraphicInfo.Width, info.GraphicInfo.Height),
                FrameCount = info.FrameCount,
                Duration = duration,
                InitialDisplayLayer = (byte)Math.Min(255, (sourceTile / 6) * 60 + 60), // display over the given row
                EndDisplayLayer = (byte)Math.Min(255, (sourceTile / 6) * 60 + 60),     // display over the given row
                MirrorX = false
            });
        }