I have some sliders set up so that the are limited in their x motion by either the x value on the slider track or by the furthest x they could go relative to the players current cash(as long as its not greater than the first limitation). This all works great if the slider is operated at a regular speed BUT if I grab the slider and rip it to the right I can spend more money than I have and go off the track(even off the screen).
The basic structure is this:
eventHandler onDown
{
listen for enterframe
}
enterFrame handler
{
move that slider
listen for mouse up onUp
}
Handle onUp
{
figure final values
listen for mouseDown onDown
}
Im at a loss, heres the code:
private function onDown(e:MouseEvent):void {
trace("v2300 ONDOWN");
switch(e.currentTarget.name)
{
case("repairDragger"):
repairStart = e.currentTarget.x;
break;
case("fuelDragger"):
fuelStart = e.currentTarget.x;
break;
}
currentSliderTarget = e.currentTarget as MovieClip;
draggerOffset = new Point(e.localX, e.localY);
e.currentTarget.addEventListener(Event.ENTER_FRAME, onFrame);
e.currentTarget.stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
currentDragger = e.currentTarget as MovieClip;
}
private function onUp(e:MouseEvent):void
{
trace("v2300 ONUP currentTarget= " +currentSliderTarget.name);
switch (currentSliderTarget.name)
{
case "repairDragger":
//trace("V2416 onUp repairDraggerCase and target= "+e.currentTarget.name);
var delta:Number = repairEnd - repairStart//gives delta
var deltaValue:Number = Math.ceil((delta * 3.33) * _model.repairCost);
//trace("v2325 deltaValue= "+ deltaValue);
_model.cash -= deltaValue;
asBaseScreen.sliderArray[0].stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
break;
case "fuelDragger":
var fuelDelta:Number = fuelEnd - fuelStart
var fuelDeltaValue:Number = Math.ceil((fuelDelta * fuelCostPerTic) );
var fuelDeltaWeight:Number = Math.ceil((fuelDelta * 3.33) * _model.fuelWeight);
_model.totalShipWeight += fuelDeltaWeight;
_model.cash -= fuelDeltaValue;
asBaseScreen.sliderArray[1].stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
break;
}
//repairEnd = e.currentTarget.x;
//trace("v2317 repairEnd= " +repairEnd);
currentDragger.removeEventListener(Event.ENTER_FRAME, onFrame);
}
private function onFrame(e:Event):void
{
//trace("v2317 onFrameRunning");
var dragger:MovieClip = e.currentTarget.parent.getChildAt(1) as MovieClip;
var track:MovieClip=e.currentTarget.parent.getChildAt(0) as MovieClip
var mouseX:Number = e.currentTarget.parent.mouseX;
var dragable:Boolean = true;
//var repairStart:Number;
//var repairEnd:Number;
var draggerBounds = dragger.getBounds(dragger.parent);
var trackBounds = track.getBounds(dragger.parent);
/*if (dragger.x > 300)
{
dragger.x =300;
}
if (dragger.x < 0)
{
dragger.x = 0;
}*/
switch (dragger.name)
{
case "repairDragger":
//var oldDraggerX:Number;// = dragger.x;
var repairIncrament:Number = _model.totalShipHealth / 300;
var costPerTic:Number = repairIncrament * _model.repairCost
var potentialMove:Number = Math.floor(( _model.cash / 333)+repairStart);
//trace("v2369 potential= " + potentialMove);
if (dragable == true)
{
dragger.x = mouseX - draggerOffset.x;
}
if (dragger.x>300)
{
dragger.x = 300;
}
else if(dragger.x > potentialMove)
{
dragger.x = potentialMove;
}
if (dragger.x<0)
{
dragger.x = 0;
}
asBaseScreen.draggerColumnArray[0].x = 35;
TweenLite.to(asBaseScreen.draggerColumnArray[0], 0, { scaleX:(dragger.x / 300) * 14 } );
asBaseScreen.sliderArray[0].draggerText.text = addCommas(Math.ceil(dragger.x * repairIncrament));
repairEnd = dragger.x;// Math.ceil(dragger.x * repairIncrament);
break;
case "fuelDragger":
var fuelIncrament:Number = Math.ceil(_model.shipTotalFuel / 300);
//var fuelCostPerTic:Number = fuelIncrament * _model.fuelCost;
var fuelPotentialMove:Number = Math.floor( _model.cash / fuelCostPerTic)+fuelStart;// + fuelStart);
//trace("v2522 fuelIncrament= " + fuelIncrament);
//trace("v2523 fuelCostPerTic= " + fuelCostPerTic);
//trace("v2524 fuelPotentialMove= " + fuelPotentialMove);
//trace("v2525 dragger.x= " +dragger.x );
//trace("v2526 cash/incrament8cost= " +_model.cash / (fuelIncrament * _model.fuelCost));
//trace("v2527 fuelStart= " +fuelStart );
//trace("v2528 fuelEnd= " +fuelEnd );
//trace("v2529 this");
fuelCostPerTic=fuelIncrament * _model.fuelCost;
if (dragable == true)
{
dragger.x = mouseX - draggerOffset.x;
}
if (dragger.x>300)
{
dragger.x = 300;
}
else if(dragger.x >= fuelPotentialMove)
{
dragger.x = fuelPotentialMove;
}
if (dragger.x < 0)
{
dragger.x = 0;
}
asBaseScreen.draggerColumnArray[1].x = 35;
TweenLite.to(asBaseScreen.draggerColumnArray[1], 0, { scaleX:(dragger.x / 300) * 14 } );
asBaseScreen.sliderArray[1].draggerText.text = addCommas(Math.ceil(dragger.x * fuelIncrament));
fuelEnd = dragger.x;
break;
case "cargoDragger":
asBaseScreen.draggerColumnArray[2].x = 35;
TweenLite.to(asBaseScreen.draggerColumnArray[2], 0, { scaleX:(dragger.x / 300)*12 } );
break;
case "oreDragger":
asBaseScreen.draggerColumnArray[3].x = 35;
TweenLite.to(asBaseScreen.draggerColumnArray[3], 0, { scaleX:(dragger.x / 300)*12 } );
break;
}