1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-18 10:38:31 +02:00
VVVVVV/mobile_version/src/starling/filters/DropShadowFilter.as
Terry Cavanagh 72d018ea04 Update mobile version to mobile v2.2.1
The android version just got a much needed update to fix some resolution issues on devices with cutouts.

It turns out the mobile source was actually pretty out of date, like 3 versions out of date! This commit brings it up to date.

All the changes have just been about keeping the game running on modern devices, though. The biggest change was adding the Starling library to the project, which made the game GPU powered and sped the whole thing up.
2022-12-02 18:19:58 +01:00

173 lines
6.4 KiB
ActionScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// =================================================================================================
//
// Starling Framework
// Copyright Gamua GmbH. All Rights Reserved.
//
// This program is free software. You can redistribute and/or modify it
// in accordance with the terms of the accompanying license agreement.
//
// =================================================================================================
package starling.filters
{
import starling.rendering.Painter;
import starling.textures.Texture;
import starling.utils.Padding;
/** The DropShadowFilter class lets you add a drop shadow to display objects.
* To create the shadow, the class internally uses the BlurFilter.
*/
public class DropShadowFilter extends FragmentFilter
{
private var _blurFilter:BlurFilter;
private var _compositeFilter:CompositeFilter;
private var _distance:Number;
private var _angle:Number;
/** Creates a new DropShadowFilter instance with the specified parameters.
*
* @param distance the offset distance of the shadow, in points.
* @param angle the angle with which the shadow is offset, in radians.
* @param color the color of the shadow.
* @param alpha the alpha value of the shadow. Values between 0 and 1 modify the
* opacity; values > 1 will make it stronger, i.e. produce a harder edge.
* @param blur the amount of blur with which the shadow is created. Note that high
* values will cause the number of render passes to grow.
* @param resolution the resolution of the filter texture. '1' means full resolution,
* '0.5' half resolution, etc.
*/
public function DropShadowFilter(distance:Number=4.0, angle:Number=0.785,
color:uint=0x0, alpha:Number=0.5, blur:Number=1.0,
resolution:Number=0.5)
{
_compositeFilter = new CompositeFilter();
_blurFilter = new BlurFilter(blur, blur, resolution);
_distance = distance;
_angle = angle;
this.color = color;
this.alpha = alpha;
updatePadding();
}
/** @inheritDoc */
override public function dispose():void
{
_blurFilter.dispose();
_compositeFilter.dispose();
super.dispose();
}
/** @private */
override public function process(painter:Painter, helper:IFilterHelper,
input0:Texture = null, input1:Texture = null,
input2:Texture = null, input3:Texture = null):Texture
{
var shadow:Texture = _blurFilter.process(painter, helper, input0);
var result:Texture = _compositeFilter.process(painter, helper, shadow, input0);
helper.putTexture(shadow);
return result;
}
/** @private */
override public function get numPasses():int
{
return _blurFilter.numPasses + _compositeFilter.numPasses;
}
private function updatePadding():void
{
var offsetX:Number = Math.cos(_angle) * _distance;
var offsetY:Number = Math.sin(_angle) * _distance;
_compositeFilter.setOffsetAt(0, offsetX, offsetY);
var blurPadding:Padding = _blurFilter.padding;
var left:Number = blurPadding.left;
var right:Number = blurPadding.right;
var top:Number = blurPadding.top;
var bottom:Number = blurPadding.bottom;
if (offsetX > 0) right += offsetX; else left -= offsetX;
if (offsetY > 0) bottom += offsetY; else top -= offsetY;
padding.setTo(left, right, top, bottom);
}
/** The color of the shadow. @default 0x0 */
public function get color():uint { return _compositeFilter.getColorAt(0); }
public function set color(value:uint):void
{
if (color != value)
{
_compositeFilter.setColorAt(0, value, true);
setRequiresRedraw();
}
}
/** The alpha value of the shadow. Values between 0 and 1 modify the opacity;
* values > 1 will make it stronger, i.e. produce a harder edge. @default 0.5 */
public function get alpha():Number { return _compositeFilter.getAlphaAt(0); }
public function set alpha(value:Number):void
{
if (alpha != value)
{
_compositeFilter.setAlphaAt(0, value);
setRequiresRedraw();
}
}
/** The offset distance for the shadow, in points. @default 4.0 */
public function get distance():Number { return _distance; }
public function set distance(value:Number):void
{
if (_distance != value)
{
_distance = value;
setRequiresRedraw();
updatePadding();
}
}
/** The angle with which the shadow is offset, in radians. @default Math.PI / 4 */
public function get angle():Number { return _angle; }
public function set angle(value:Number):void
{
if (_angle != value)
{
_angle = value;
setRequiresRedraw();
updatePadding();
}
}
/** The amount of blur with which the shadow is created.
* The number of required passes will be <code>Math.ceil(value) × 2</code>.
* @default 1.0 */
public function get blur():Number { return _blurFilter.blurX; }
public function set blur(value:Number):void
{
if (blur != value)
{
_blurFilter.blurX = _blurFilter.blurY = value;
setRequiresRedraw();
updatePadding();
}
}
/** @private */
override public function get resolution():Number { return _blurFilter.resolution; }
override public function set resolution(value:Number):void
{
if (resolution != value)
{
_blurFilter.resolution = value;
setRequiresRedraw();
updatePadding();
}
}
}
}