mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2025-10-04 13:27:14 +00:00
initial commit. This is icculus version 5542b94cae02a6333845854bbbd1abe0a259f1a4
This commit is contained in:
commit
3096eaf5e2
2519 changed files with 816064 additions and 0 deletions
204
BBGE/Slider.cpp
Normal file
204
BBGE/Slider.cpp
Normal file
|
@ -0,0 +1,204 @@
|
|||
/*
|
||||
Copyright (C) 2007, 2010 - Bit-Blot
|
||||
|
||||
This file is part of Aquaria.
|
||||
|
||||
Aquaria is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#include "Slider.h"
|
||||
#include "Core.h"
|
||||
|
||||
Slider::Slider(int len, int grabRadius, const std::string &bgQuad, const std::string &sliderGfx) : RenderObject()
|
||||
{
|
||||
value = 0;
|
||||
inSlider = false;
|
||||
sliderLength = len;
|
||||
this->grabRadius = grabRadius;
|
||||
|
||||
bg.setTexture(bgQuad);
|
||||
addChild(&bg, PM_STATIC);
|
||||
|
||||
slider.setTexture(sliderGfx);
|
||||
addChild(&slider, PM_STATIC);
|
||||
|
||||
// HACK: ish
|
||||
followCamera = 1;
|
||||
off = 0;
|
||||
|
||||
wasDown = wasDown2 = false;
|
||||
|
||||
shareAlphaWithChildren = 1;
|
||||
}
|
||||
|
||||
void Slider::setValue(float v)
|
||||
{
|
||||
value = v;
|
||||
|
||||
if (value < 0)
|
||||
value = 0;
|
||||
if (value > 1)
|
||||
value = 1;
|
||||
|
||||
slider.position.x = (value * sliderLength) - sliderLength/2.0f;
|
||||
}
|
||||
|
||||
float Slider::getValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
bool Slider::isGrabbed()
|
||||
{
|
||||
return inSlider;
|
||||
}
|
||||
|
||||
void Slider::onUpdate(float dt)
|
||||
{
|
||||
RenderObject::onUpdate(dt);
|
||||
|
||||
if (alpha.x != 1) return;
|
||||
|
||||
bool b = (core->mouse.buttons.left || core->mouse.buttons.right) && fabsf(core->mouse.position.y-position.y) < grabRadius;
|
||||
if (!b && inSlider)
|
||||
inSlider = false;
|
||||
|
||||
if ((core->mouse.position - this->position).isLength2DIn(5))
|
||||
{
|
||||
if (!wasDown && core->mouse.buttons.left)
|
||||
wasDown = true;
|
||||
else if (wasDown && !core->mouse.buttons.left)
|
||||
{
|
||||
wasDown = false;
|
||||
setValue(value - 0.1f);
|
||||
}
|
||||
if (!wasDown2 && core->mouse.buttons.right)
|
||||
wasDown2 = true;
|
||||
else if (wasDown2 && !core->mouse.buttons.right)
|
||||
{
|
||||
wasDown2 = false;
|
||||
setValue(value + 0.1f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wasDown = false;
|
||||
wasDown2 = false;
|
||||
}
|
||||
|
||||
if (!inSlider)
|
||||
{
|
||||
inSlider = (b && (core->mouse.position - slider.getWorldPosition()).isLength2DIn(grabRadius));
|
||||
if (inSlider)
|
||||
{
|
||||
off = core->mouse.position.x - slider.getWorldPosition().x;
|
||||
off = -off;
|
||||
}
|
||||
}
|
||||
|
||||
if (inSlider)
|
||||
{
|
||||
slider.position.x = core->mouse.position.x - position.x + off;
|
||||
//slider.position.interpolateTo(Vector(core->mouse.position.x - position.x), dt*2);
|
||||
int w2 = sliderLength/2;
|
||||
if (slider.position.x > w2)
|
||||
{
|
||||
slider.position.x = w2;
|
||||
}
|
||||
else if (slider.position.x < -w2)
|
||||
{
|
||||
slider.position.x = -w2;
|
||||
}
|
||||
value = float(slider.position.x + w2)/float(sliderLength);
|
||||
}
|
||||
}
|
||||
|
||||
CheckBox::CheckBox(int clickRadius, const std::string &bgQuad, const std::string &fgQuad, const std::string &sfx) : RenderObject()
|
||||
{
|
||||
this->sfx = sfx;
|
||||
this->clickRadius = clickRadius;
|
||||
|
||||
bg.setTexture(bgQuad);
|
||||
addChild(&bg, PM_STATIC);
|
||||
|
||||
fg.setTexture(fgQuad);
|
||||
addChild(&fg, PM_STATIC);
|
||||
|
||||
// HACK: ish
|
||||
followCamera = 1;
|
||||
|
||||
wasDown = false;
|
||||
}
|
||||
|
||||
void CheckBox::setValue(int v)
|
||||
{
|
||||
value = v;
|
||||
updateVisual(0);
|
||||
}
|
||||
|
||||
void CheckBox::updateVisual(float t)
|
||||
{
|
||||
if (value != 0)
|
||||
{
|
||||
fg.alpha.interpolateTo(1, t);
|
||||
}
|
||||
else
|
||||
{
|
||||
fg.alpha.interpolateTo(0, t);
|
||||
}
|
||||
}
|
||||
|
||||
int CheckBox::getValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
void CheckBox::onUpdate(float dt)
|
||||
{
|
||||
RenderObject::onUpdate(dt);
|
||||
fg.alphaMod = alpha.x;
|
||||
bg.alphaMod = alpha.x;
|
||||
if (alpha.x < 1) return;
|
||||
if ((core->mouse.position - getWorldPosition()).isLength2DIn(clickRadius))
|
||||
{
|
||||
if ((core->mouse.buttons.left || core->mouse.buttons.right))
|
||||
{
|
||||
if (!wasDown)
|
||||
{
|
||||
//debugLog("setting wasDown");
|
||||
wasDown = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wasDown)
|
||||
{
|
||||
//debugLog("changing value");
|
||||
wasDown = false;
|
||||
if (value !=0)
|
||||
{ value = 0; }
|
||||
else
|
||||
{ value= 1; }
|
||||
updateVisual(0);
|
||||
core->sound->playSfx(sfx);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wasDown = false;
|
||||
}
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue