1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2025-07-05 15:34:48 +00:00
This commit is contained in:
Dmitry Grigoryev 2021-01-02 01:50:48 +01:00
commit c6968454e6
1068 changed files with 155492 additions and 90661 deletions

1
.gitignore vendored
View file

@ -23,3 +23,4 @@ bin/*
*.diff
!.gitignore
!.travis.yml

52
.travis.yml Normal file
View file

@ -0,0 +1,52 @@
# http://docs.travis-ci.com/user/build-configuration/
language: cpp
sudo: false
compiler:
- gcc
- clang
os:
- linux
- osx
#matrix:
#branches:
# only:
# - master
addons:
apt:
packages:
- libopenal-dev
- libsdl-dev
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install sdl openal-soft; fi
script:
# ALL THE BUILD COMMANDS HERE
- export CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;/usr/lib/x86_64-linux-gnu/"
- CMAKE_OPTIONS='-DCMAKE_PREFIX_PATH='"$CMAKE_PREFIX_PATH"' -DCMAKE_BUILD_TYPE=RelWithDebInfo -DAQUARIA_INTERNAL_FREETYPE=OFF -DAQUARIA_INTERNAL_LUA=OFF -DAQUARIA_INTERNAL_OGGVORBIS=OFF -DAQUARIA_INTERNAL_OPENAL=OFF -DAQUARIA_INTERNAL_PNG=OFF -DAQUARIA_INTERNAL_SDL=OFF -DAQUARIA_INTERNAL_TINYXML2=OFF -DAQUARIA_INTERNAL_ZLIB=OFF'
- rm -rf cmake-build
- mkdir cmake-build
- cd cmake-build
- cmake $CMAKE_OPTIONS ..
- make -j 2
notifications:
irc:
channels:
- "irc.esper.net#bitblot"
skip_join: true
use_notice: true
on_success: change
template:
#- "[%{commit}: %{author}] %{message}"
#- "%{build_url}"
- "[%{repository_slug}#%{branch} @%{commit}] (%{author}): %{message}"
- "Diff: %{compare_url}"
- "Build: %{build_url}"

View file

@ -18,4 +18,3 @@ 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.
*/
// moved

View file

@ -37,7 +37,6 @@ class TimelineRender : public RenderObject
{
void onRender()
{
#ifdef BBGE_BUILD_OPENGL
glLineWidth(1);
glBegin(GL_LINES);
glColor4f(1, 1, 1, 1);
@ -47,7 +46,6 @@ class TimelineRender : public RenderObject
glVertex3f(x, 5, 0);
}
glEnd();
#endif
}
};
@ -100,11 +98,7 @@ void KeyframeWidget::shiftRight()
void KeyframeWidget::onUpdate(float dt)
{
/*
if (this->key == ae->currentKey)
color = Vector(0.75, 0.75, 1);
else
*/
Quad::onUpdate(dt);
if (life != 1 || ae->editSprite->isAnimating()) return;
switch(ae->editSprite->getCurrentAnimation()->getKeyframe(this->key)->lerpType)
@ -139,7 +133,7 @@ void KeyframeWidget::onUpdate(float dt)
{
if (core->mouse.buttons.left)
{
//ae->selectionLocked = false;
movingWidget = this;
ae->currentKey = this->key;
}
@ -236,7 +230,7 @@ void AnimationEditor::applyState()
editSprite->cull = false;
editSprite->loadSkeletal(editingFile);
editSprite->position = Vector(400,300);
//editSprite->scale = Vector(0.5, 0.5);
addAction(MakeFunctionEvent(AnimationEditor, lmbu), ActionMapper::MOUSE_BUTTON_LEFT, 0);
addAction(MakeFunctionEvent(AnimationEditor, lmbd), ActionMapper::MOUSE_BUTTON_LEFT, 1);
@ -271,7 +265,7 @@ void AnimationEditor::applyState()
addAction(MakeFunctionEvent(AnimationEditor, undo), KEY_Z, 0);
addAction(MakeFunctionEvent(AnimationEditor, redo), KEY_Y, 0);
//addAction(MakeFunctionEvent(AnimationEditor, lockSelection), KEY_L, 0);
addAction(MakeFunctionEvent(AnimationEditor, cycleLerpType), KEY_L, 0);
addAction(MakeFunctionEvent(AnimationEditor, selectPrevBone), KEY_UP, 0);
@ -294,32 +288,12 @@ void AnimationEditor::applyState()
/*
addAction("mbl", KEY_A);
addAction("mbr", KEY_D);
addAction("mbu", KEY_W);
addAction("mbd", KEY_S);
*/
addAction(ACTION_SWIMLEFT, KEY_J);
addAction(ACTION_SWIMRIGHT, KEY_K);
addAction(ACTION_SWIMUP, KEY_UP);
addAction(ACTION_SWIMDOWN, KEY_DOWN);
/*
addAction(ACTION_BONELEFT, KEY_NUMPAD4);
addAction(ACTION_BONERIGHT, KEY_NUMPAD6);
addAction(ACTION_BONEUP, KEY_NUMPAD8);
addAction(ACTION_BONEDOWN, KEY_NUMPAD2);
*/
//addAction("", );
/*
addAction(MakeFunctionEvent(AnimationEditor, zoomOut), KEY_NUMPAD2, 0);
addAction(MakeFunctionEvent(AnimationEditor, zoomIn), KEY_NUMPAD8, 0);
*/
addRenderObject(editSprite, LR_ENTITIES);
@ -620,11 +594,11 @@ void AnimationEditor::rebuildKeyframeWidgets()
offx = keyframeWidgets[i]->offset.x;
}
keyframeWidgets.clear();
if (Animation *a = editSprite->getCurrentAnimation())
{
for (int i = 0; i < 1000; i++)
{
if (editSprite->getCurrentAnimation())
{
SkeletalKeyframe *key = editSprite->getCurrentAnimation()->getKeyframe(i);
SkeletalKeyframe *key = a->getKeyframe(i);
if (!key) break;
KeyframeWidget *k = new KeyframeWidget(i);
k->offset.x = offx;
@ -670,35 +644,9 @@ void AnimationEditor::moveBoneStripPoint(const Vector &mov)
b->strip[selectedStripPoint] = sel->changeStrip[selectedStripPoint] += mov*0.006f;
sel->setGridPoints(sel->stripVert, sel->strip);
/*
float sz = sel->getStripSegmentSize();
for (int i = selectedStripPoint; i > 0; i--)
{
Vector diff = sel->changeStrip[i] - sel->changeStrip[i-1];
if (!diff.isLength2DIn(sz))
{
diff.setLength2D(sz);
sel->changeStrip[i-1] = sel->changeStrip[i] - diff;
}
}
for (int i = selectedStripPoint; i < sel->changeStrip.size()-1; i++)
{
Vector diff = sel->changeStrip[i] - sel->changeStrip[i+1];
if (!diff.isLength2DIn(sz))
{
diff.setLength2D(sz);
sel->changeStrip[i+1] = sel->changeStrip[i] - diff;
}
}
b->strip = sel->changeStrip;
*/
//sel->setStrip(sel->changeStrip);
}
}
}
@ -710,7 +658,7 @@ void AnimationEditor::selectPrevBone()
if (editingStrip)
{
//moveBoneStripPoint(Vector(0, 1));
}
else
{
@ -724,7 +672,7 @@ void AnimationEditor::selectNextBone()
if (editingStrip)
{
//moveBoneStripPoint(Vector(0, -1));
}
else
{
@ -746,6 +694,8 @@ void AnimationEditor::update(float dt)
}
Vector ebdata;
int pass = 0;
int origpass = 0;
if (editingBone)
{
@ -753,17 +703,19 @@ void AnimationEditor::update(float dt)
ebdata.x = editingBone->position.x;
ebdata.y = editingBone->position.y;
ebdata.z = editingBone->rotation.z;
pass = editingBone->getRenderPass();
origpass = editingBone->originalRenderPass;
}
text->setText(os.str());
char t2buf[128];
sprintf(t2buf, "Bone x: %.3f, y: %.3f, rot: %.3f strip: %d", ebdata.x, ebdata.y, ebdata.z, selectedStripPoint);
sprintf(t2buf, "Bone x: %.3f, y: %.3f, rot: %.3f strip: %d pass: %d (%d)", ebdata.x, ebdata.y, ebdata.z, selectedStripPoint, pass, origpass);
text2->setText(t2buf);
if (core->mouse.buttons.middle)
{
editSprite->position += core->mouse.change;
//core->setMousePosition(Vector(400,300));
}
if (editingStrip)
@ -807,29 +759,7 @@ void AnimationEditor::update(float dt)
updateEditingBone();
if (editingBone)
{
/*
float amt = dt;
if (isActing("mbl"))
{
editingBone->position.x -= amt;
applyTranslation();
}
if (isActing("mbr"))
{
editingBone->position.x += amt;
applyTranslation();
}
if (isActing("mbu"))
{
editingBone->position.y -= amt;
applyTranslation();
}
if (isActing("mbd"))
{
editingBone->position.y += amt;
applyTranslation();
}
*/
}
}
if (editingBone && boneEdit == 1)
@ -1049,8 +979,8 @@ void AnimationEditor::lmbd()
{
pushUndo();
updateEditingBone();
if (editingBone /*&& (editSprite->position - core->mouse.position).isLength2DIn(400)*/
/*&& core->mouse.position.x > 200 && core->mouse.position.y < 560*/
if (editingBone
&& core->mouse.position.x > 400-200 && core->mouse.position.x < 400+200
&& core->mouse.position.y > 300-200 && core->mouse.position.y < 300+200
)
@ -1144,7 +1074,7 @@ void AnimationEditor::rmbd()
updateEditingBone();
if (editingBone)
{
//cursorOffset = editingBone->position + editSprite->position - core->mouse.position;
cursorOffset = core->mouse.position;
rotOffset = editingBone->rotation.z;
boneEdit = 2;
@ -1182,7 +1112,6 @@ void AnimationEditor::flipRot()
BoneKeyframe *bcur = editSprite->getCurrentAnimation()->getKeyframe(currentKey)->getBoneKeyframe(editingBone->boneIdx);
if (bcur)
{
int rotdiff = editingBone->rotation.z - bcur->rot;
if (!core->getCtrlState())
{
for (int i = 0; i < editSprite->getCurrentAnimation()->getNumKeyframes(); ++i)
@ -1303,8 +1232,8 @@ void AnimationEditor::rmbu()
void AnimationEditor::mmbd()
{
//editingBone = editSprite->getSelectedBone(ignoreBone);
//cloneBoneAhead();
}
void AnimationEditor::cloneBoneAhead()
@ -1425,8 +1354,8 @@ void AnimationEditor::loadSkin()
std::string file = dsq->getUserInputString("Enter skin file to load:");
if (file.empty()) return;
//this->editingFile = file;
//loadFile();
SkeletalSprite::clearCache();
editSprite->loadSkin(file);
}

View file

@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
AquariaComboBox::AquariaComboBox(Vector textscale) : RenderObject()
{
//Quad *bar, *window, *scrollBtnUp, *scrollBtnDown, *scrollBar;
bar = new Quad("gui/combo-drop", Vector(0,0));
addChild(bar, PM_POINTER);
@ -120,7 +120,7 @@ void AquariaComboBox::onUpdate(float dt)
if (alpha.x < 1)
return;
//window->alpha.interpolateTo(1, 0.2);
if (enqueuedSelectItem != -1)
{
@ -375,7 +375,7 @@ void AquariaComboBoxItem::onUpdate(float dt)
{
color = selectedColor;
label->color = selectedColor;
//alphaMod = 1;
if (!mb && core->mouse.buttons.left)
{
mb = true;
@ -396,6 +396,6 @@ void AquariaComboBoxItem::onUpdate(float dt)
label->color = unselectedColor;
mb = false;
//alphaMod = 0.5;
}
}

View file

@ -5,7 +5,7 @@
// Define BBGE_SKIP_CONFIG_HEADERS to use CMake-only configuration.
#ifndef BBGE_SKIP_CONFIG_HEADERS
//#define AQUARIA_DEMO 1
#define AQUARIA_BUILD_CONSOLE 1
#define AQUARIA_BUILD_SCENEEDITOR 1

View file

@ -100,17 +100,11 @@ void AquariaGuiElement::setFocus(bool v)
void AquariaGuiElement::updateMovement(float dt)
{
//debugLog("in update movement");
if (hasFocus && isGuiVisible() && canDirMove && canDirMoveGlobal && hasInput())
{
//debugLog("has focus");
/*
if (alpha.x <= 0 || alphaMod <= 0)
{
setFocus(false);
return;
}
*/
if (guiMoveTimer > 0)
{
@ -162,7 +156,6 @@ void AquariaGuiElement::updateMovement(float dt)
if (gui)
{
gui->setFocus(true);
//this->setFocus(false);
@ -461,21 +454,12 @@ AquariaKeyConfig::AquariaKeyConfig(const std::string &actionInputName, InputSetT
bg->alphaMod = 0;
addChild(bg, PM_POINTER);
/*
label = new BitmapText(&dsq->smallFont);
label->setText("KeyConfig");
label->parentManagedPointer = 1;
label->position = Vector(0, -10);
label->scale = Vector(0.8, 0.8);
addChild(label);
*/
//keyConfigFont = new DebugFont(6, "keyConfig");
keyConfigFont = new TTFText(&dsq->fontArialSmallest);
keyConfigFont->setAlign(ALIGN_CENTER);
//keyConfigFont->position = Vector(0, -10);
addChild(keyConfigFont, PM_POINTER);
@ -523,16 +507,7 @@ void AquariaKeyConfig::toggleEnterKey(int on)
bg->alphaMod = 0.5;
bg->color = Vector(0.5, 0.5, 0.5);
}
/*
if (on)
{
label->scale = Vector(2, 2);
}
else
{
label->scale = Vector(1, 1);
}
*/
}
void AquariaKeyConfig::setLock(int lock)
@ -548,8 +523,6 @@ void AquariaKeyConfig::onUpdate(float dt)
AquariaGuiElement::updateMovement(dt);
RenderObject::onUpdate(dt);
@ -640,15 +613,8 @@ void AquariaKeyConfig::onUpdate(float dt)
{
if (i != KEY_ESCAPE)
{
/*
if (i == KEY_DELETE || i == KEY_BACKSPACE)
else
{
*/
/*
if (i == KEY_0 || i == KEY_1 || i == KEY_2 || i == KEY_3 || i == KEY_4 || i == KEY_5 || i == KEY_6 || i == KEY_7
|| i == KEY_8 || i == KEY_9)
*/
if (i >= KEY_0 && i <= KEY_9)
{
*value = i-KEY_0;
@ -729,6 +695,8 @@ void AquariaKeyConfig::onUpdate(float dt)
}
}
break;
case INPUTSET_NONE:
break;
}
}
@ -745,11 +713,11 @@ void AquariaKeyConfig::onUpdate(float dt)
}
if (!keyDown && (core->mouse.buttons.left || core->mouse.buttons.right/* || core->getKeyState(KEY_RETURN)*/))
if (!keyDown && (core->mouse.buttons.left || core->mouse.buttons.right))
{
keyDown = true;
}
else if (keyDown && (!core->mouse.buttons.left && !core->mouse.buttons.right /*&& !core->getKeyState(KEY_RETURN)*/))
else if (keyDown && (!core->mouse.buttons.left && !core->mouse.buttons.right ))
{
keyDown = false;
@ -805,18 +773,15 @@ AquariaMenuItem::AquariaMenuItem() : Quad(), ActionMapper(), AquariaGuiElement()
glowFont->position = Vector(0, -sz/2, 0);
glowFont->setBlendType(BLEND_ADD);
glowFont->alpha = 0;
//glowFont->scale.interpolateTo(Vector(1.1,1.1), 0.5, -1, 1, 1);
addChild(glowFont, PM_POINTER, RBP_OFF);
//setTexture("bubble");
//this->shareAlphaWithChildren = true;
width = 0;
height = 0;
highlighted = false;
/*
width = 256;
height = 64;
*/
cull = false;
followCamera = 1;
addAction(MakeFunctionEvent(AquariaMenuItem, onClick), ActionMapper::MOUSE_BUTTON_LEFT, 0);
@ -888,9 +853,8 @@ void AquariaMenuItem::onClick()
event.call();
//glowFont->scale.interpolateTo(Vector(4,4), 0.5, 1, 1);
//glowFont->alpha.interpolateTo(0, 0.5);
//scale.interpolateTo(Vector(4, 4), 3);
}
}
@ -913,7 +877,7 @@ void AquariaMenuItem::toggleHighlight(bool state)
{
glowFont->alpha.interpolateTo(0.3, 0.2);
}
//scale.interpolateTo(Vector(1.1, 1.1), 0.2);
}
else
{
@ -922,7 +886,7 @@ void AquariaMenuItem::toggleHighlight(bool state)
else
glowFont->alpha.interpolateTo(0, 0.2);
}
//scale.interpolateTo(Vector(1,1), 0.2);
}
void AquariaMenuItem::onUpdate(float dt)
@ -951,10 +915,7 @@ void AquariaMenuItem::onUpdate(float dt)
quad->alpha.x = alpha.x;
}
/*
font->position = this->position;
font->alpha = this->alpha;
*/
if (hasInput())
{
if (alpha.x == 1)

View file

@ -184,8 +184,8 @@ protected:
InputSetType inputSetType;
int inputIdx;
//BitmapText *label;
//DebugFont *keyConfigFont;
TTFText *keyConfigFont;
Quad *bg;
};
@ -247,18 +247,6 @@ protected:
std::vector<AquariaComboBoxItem*> shownItems;
};
/*
class SelectionList : public RenderObject
{
public:
SelectionList(std::string file, std::string font, int items);
void reload();
virtual void onSelect(int idx){}
protected:
void load();
std::vector<std::string> list;
};
*/
#endif

View file

@ -37,12 +37,8 @@ AquariaSaveSlot::AquariaSaveSlot(int slot) : AquariaGuiQuad()
box->setWidthHeight(450, 96);
box->alphaMod = 0;
addChild(box, PM_POINTER);
//setTexture("dialogue-bg");
//setTexture("HintBox");
//renderQuad = false;
//shareAlphaWithChildren = 1;
text1 = new BitmapText(&dsq->smallFont);
text1->setFontSize(14);
@ -65,12 +61,7 @@ AquariaSaveSlot::AquariaSaveSlot(int slot) : AquariaGuiQuad()
if (description.length() > 0)
{
std::ostringstream os;
os << dsq->continuity.stringBank.get(2002) << " ";
if (dsq->isDeveloperKeys())
os << slot;
else
os << (slot+1);
os << " - " << description;
os << dsq->continuity.stringBank.get(2002) << " " << (slot+1) << " - " << description;
text1->setText(os.str());
glowText->setText(os.str());
@ -127,7 +118,7 @@ AquariaSaveSlot::AquariaSaveSlot(int slot) : AquariaGuiQuad()
core->resetTimer();
screen->upperLeftTextureCoordinates = Vector(0, 1);
screen->lowerRightTextureCoordinates = Vector(1, 0.25);
//screen->scale = Vector(0.4, 0.3);
if (screen->getWidth() == 0)
screen->color = 0;
@ -176,7 +167,7 @@ void AquariaSaveSlot::close(bool trans)
setDecayRate(2);
fadeAlphaWithLife = 1;
}
//shareAlphaWithChildren = 1;
}
void AquariaSaveSlot::transition()
@ -209,10 +200,10 @@ void AquariaSaveSlot::onUpdate(float dt)
if (core->mouse.position.x < position.x + 150 && core->mouse.position.x > position.x - 300
&& core->mouse.position.y < position.y+32 && core->mouse.position.y > position.y-32)
{
//setBlendType(BLEND_ADD);
glowText->alpha.interpolateTo(0.5, 0.2);
screen->color.interpolateTo(Vector(1,1,1), 0.1);
//screen->scale.interpolateTo(Vector(1.2, 1.2), 0.2);
if ((core->mouse.buttons.left || core->mouse.buttons.right) && !mbDown)
{
mbDown = true;
@ -223,22 +214,22 @@ void AquariaSaveSlot::onUpdate(float dt)
if (!(empty && dsq->saveSlotMode == SSM_LOAD))
{
selected = true;
// pick this file
dsq->playMenuSelectSfx();
closed = true;
if (dsq->saveSlotMode == SSM_LOAD)
{
//dsq->clearSaveSlots();
dsq->hideSaveSlots();
this->moveToFront();
//screen->enableMotionBlur(10, 5);
screen->position.interpolateTo(Vector(400-position.x, 300-position.y), 1.0, 0, 0, 1);
dsq->tfader->alpha.interpolateTo(1, 1);
dsq->toggleCursor(false);
core->main(1);
//core->main(2);
}
bool didIt = dsq->onPickedSaveSlot(this);
@ -247,9 +238,8 @@ void AquariaSaveSlot::onUpdate(float dt)
{
done = true;
//alpha = 0.9;
//setBlendType(BLEND_DEFAULT);
//glowText->alpha.interpolateTo(0, 0.2);
return;
}
else
@ -263,7 +253,7 @@ void AquariaSaveSlot::onUpdate(float dt)
else
{
glowText->alpha.interpolateTo(0, 0.2);
//screen->scale.interpolateTo(Vector(1, 1), 0.2);
screen->color.interpolateTo(Vector(0.7, 0.7, 1), 0.3);
}
if ((core->mouse.buttons.left || core->mouse.buttons.right) && !mbDown)
@ -282,36 +272,8 @@ void AquariaSaveSlot::onUpdate(float dt)
}
}
std::string AquariaSaveSlot::getSaveDescription(const XMLDocument &doc)
static std::string getPrettySceneName_internal(const XMLElement *startData)
{
const XMLElement *startData = doc.FirstChildElement("StartData");
if (!startData)
return "";
int hours, minutes, seconds;
hours = minutes = seconds = 0;
int exp = 0, money = 0, time = 0;
if (startData->Attribute("exp"))
exp = atoi(startData->Attribute("exp"));
if (startData->Attribute("money"))
money = atoi(startData->Attribute("money"));
if (startData->Attribute("seconds"))
{
std::istringstream is(startData->Attribute("seconds"));
is >> time;
}
float s = dsq->continuity.seconds;
dsq->continuity.seconds = time;
dsq->continuity.getHoursMinutesSeconds(&hours, &minutes, &seconds);
/*
std::ostringstream os;
os << "Slot: " << slot << " - " << startData->Attribute("scene") << " - exp: " << exp << " - wealth: " << money;
os << " Time: " << hours << ": " << minutes << ": " << seconds << " T: " << time;
*/
std::string location = startData->Attribute("scene");
stringToLower(location);
if (location.find("boilerroom")!=std::string::npos)
@ -415,6 +377,31 @@ std::string AquariaSaveSlot::getSaveDescription(const XMLDocument &doc)
{
location = dsq->continuity.stringBank.get(1029);
}
return location;
}
std::string AquariaSaveSlot::getSaveDescription(const XMLDocument &doc)
{
const XMLElement *startData = doc.FirstChildElement("StartData");
if (!startData)
return "";
int hours, minutes, seconds;
hours = minutes = seconds = 0;
int time = 0;
if (startData->Attribute("seconds"))
{
std::istringstream is(startData->Attribute("seconds"));
is >> time;
}
float s = dsq->continuity.seconds;
dsq->continuity.seconds = time;
dsq->continuity.getHoursMinutesSeconds(&hours, &minutes, &seconds);
const char *loccstr = startData->Attribute("sceneDisplayName");
std::string location = (loccstr && *loccstr) ? loccstr : getPrettySceneName_internal(startData);
std::string showLoc;
if (dsq->isDeveloperKeys())
@ -424,8 +411,8 @@ std::string AquariaSaveSlot::getSaveDescription(const XMLDocument &doc)
std::ostringstream os;
os << location << std::endl;
os << hours << ":" << numToZeroString(minutes, 2) << showLoc;
// << ": " << seconds;
//" T: " << time;
dsq->continuity.seconds = s;

View file

@ -25,11 +25,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define AUTOMAP_GRIDTILE 512
//#define FOR(ir,mx) for (int ir=0;ir<mx;ir++)
AutoMap::AutoMap() : RenderObject(), ActionMapper()
{
//texture = 0;
followCamera = 1;
scale = Vector(0.4, 0.4);
position = Vector(400,300);
@ -41,7 +41,7 @@ AutoMap::AutoMap() : RenderObject(), ActionMapper()
initedGrid = false;
//shadowTex = core->addTexture("particles/glow");
setTexture("particles/glow");
paintColor = Vector(1,1,1);
@ -52,17 +52,7 @@ AutoMap::AutoMap() : RenderObject(), ActionMapper()
shadowTex = 0;
}
/*
void AutoMap::create(const std::string &startMap)
{
bool done = false;
while (!done)
{
dsq->game->smallLoadXML("NAIJACAVE");
}
}
*/
void AutoMap::destroy()
{
@ -93,41 +83,8 @@ void AutoMap::toggle(bool on)
core->overrideEndLayer = LR_MAX;
vis = true;
/*
for (Children::iterator i = children.begin(); i != children.end(); i++)
{
(*i)->safeKill();
}
Vector c(dsq->game->cameraMax.x/2, dsq->game->cameraMax.y/2);
int drawsz = AUTOMAP_GRIDTILE/TILE_SIZE;
int hsz = drawsz*0.5f;
c *= AUTOMAP_GRIDTILE;
c /= TILE_SIZE;
c += Vector(hsz, hsz);
FOR(x,MAX_AUTOMAP_GRID)
{
FOR(y,MAX_AUTOMAP_GRID)
{
if (grid[x][y])
{
Quad *q = new Quad;
q->setTexture("particles/WhiteGlow");
float rx = float(x * AUTOMAP_GRIDTILE)/float(TILE_SIZE) + hsz - c.x;
float ry = float(y * AUTOMAP_GRIDTILE)/float(TILE_SIZE) + hsz - c.y;
q->position = Vector(rx, ry);
q->color = Vector(0,0,0);
addChild(q);
}
}
}
*/
//alpha.interpolateTo(1, 0.5);
alpha = 1;
dsq->fade(0, t);
@ -169,11 +126,8 @@ void AutoMap::setGridFromWorld(Vector worldPos, int gridValue)
void AutoMap::initGrid()
{
/*
int xsz = dsq->game->cameraMax.x/200;
int ysz = dsq->game->cameraMax.y/200;
*/
//std::vector<std::vector> grid
for (int x=0;x<MAX_AUTOMAP_GRID;x++)
{
for (int y=0;y<MAX_AUTOMAP_GRID;y++)
@ -216,32 +170,8 @@ void AutoMap::onUpdate(float dt)
{
const float maxScale=1.25, minScale=0.5;
blip.update(dt);
/*
static Vector lastHeldPos;
if (core->mouse.buttons.left)
{
if (!lastHeldPos.isZero() && !(core->mouse.position - lastHeldPos).isLength2DIn(32))
{
Vector diff = core->mouse.position - lastHeldPos;
int len = diff.getLength2D();
for (int i = 0; i < len; i+=8)
{
paint(lastHeldPos + diff * i);
}
}
else
{
paint(core->mouse.position);
}
lastHeldPos = core->mouse.position;
}
else
{
lastHeldPos = Vector(0,0);
}
*/
//bool c=false;
Vector sTarget=scale;
float spd = 0.5;
@ -261,7 +191,7 @@ void AutoMap::onUpdate(float dt)
{
offset += core->mouse.change*scale;
}
//scale.interpolateTo(sTarget, 0.1);
}
}
@ -275,22 +205,19 @@ void AutoMap::lmb()
void AutoMap::onRender()
{
// if (!doRender) return;
if (alpha.x == 0) return;
#ifdef BBGE_BUILD_OPENGL
glBindTexture(GL_TEXTURE_2D, 0);
RenderObject::lastTextureApplied = 0;
float alphaValue = alpha.x;
//int sz2 = 80;//80;
int ysz = dsq->game->cameraMax.y/TILE_SIZE;
int xsz = dsq->game->cameraMax.x/TILE_SIZE;
//TileVector t(dsq->game->avatar->position);
TileVector t(Vector(dsq->game->cameraMax.x/2, dsq->game->cameraMax.y/2));
@ -300,14 +227,9 @@ void AutoMap::onRender()
if (alphaValue > 0)
{
/*
if (core->getWindowHeight() == 600)
{
skip = 2;
}
*/
//for (int y = t.y-sz2; y < t.y+sz2; y+=skip)
for (int y = 0; y < ysz; y += skip)
{
float f = float(y)/float(ysz);
@ -317,7 +239,7 @@ void AutoMap::onRender()
glBegin(GL_LINES);
int rowStart = -1;
int x = 0;
//for (x = t.x-sz2; x < t.x+sz2; x++)
for (x = 0; x < xsz; x++)
{
if (dsq->game->getGrid(TileVector(x,y))!=OT_BLACK)
@ -345,45 +267,8 @@ void AutoMap::onRender()
glEnd();
}
/*
glColor4f(0,0,0,alphaValue);
glPointSize(8);
//shadowTex->apply();
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
int rx=0,ry=0;
int sz = (AUTOMAP_GRIDTILE/TILE_SIZE)*0.5f;
for (int x = 0; x < MAX_AUTOMAP_GRID; x++)
{
for (int y = 0; y < MAX_AUTOMAP_GRID; y++)
{
if (grid[x][y])
{
rx = float(x * AUTOMAP_GRIDTILE)/float(TILE_SIZE) + TILE_SIZE/2 - t.x;
ry = float(y * AUTOMAP_GRIDTILE)/float(TILE_SIZE) + TILE_SIZE/2 - t.y;
//glVertex2f(rx, ry);
glTexCoord2f(0, 1.0);
glVertex3f(rx-sz, ry+sz, 0.0f);
glTexCoord2f(0, 1.0);
glVertex3f(rx+sz, ry+sz, 0.0f);
glTexCoord2f(1, 0);
glVertex3f(rx+sz, ry-sz, 0.0f);
glTexCoord2f(1, 0);
glVertex3f(rx-sz, ry-sz, 0.0f);
}
}
}
glEnd();
*/
/*
shadowTex->unbind();
glDisable(GL_TEXTURE_2D);
*/
//glDisable(GL_TEXTURE_2D);
}
TileVector nt(dsq->game->avatar->position);
@ -399,7 +284,6 @@ void AutoMap::onRender()
glColor4f(0.5,0.75,1, alphaValue*0.5f);
drawCircle(blip.x*16, 8);
#endif
}

View file

@ -26,23 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "Shot.h"
#include "GridRender.h"
//#include "CommonEvents.h"
//#include <float.h>
//#define AQ_TEST_QUADTRAIL
#ifdef AQ_TEST_QUADTRAIL
#include "QuadTrail.h"
QuadTrail *quadTrail = 0;
#endif
Path *lastWaterBubble = 0;
bool lastJumpOutFromWaterBubble = false;
bool useSpiritDistance = true;
bool inSpiritWorld = false;
const float MULT_DMG_CRABCOSTUME = 0.75;
const float MULT_DMG_FISHFORM = 1.5;
@ -71,7 +54,7 @@ int SongIcon::notesOpen = 0;
Avatar *avatar = 0;
const Vector BLIND_COLOR = Vector(0.1, 0.1, 0.1);
const float ANIM_TRANSITION = 0.2;
const float MANA_RECHARGE_RATE = 1.0;
//const float MANA_RECHARGE_RATE = 1.0;
const int AURA_SHIELD_RADIUS = 64;
//const int TARGET_RANGE = 1024;
const int TARGET_RANGE = 1024; // 650
@ -86,7 +69,7 @@ const int BURST_DISTANCE = 200;
const int STOP_DISTANCE = 48;
const int maxMouse = BURST_DISTANCE;
//const int SHOCK_RANGE = 700;
const int SHOCK_RANGE = 1000;
//const int SHOCK_RANGE = 1000;
const int SPIRIT_RANGE = 2000;
const float QUICK_SONG_CAST_DELAY = 0.4;
@ -98,9 +81,9 @@ const float BURST_ACCEL = 4000; //2000 // 1000
// Minimum time between two splash effects (seconds).
const float SPLASH_INTERVAL = 0.2;
const float TUMMY_TIME = 6.0;
//const float TUMMY_TIME = 6.0;
const float chargeMax = 2.0;
//const float chargeMax = 2.0;
// Axis input distance (0.0-1.0) at which we start moving.
const float JOYSTICK_LOW_THRESHOLD = 0.2;
@ -127,16 +110,6 @@ const float COLLIDE_MOD_FISH = 0.1f;
const int requiredDualFormCharge = 3;
bool usingDigital = false;
Bone *bone_head = 0;
Bone *bone_dualFormGlow = 0;
bool _isUnderWater;
//HRECORD avatarRecord = 0;
Vector Target::getWorldPosition()
{
@ -207,11 +180,6 @@ void Avatar::bindInput()
}
int Avatar::getNotesOpen()
{
return SongIcon::notesOpen;
}
// note: z is set to 1.0 when we want the aim to be used as the shot direction
// otherwise the shot will head straight to the target
Vector Avatar::getAim()
@ -254,36 +222,11 @@ Vector Avatar::getForwardAim()
return aim;
}
void Avatar::postInit()
{
// post init isn't early enough
/*
Entity::postInit();
*/
}
void Avatar::onAnimationKeyPassed(int key)
{
Entity::onAnimationKeyPassed(key);
}
void Avatar::doBounce()
{
float ba = 0.75;
if (isRolling())
ba = 1.0;
float len = vel.getLength2D();
Vector I = vel/len;
Vector N = dsq->game->getWallNormal(position);
if (!N.isZero())
{
//2*(-I dot N)*N + I
vel = 2*(-I.dot(N))*N + I;
vel.setLength2D(len*ba);
}
}
Vector randCirclePos(Vector position, int radius)
{
float a = ((rand()%360)*(2*PI))/360.0f;
@ -919,6 +862,16 @@ std::string Avatar::getIdleAnimName()
case FORM_ENERGY:
ret="energyidle";
break;
case FORM_NORMAL:
case FORM_BEAST:
case FORM_NATURE:
case FORM_SPIRIT:
case FORM_DUAL:
case FORM_FISH:
case FORM_SUN:
case FORM_MAX:
case FORM_NONE:
break;
}
return ret;
}
@ -1006,11 +959,12 @@ void Avatar::updateHair(float dt)
void Avatar::updateDamageVisualEffects()
{
int damageThreshold = float(maxHealth/5.0f)*3.0f;
Quad *damageSprite = dsq->game->damageSprite;
if (health <= damageThreshold)
{
//dsq->game->damageSprite->alpha.interpolateTo(0.9, 0.5);
float a = ((damageThreshold - health)/float(damageThreshold))*1.0f;
dsq->game->damageSprite->alpha.interpolateTo(a, 0.3);
damageSprite->alpha.interpolateTo(a, 0.3);
/*
std::ostringstream os;
@ -1018,8 +972,11 @@ void Avatar::updateDamageVisualEffects()
debugLog(os.str());
*/
dsq->game->damageSprite->scale = Vector(1,1);
dsq->game->damageSprite->scale.interpolateTo(Vector(1.2, 1.2), 0.5, -1, 1);
if(!damageSprite->scale.isInterpolating())
{
damageSprite->scale = Vector(1,1);
damageSprite->scale.interpolateTo(Vector(1.2, 1.2), 0.5, -1, 1);
}
/*
if (health <= 0)
@ -1030,7 +987,7 @@ void Avatar::updateDamageVisualEffects()
}
else
{
dsq->game->damageSprite->alpha.interpolateTo(0, 0.3);
damageSprite->alpha.interpolateTo(0, 0.3);
}
}
@ -1235,54 +1192,9 @@ void Avatar::playHitSound()
core->sound->playSfx(os.str());
}
const int beatHealth = 3;
void Avatar::updateHeartbeatSfx(float t)
{
/*
if (heartbeat)
{
BASS_CHANNELINFO info;
BASS_ChannelGetInfo(heartbeat, &info);
int num = (beatHealth - health);
float wantFreq = 1000 + num*300;
float useFreq = ((wantFreq*info.freq)/1000.0f);
float vol = 75 + (num*25)*0.5f;
vol *= (core->sound->getUseSfxVol()/100.0f);
//int vol = 100;
BASS_ChannelSlideAttributes(heartbeat, useFreq, vol, -101, 1000.0f*t);
}
*/
}
void Avatar::onHealthChange(float change)
{
updateDamageVisualEffects();
if (health <= beatHealth && health > 0)
{
/*
if (!heartbeat)
{
//debugLog("starting heartbeat");
heartbeat = core->sound->playSfx("Heartbeat", 255, 0, 1000, 1);
//core->sound->playSfx("Heartbeat");
}
*/
updateHeartbeatSfx(0.5);
}
if (health > beatHealth)
{
/*
if (heartbeat)
{
//debugLog("stopping heartbeat");
BASS_CHANNELINFO info;
BASS_ChannelGetInfo(heartbeat, &info);
BASS_ChannelSlideAttributes(heartbeat, info.freq, -2, -101, 1000*2);
heartbeat = 0;
}
*/
}
}
void Avatar::revive()
@ -1330,6 +1242,10 @@ void Avatar::entityDied(Entity *e)
dsq->continuity.eatBeast(e->eatData);
}
break;
case EAT_DEFAULT:
case EAT_MAX:
case EAT_NONE:
break;
}
}
@ -1457,7 +1373,6 @@ void Avatar::closeSingingInterface()
if (singing)
{
core->setMouseConstraint(false);
usingDigital = false;
quickSongCastDelay = 1;
// HACK: this prevents being "locked" away from the seahorse... so naija can
@ -1681,6 +1596,9 @@ void Avatar::changeForm(FormType form, bool effects, bool onInit, FormType lastF
case FORM_DUAL:
core->sound->playSfx("DualForm");
break;
case FORM_NONE:
case FORM_MAX:
break;
}
/*
@ -1790,8 +1708,6 @@ void Avatar::changeForm(FormType form, bool effects, bool onInit, FormType lastF
{
skeletalSprite.alphaMod = 0;
canChangeForm = false;
useSpiritDistance = false;
inSpiritWorld = true;
}
/*
if (hair)
@ -1825,15 +1741,9 @@ void Avatar::changeForm(FormType form, bool effects, bool onInit, FormType lastF
//}
}
int Avatar::getLastNote()
{
return lastNote;
}
void Avatar::singNote(int note)
{
currentSong.notes.push_back(note);
lastNote = note;
}
void Avatar::updateSingingInterface(float dt)
@ -2138,20 +2048,6 @@ void Avatar::updateTargets(float dt, bool override)
}
}
void Avatar::loseTargets()
{
for (int i = 0; i < targets.size(); i++)
{
Entity *e = targets[i].e;
if (e)
{
lostTarget(i, targets[i].e);
targets[i].e = 0;
targetUpdateDelay = maxTargetDelay;
}
}
}
void Avatar::updateTargetQuads(float dt)
{
@ -2259,6 +2155,7 @@ bool Avatar::fireAtNearestValidEntity(const std::string &shot)
Vector dir;
Vector p = position;
if(boneLeftArm)
p = boneLeftArm->getWorldPosition();
//&& !dsq->game->isObstructed(TileVector(position))
/*
@ -2424,18 +2321,6 @@ bool Avatar::fireAtNearestValidEntity(const std::string &shot)
return firedShot;
}
Vector Avatar::getFacing()
{
if (vel.isLength2DIn(2) && rotation.z == 0)
{
if (isfh())
return Vector(1,0);
else
return Vector(-1,0);
}
return getForward();
}
void Avatar::switchDualFormMode()
{
//debugLog("dualForm: changing");
@ -2940,7 +2825,6 @@ void Avatar::formAbility(int ability)
Path *p = dsq->game->getNearestPath(position, PATH_SPIRITPORTAL);
if (p && p->isCoordinateInside(position))
{
if (inSpiritWorld)
changeForm(FORM_NORMAL);
dsq->game->warpToSceneFromNode(p);
}
@ -2952,6 +2836,10 @@ void Avatar::formAbility(int ability)
}
break;
case FORM_NORMAL:
case FORM_NONE:
case FORM_MAX:
break;
}
}
@ -3075,7 +2963,6 @@ void Avatar::doShock(const std::string &shotName)
if (sz == 0)
{
for (int i = 0; i < thits; i++)
@ -3113,7 +3000,7 @@ void Avatar::doShock(const std::string &shotName)
}
}
*/
Vector d = e->position - position;
// Vector d = e->position - position;
/*
float a = float(float(i)/float(sz))*PI*2;
Vector aim(sinf(a), cosf(a));
@ -3169,8 +3056,14 @@ void Avatar::formAbilityUpdate(float dt)
}
break;
case FORM_ENERGY:
{
}
case FORM_NORMAL:
case FORM_BEAST:
case FORM_NATURE:
case FORM_SPIRIT:
case FORM_DUAL:
case FORM_SUN:
case FORM_MAX:
case FORM_NONE:
break;
}
}
@ -3263,6 +3156,12 @@ bool Avatar::canCharge(int ability)
case FORM_SUN:
return true;
break;
case FORM_NORMAL:
case FORM_SPIRIT:
case FORM_FISH:
case FORM_MAX:
case FORM_NONE:
break;
}
return false;
}
@ -3442,15 +3341,6 @@ Vector Avatar::getWallNormal(TileVector t)
return dsq->game->getWallNormal(t.worldVector(), 5)*-1;
}
int Avatar::getSingingInterfaceRadius()
{
return singingInterfaceRadius;
}
int Avatar::getOpenSingingInterfaceRadius()
{
return openSingingInterfaceRadius;
}
bool Avatar::isSwimming()
{
@ -3786,17 +3676,21 @@ Avatar::Avatar() : Entity(), ActionMapper()
urchinDelay = 0;
jellyDelay = 0;
#ifdef AQ_TEST_QUADTRAIL
quadTrail = new QuadTrail(100, 32);
quadTrail->setTexture("Particles/QuadTrail");
quadTrail->setBlendType(BLEND_ADD);
dsq->game->addRenderObject(quadTrail, LR_PARTICLES);
#endif
curWebPoint = 0;
web = 0;
bone_dualFormGlow = 0;
bone_head = 0;
boneLeftHand = 0;
boneRightHand = 0;
boneLeftArm = 0;
boneFish2 = 0;
lastWaterBubble = 0;
lastJumpOutFromWaterBubble = false;
lastBurstType = BURST_NONE;
dsq->loops.shield = BBGE_AUDIO_NOCHANNEL;
leftHandEmitter = rightHandEmitter = 0;
@ -3806,7 +3700,6 @@ Avatar::Avatar() : Entity(), ActionMapper()
dsq->loops.charge = BBGE_AUDIO_NOCHANNEL;
//heartbeat = 0;
lastNote = -1;
headTextureTimer = 0;
bone_dualFormGlow = 0;
//dsq->continuity.dualFormCharge = 0;
@ -3823,6 +3716,7 @@ Avatar::Avatar() : Entity(), ActionMapper()
songInterfaceTimer = 0;
quickSongCastDelay = 0;
flourish = false;
_isUnderWater = false;
blockSinging = false;
singing = false;
@ -4152,15 +4046,16 @@ void Avatar::refreshModel(std::string file, const std::string &skin, bool forceI
if (file == "naija")
{
bone_head = skeletalSprite.getBoneByIdx(1);
boneRightFoot = skeletalSprite.getBoneByName("RightFoot");
boneLeftFoot = skeletalSprite.getBoneByName("LeftFoot");
boneRightArm = skeletalSprite.getBoneByName("RightArm");
boneLeftArm = skeletalSprite.getBoneByName("LeftArm");
boneFish2 = skeletalSprite.getBoneByName("Fish2");
if(boneFish2)
boneFish2->alpha = 0;
bone_dualFormGlow = skeletalSprite.getBoneByName("DualFormGlow");
if (bone_dualFormGlow)
{
bone_dualFormGlow->scale = 0;
bone_dualFormGlow->setBlendType(BLEND_ADD);
}
boneLeftHand = skeletalSprite.getBoneByName("LeftArm");
boneRightHand = skeletalSprite.getBoneByName("RightArm");
@ -4169,7 +4064,7 @@ void Avatar::refreshModel(std::string file, const std::string &skin, bool forceI
{
bone_dualFormGlow = 0;
bone_head = 0;
boneRightFoot = boneLeftFoot = boneRightArm = boneLeftArm = boneFish2 = skeletalSprite.getBoneByIdx(0);
boneLeftArm = boneFish2 = 0;
boneLeftHand = boneRightHand = 0;
}
@ -4180,7 +4075,6 @@ void Avatar::refreshModel(std::string file, const std::string &skin, bool forceI
Avatar::~Avatar()
{
songIcons.clear();
}
void Avatar::destroy()
@ -4663,50 +4557,6 @@ void Avatar::onRender()
Entity::onRender();
}
int Avatar::getBeamWidth()
{
const int MAX_BEAM_LEN = 50;
Vector mov = dsq->getGameCursorPosition() - this->position;
mov.setLength2D(1);
TileVector t(position);
Vector tile(t.x, t.y);
int c = 0;
while (c < MAX_BEAM_LEN)
{
bool hit = false;
tile += mov;
TileVector t;
t.x = int(tile.x);
t.y = int(tile.y);
if (dsq->game->isObstructed(t))
{
hit = true;
}
FOR_ENTITIES(i)
{
Entity *e = *i;
if (e != this)
{
TileVector et(e->position);
Vector t1(et.x, et.y);
Vector t2(tile.x, tile.y);
Vector diff = t1-t2;
if (diff.getSquaredLength2D() <= 1)
{
// HACK: replace damage function
//e->damage(1, 0, this);
hit = true;
}
}
}
if (hit)
break;
c++;
}
return c * TILE_SIZE;
}
void Avatar::onEnterState(int action)
{
Entity::onEnterState(action);
@ -4904,6 +4754,10 @@ void Avatar::updateAura(float dt)
}
}
break;
case AURA_THING:
case AURA_HEAL:
case AURA_NONE:
break;
}
auraTimer -= dt;
@ -5048,6 +4902,14 @@ void Avatar::updateFormVisualEffects(float dt)
skeletalSprite.update(dt);
skeletalSprite.position = bodyPosition;
break;
case FORM_NORMAL:
case FORM_BEAST:
case FORM_NATURE:
case FORM_DUAL:
case FORM_FISH:
case FORM_MAX:
case FORM_NONE:
break;
}
}
@ -5586,9 +5448,6 @@ void Avatar::onUpdate(float dt)
looking = 0;
#ifdef AQ_TEST_QUADTRAIL
quadTrail->addPoint(position);
#endif
if (lightFormGlow)
{
@ -5940,16 +5799,6 @@ void Avatar::onUpdate(float dt)
tripCount ++;
if (tripCount > 10)
{
/*
// hacktastic
EMOTE_NAIJAEVILLAUGH = 0
EMOTE_NAIJAGIGGLE = 1
EMOTE_NAIJALAUGH = 2
EMOTE_NAIJASADSIGH = 3
EMOTE_NAIJASIGH = 4
EMOTE_NAIJAWOW = 5
EMOTE_NAIJAUGH = 6
*/
float p = dsq->continuity.tripTimer.getPerc();
if (p > 0.6f)
{
@ -5968,9 +5817,9 @@ void Avatar::onUpdate(float dt)
if (chance(80))
{
if (chance(60))
dsq->emote.playSfx(2);
dsq->emote.playSfx(EMOTE_NAIJALAUGH);
else
dsq->emote.playSfx(0);
dsq->emote.playSfx(EMOTE_NAIJAEVILLAUGH);
}
}
else
@ -5981,7 +5830,7 @@ void Avatar::onUpdate(float dt)
dsq->shakeCamera(5, 4);
tripper->color.interpolateTo(Vector(1, 0.2, 0.2), 3);
if (chance(75))
dsq->emote.playSfx(6);
dsq->emote.playSfx(EMOTE_NAIJAUGH);
}
tripCount = 0;
@ -6038,8 +5887,6 @@ void Avatar::onUpdate(float dt)
if (dsq->continuity.form == FORM_SPIRIT)
{
if (useSpiritDistance)
{
if (formTimer > 1)
{
@ -6048,7 +5895,6 @@ void Avatar::onUpdate(float dt)
changeForm(FORM_NORMAL);
}
}
}
// here
if (!_isUnderWater)
{
@ -6174,7 +6020,7 @@ void Avatar::onUpdate(float dt)
{
if (state.spellCharge > 1.5f && chargeLevelAttained <1)
{
chargeLevelAttained = 1.5;
chargeLevelAttained = 1;
core->sound->playSfx("PowerUp");
chargingEmitter->load("ChargingEnergy2");
}
@ -6226,6 +6072,13 @@ void Avatar::onUpdate(float dt)
}
}
break;
case FORM_NORMAL:
case FORM_BEAST:
case FORM_SPIRIT:
case FORM_FISH:
case FORM_MAX:
case FORM_NONE:
break;
}
}
/*

View file

@ -118,7 +118,7 @@ public:
bool blind;
bool wasUnderWater;
float shotDelay;
//Timer shockTimer;
Timer useItemDelay;
Timer lockToWallDelay;
float spellCharge;
@ -138,7 +138,6 @@ class Avatar : public Entity, public ActionMapper
{
public:
Avatar();
void postInit();
virtual ~Avatar();
void destroy();
void action(int actionID, int state);
@ -147,7 +146,7 @@ public:
float burstDelay;
bool bursting;
BurstType lastBurstType;
//void damage(int amount);
bool isCharging();
void setBlind(float time);
@ -169,8 +168,6 @@ public:
void toggleMovement(bool on);
Vector getFacing();
void refreshModel(std::string file, const std::string &skin, bool forceIdle=false);
void refreshDualFormModel();
void switchDualFormMode();
@ -180,17 +177,11 @@ public:
void clearTargets();
bool singing;
void doBounce();
Vector getKeyDir();
void startBurstCommon();
void updateJoystick(float dt);
int getNotesOpen();
int getLastNote();
int lastNote;
void openSingingInterface();
void closeSingingInterface();
void updateSingingInterface(float dt);
@ -253,8 +244,6 @@ public:
void fallOffWall();
float fireDelay;
int getSingingInterfaceRadius();
int getOpenSingingInterfaceRadius();
AuraType activeAura;
float auraTimer;
bool fireAtNearestValidEntity(const std::string &shot);
@ -276,10 +265,9 @@ public:
float songInterfaceTimer;
void removeEatData(int idx);
//std::list<Entity*>bittenEntities;
typedef std::list<Entity*> BittenEntities;
BittenEntities bittenEntities;
void updateHeartbeatSfx(float t = 0);
Target getNearestTarget(const Vector &checkPos, const Vector &distPos, Entity *source, DamageType dt, bool override=false, std::vector<Target> *ignore=0, EntityList *entityList=0);
void toggleCape(bool on);
@ -303,7 +291,7 @@ public:
Vector getHeadPosition();
Bone *boneRightFoot, *boneLeftFoot, *boneRightArm, *boneLeftArm, *boneFish2, *bone_head;
Bone *boneLeftArm, *boneFish2, *bone_head, *bone_dualFormGlow;
Bone *boneLeftHand, *boneRightHand;
void startFlourish();
@ -317,8 +305,6 @@ public:
Web *web;
float rollDelay;
void loseTargets();
bool canSetBoneLock();
void revert();
@ -374,6 +360,9 @@ protected:
Vector bodyOffset;
bool flourish;
bool blockSinging;
bool _isUnderWater;
Path *lastWaterBubble;
bool lastJumpOutFromWaterBubble;
int spiritEnergyAbsorbed;
float formAbilityDelay;
Vector bodyPosition;
@ -438,15 +427,13 @@ protected:
void removeBlindEffects();
float zoomVel;
// implement "bobbing" in a lower class
int getBeamWidth();
Vector getWallNormal(TileVector t);
bool checkWarpAreas();
float splashDelay;
//Hair *hair;
//Item *currentItem;
void onUpdate(float dt);
void onRender();

View file

@ -31,7 +31,7 @@ Beam::Beam(Vector pos, float angle) : Quad()
addType(SCO_BEAM);
cull = false;
trace();
//rotation.z = angle;
this->angle = angle;
position = pos;
@ -91,17 +91,13 @@ void Beam::killAllBeams()
void Beam::trace()
{
float angle = MathFunctions::toRadians(this->angle);
//(float(-this->angle)/180.0f)*PI;
//float angle = rotation.z;
Vector mov(sinf(angle), cosf(angle));
TileVector t(position);
Vector startTile(t.x, t.y);
/*
std::ostringstream os;
os << "rotation.z = " << rotation.z << " mov(" << mov.x << ", " << mov.y << ")";
debugLog(os.str());
*/
int moves = 0;
while (!dsq->game->isObstructed(TileVector(startTile.x, startTile.y)))
@ -114,38 +110,24 @@ void Beam::trace()
t = TileVector(startTile.x, startTile.y);
endPos = t.worldVector();
/*
offset = endPos - position;
offset /= 2;
offset *= -1;
*/
//width = (endPos - position).getLength2D();
}
void Beam::render()
{
/*
glLineWidth(4);
glColor4f(1,1,1,1);
glBegin(GL_LINES);
glVertex2f(position.x, position.y);
glVertex2f(endPos.x, endPos.y);
glEnd();
*/
Quad::render();
}
void Beam::onRender()
{
#ifdef BBGE_BUILD_OPENGL
//glDisable(GL_CULL_FACE);
Vector diff = endPos - position;
Vector side = diff;
//side.normalize2D();
side.setLength2D(beamWidth*2);
Vector sideLeft = side.getPerpendicularLeft();
Vector sideRight = side.getPerpendicularRight();
@ -160,7 +142,6 @@ void Beam::onRender()
glTexCoord2f(0, 1);
glVertex2f(sideRight.x, sideRight.y);
glEnd();
#endif
}
void Beam::onUpdate(float dt)

View file

@ -32,15 +32,7 @@ bool BitBlotLogo::watchQuit(float time)
{
core->main(time);
return false;
/*
dsq->watch(time);
if (quitFlag > 0)
{
skipLogo();
return true;
}
return false;
*/
}
void BitBlotLogo::doShortBitBlot()
@ -78,7 +70,7 @@ void BitBlotLogo::skipLogo()
void BitBlotLogo::getOut()
{
//dsq->continuity.reset();
#ifdef AQUARIA_DEMO
dsq->title();
@ -97,7 +89,7 @@ void BitBlotLogo::applyState()
logo = 0;
dsq->toggleCursor(0);
dsq->toggleBlackBars(1);
//dsq->setBlackBarsColor(Vector(1,1,1));
dsq->jiggleCursor();
dsq->forceInputGrabOff();
@ -143,7 +135,7 @@ void BitBlotLogo::applyState()
bird->update((rand()%100)*0.1f);
}
//if (true)
if (rand()%100 < 40)
{
SkeletalSprite *dragon = new SkeletalSprite();
@ -254,12 +246,12 @@ void BitBlotLogo::applyState()
dsq->overlay->alpha.interpolateTo(0, 1);
//sound->playSfx("BBSplash");
sound->playMusic("bblogo", SLT_NONE);
if (watchQuit(1.0)) return;
//sound->playSfx("normalform");
dsq->overlay2->color = Vector(1,1,1);
@ -272,23 +264,20 @@ void BitBlotLogo::applyState()
sound->playSfx("normalform");
//landscape->alpha.interpolateTo(1, 2);
white->alpha.interpolateTo(0, 2);
landscape->position.interpolateTo(Vector(400,400), 5);
/*
if (core->afterEffectManager)
core->afterEffectManager->addEffect(new ShockEffect(Vector(core->width/2, core->height/2),core->screenCenter, 0.1,0.03,30,0.2f, 0.5));
*/
landscape->scale.interpolateTo(Vector(1.1, 1.1), 5);
scanline->alpha.interpolateTo(0, 1);
//scanline->scale.interpolateTo(Vector(5, 5), 1);
logo->scale.interpolateTo(Vector(2, 2), 1);
//logo->offset.interpolateTo(Vector(0, -300), 1);
logo->alpha.interpolateTo(0, 1);
lines->alpha.interpolateTo(0, 4);
@ -304,32 +293,8 @@ void BitBlotLogo::applyState()
getOut();
/*
// BOING
dsq->toggleCursor(0);
Quad *logo = new Quad("BitBlot/Logo.png", Vector(400,300));
logo->followCamera = 1;
addRenderObject(logo);
//logo->scale = Vector(0.6, 0.6);
logo->scale = Vector(0, 0);
core->setClearColor(Vector(1,1,1));
dsq->overlay->alpha = 1;
dsq->overlay->alpha.interpolateTo(0, 1);
core->main(0.5);
logo->scale.path.addPathNode(Vector(0,0), 0);
logo->scale.path.addPathNode(Vector(0,0), 0.4);
logo->scale.path.addPathNode(Vector(1.2,1.2), 0.8);
logo->scale.path.addPathNode(Vector(1.0, 1.0), 0.85);
logo->scale.path.addPathNode(Vector(1.1, 1.1), 0.95);
logo->scale.path.addPathNode(Vector(1,1), 1.0);
logo->scale.startPath(1);
core->main(2);
dsq->overlay->alpha.interpolateTo(1, 1.5);
core->main(1.5);
*/
}
void BitBlotLogo::removeState()
@ -342,14 +307,6 @@ void BitBlotLogo::update(float dt)
{
StateObject::update(dt);
/*
if (quitFlag == 0)
{
if (core->getKeyState(KEY_ESCAPE))
{
quitFlag = 1;
}
}
*/
}

View file

@ -1,59 +0,0 @@
/*
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 "Element.h"
#include "../BBGE/Core.h"
BoxElement::BoxElement(int width, int height) : Element(BOX)
{
blendEnabled = false;
this->width = width;
this->height = height;
height+=2;
ww = width/2 + 2;
hh = height/2 + 10;
this->color = 0;
cull = true;
//cull = false;
}
/*
bool BoxElement::isOnScreen()
{
// HACK: biased towards being fast for rows
//if (alpha.x < 1.0f) return false;
//if (!cull) return true;
if (this->position.y + hh >= core->screenCullY1
&& this->position.y - hh <= core->screenCullY2)
{
if (this->position.x + ww >= core->screenCullX1
&& this->position.x - ww <= core->screenCullX2)
{
return true;
}
}
return false;
}
*/

View file

@ -1,56 +0,0 @@
/*
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 "GridRender.h"
BubbleRender::BubbleRender() : RenderObject()
{
bubble.setTexture("particles/bubble");
bubble.alpha = 0.5;
bubble.scale = Vector(0.5,0.5);
cull = false;
}
void BubbleRender::rebuild()
{
bubbles.clear();
for (int x = dsq->game->cameraMin.x; x < dsq->game->cameraMax.x; x+=64)
{
for (int y = dsq->game->cameraMin.y; y < dsq->game->cameraMax.y; y+=64)
{
bubbles.push_back(Vector(x,y) + Vector(rand()%16-32, rand()%16-32));
}
}
}
void BubbleRender::onRender()
{
for (int i = 0; i < bubbles.size(); i++)
{
if (bubbles[i].x > core->screenCullX1 && bubbles[i].x < core->screenCullX2)
{
if (bubbles[i].y > core->screenCullY1 && bubbles[i].y < core->screenCullY2)
{
bubble.position = bubbles[i];
bubble.render();
}
}
}
}

View file

@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "CollideEntity.h"
#include "DSQ.h"
#include "Game.h"
//#include "ParticleEffects.h"
CollideEntity::CollideEntity() : Entity()
{
@ -32,6 +32,10 @@ CollideEntity::CollideEntity() : Entity()
this->updateCull = 4000;
}
CollideEntity::~CollideEntity()
{
}
void CollideEntity::entityDied(Entity *e)
{
Entity::entityDied(e);
@ -47,7 +51,7 @@ void CollideEntity::bounce(float ba)
if (getState() == STATE_PUSH)
{
dsq->spawnParticleEffect("HitSurface", dsq->game->lastCollidePosition);
//dsq->effectCollisionSmoke(position);
sound("RockHit");
// HACK: replace damage function
//damage(pushDamage);
@ -66,7 +70,7 @@ void CollideEntity::bounce(float ba)
if (!N.isZero())
{
//2*(-I dot N)*N + I
vel = 2*(-I.dot(N))*N + I;
vel.setLength2D(len*ba);
}
@ -89,8 +93,10 @@ void CollideEntity::bounce(float ba)
}
}
break;
case BOUNCE_NONE:
break;
}
//mov.setLength2D(-len * ba);
onBounce();
@ -101,14 +107,8 @@ void CollideEntity::updateMovement(float dt)
if (isEntityDead()) return;
if (position.isFollowingPath()) return;
vel.capLength2D(getMaxSpeed()*maxSpeedLerp.x);
/*
if (vel.getSquaredLength2D() > sqr(getMaxSpeed()))
{
vel.setLength2D(getMaxSpeed());
vel.z = 0;
}
*/
//Vector lastPos = pos;
updateVel2(dt);
@ -131,21 +131,7 @@ void CollideEntity::updateMovement(float dt)
}
}
/*
if (!canLeaveWater)
{
if (waterBubble)
{
}
else
{
if (position.y-collideRadius < dsq->game->getWaterLevel())
{
}
}
}
*/
bool collided = false;
@ -171,7 +157,7 @@ void CollideEntity::updateMovement(float dt)
}
}
//Vector lastPosition = lastPos;
Vector newPosition = position + (getMoveVel() * dt);
position = newPosition;

View file

@ -27,6 +27,7 @@ class CollideEntity : public Entity
{
public:
CollideEntity();
virtual ~CollideEntity();
float bounceAmount;
float weight;
void updateMovement(float dt);

View file

@ -304,11 +304,7 @@ void Continuity::sortFood()
switch (dsq->continuity.foodSortType)
{
/*
case FOODSORT_UNSORTED:
sortOrder = sortByUnsort;
break;
*/
case FOODSORT_BYTYPE:
sortOrder = sortByType;
break;
@ -321,8 +317,7 @@ void Continuity::sortFood()
}
//IngredientData *plantLeaf = dsq->continuity.getIngredientHeldByName("PlantLeaf");
//int oldHeld = plantLeaf->held;
if (doSort)
{
@ -391,11 +386,11 @@ void Continuity::sortFood()
ingredients.push_back(sort[i]);
}
sort.clear();
//dsq->continuity.ingredients = sort;
}
//IngredientData *plantLeaf2 = dsq->continuity.getIngredientHeldByName("PlantLeaf");
//int newHeld = plantLeaf2->held;
}
void Continuity::setRegen(float t)
@ -564,7 +559,7 @@ std::string Continuity::getIEString(IngredientData *data, int i)
os << dsq->continuity.stringBank.get(210);
os << " " << dsq->continuity.stringBank.get(205) << " " << (fx.magnitude*5) << " " << dsq->continuity.stringBank.get(203);
return os.str();
//return dsq->continuity.stringBank.get(210);
break;
case IET_ENERGY:
os << dsq->continuity.stringBank.get(211) << " " << fx.magnitude;
@ -612,6 +607,10 @@ std::string Continuity::getIEString(IngredientData *data, int i)
return ret;
}
break;
case IET_NONE:
case IET_RANDOM:
case IET_MAX:
break;
}
return "";
@ -829,7 +828,7 @@ bool Continuity::applyIngredientEffects(IngredientData *data)
dsq->centerMessage(getIEString(data, i), y);
dsq->continuity.setWeb(webTime);
//dsq->centerMessage(dsq->continuity.stringBank.get(216), y);
}
break;
case IET_ALLSTATUS:
@ -1246,6 +1245,9 @@ std::string Continuity::getInternalFormName()
return "sun";
case FORM_DUAL:
return "dual";
case FORM_NONE:
case FORM_MAX:
break;
}
return "";
}
@ -1477,8 +1479,8 @@ void Continuity::castSong(int num)
os << "Could not find song with index [" << num << "]";
debugLog(os.str());
}
//float et = 0.5;
//float et = 10;
float et = 0.5;
std::ostringstream os;
os << "Song/SongSlot-" << dsq->continuity.getSongSlotByType(num);
@ -1487,7 +1489,7 @@ void Continuity::castSong(int num)
effect->setTexture(os.str());
effect->position = selected->position + selected->offset;
effect->scale.interpolateTo(Vector(3,3), et);
//effect->setBlendType(RenderObject::BLEND_ADD);
effect->alpha.ensureData();
effect->alpha.data->path.addPathNode(0, 0);
effect->alpha.data->path.addPathNode(0.5, 0.1);
@ -1536,12 +1538,7 @@ void Continuity::castSong(int num)
sound->playSfx("Heal");
selected->heal(2);
/*
Wynia *wynia = new Wynia;
wynia->trackTo(selected);
wynia->position = selected->position;
core->getTopStateData()->addRenderObject(wynia, PROJECTILES);
*/
selected->skeletalSprite.animate("healSelf", 0, 1);
break;
case SONG_TIME:
@ -1575,7 +1572,7 @@ void Continuity::castSong(int num)
{
if (!dsq->game->avatar->isNearObstruction(2) && !dsq->game->avatar->state.lockedToWall && !(dsq->game->li->position - dsq->game->avatar->position).isLength2DIn(400))
{
//dsq->game->avatar->disableInput();
dsq->overlay->color = Vector(1,1,1);
dsq->fade(1, 0.3);
dsq->main(0.3);
@ -1583,7 +1580,7 @@ void Continuity::castSong(int num)
dsq->fade(0, 0.3);
dsq->main(0.3);
dsq->overlay->color = 0;
//dsq->game->avatar->enableInput();
}
else if ((dsq->game->li->position - dsq->game->avatar->position).isLength2DIn(500))
{
@ -1597,13 +1594,7 @@ void Continuity::castSong(int num)
{
core->sound->playSfx("Denied");
}
/*
}
else
{
core->sound->playSfx("SongFail");
}
*/
}
else
{
@ -1651,6 +1642,10 @@ void Continuity::castSong(int num)
dsq->game->avatar->changeForm(FORM_FISH);
break;
case SONG_SONGDOOR1:
case SONG_SONGDOOR2:
case SONG_ANIMA:
case SONG_NONE:
case SONG_MAX:
break;
#endif
}
@ -1785,12 +1780,8 @@ loop:
// make sure last note is more or less close
if (song.notes.size()-last < 2)
{
//rank += song.size()-last;
/*
std::ostringstream os;
os << "songCheck: " << songChecks[i].songIdx << " completed with rank " << rank;
debugLog(os.str());
*/
songChecks[i].pass = true;
songChecks[i].rank = rank;
@ -1813,11 +1804,7 @@ loop:
}
}
/*
std::ostringstream os;
os << "lowest rank: " << lowestRank;
debugLog(os.str());
*/
return songIdx;
}
@ -1835,7 +1822,7 @@ int Continuity::checkSong(const Song &song)
Song *s = &songBank[i];
if (s->notes.empty()) continue;
int j = 0;
//if (s->size() == song.size())
{
bool foundSong = false;
int currentNote = 0;
@ -1867,7 +1854,7 @@ int Continuity::checkSong(const Song &song)
}
}
if (j != song.notes.size()-1) foundSong = false;
//if (j == s->size())
if (foundSong)
{
return i;
@ -1910,7 +1897,7 @@ void Continuity::update(float dt)
statsAndAchievements->RunFrame();
}
if (dsq->game->isActive() && !dsq->game->isPaused() /*&& !(getWorldType() == WT_SPIRIT)*/)
if (dsq->game->isActive() && !dsq->game->isPaused() )
{
if (liPowerTimer.updateCheck(dt))
@ -2011,18 +1998,14 @@ void Continuity::update(float dt)
if (regenTimer.isActive())
{
/*
static float regenBit = 0;
regenBit += dt;
if (regenBit > 1)
*/
{
Avatar *a = dsq->game->avatar;
if (a)
{
a->heal(dt*0.5f);
}
//regenBit = 0;
}
}
}
@ -2104,17 +2087,14 @@ void Continuity::applyWorldEffects(WorldType type, bool transition, bool affectM
{
core->postProcessingFx.blendType = 1;
core->postProcessingFx.intensity = 0.2f;
core->postProcessingFx.layer = LR_AFTER_EFFECTS;//LR_AFTER_EFFECTS;
core->postProcessingFx.layer = LR_AFTER_EFFECTS;
core->postProcessingFx.renderLayer = LR_AFTER_EFFECTS;
core->postProcessingFx.enable(FXT_RADIALBLUR);
}
dsq->game->avatar->canWarp = false;
/*
if (affectMusic)
dsq->sound->toggleEffects(1);
*/
dsq->game->backupSceneColor = dsq->game->sceneColor;
dsq->game->sceneColor.interpolateTo(Vector(0.4, 0.8, 0.9), time);
dsq->game->avatar->applyWorldEffects(type);
@ -2124,23 +2104,15 @@ void Continuity::applyWorldEffects(WorldType type, bool transition, bool affectM
dsq->game->avatar->canWarp = true;
core->postProcessingFx.disable(FXT_RADIALBLUR);
//worldType = WT_SPIRIT;
/*
if (affectMusic)
dsq->sound->toggleEffects(0);
*/
//dsq->game->sceneColor.interpolateTo(dsq->game->backupSceneColor, time);
dsq->game->sceneColor.interpolateTo(Vector(1,1,1), time);
dsq->game->avatar->applyWorldEffects(type);
}
if (time > 0)
{
/*
dsq->game->avatar->slowToRest();
dsq->game->avatar->disableInput();
core->main(time);
dsq->game->avatar->enableInput();
*/
}
worldType = type;
}
@ -2291,12 +2263,7 @@ void Continuity::setFlag(std::string flag, int v)
flags[flag] = v;
}
/*
void Continuity::setActivePet(int flag)
{
setFlag(FLAG_ACTIVEPET, flag);
}
*/
void Continuity::loadPetData()
{
@ -2474,7 +2441,6 @@ void Continuity::saveFile(int slot, Vector position, unsigned char *scrShotData,
}
worldMap->SetAttribute("b", os.str().c_str());
#ifdef AQUARIA_BUILD_MAPVIS
if (dsq->game->worldMapRender)
{
std::ostringstream os;
@ -2487,7 +2453,6 @@ void Continuity::saveFile(int slot, Vector position, unsigned char *scrShotData,
}
worldMap->SetAttribute("va", os.str().c_str());
}
#endif
}
doc.InsertEndChild(worldMap);
@ -2552,6 +2517,7 @@ void Continuity::saveFile(int slot, Vector position, unsigned char *scrShotData,
startData->SetAttribute("x", int(position.x));
startData->SetAttribute("y", int(position.y));
startData->SetAttribute("scene", dsq->game->sceneName.c_str());
startData->SetAttribute("sceneDisplayName", dsq->game->sceneDisplayName.c_str());
startData->SetAttribute("exp", dsq->continuity.exp);
startData->SetAttribute("h", dsq->continuity.maxHealth);
startData->SetAttribute("ch", dsq->continuity.health);
@ -2788,20 +2754,7 @@ void Continuity::loadFile(int slot)
e = e->NextSiblingElement("Flag");
}
/*
if (debugEntityflags)
{
for (EntityFlags::iterator i = entityFlags.begin(); i != entityFlags.end(); i++)
{
if ((*i).first == name)
{
std::ostringstream os;
os << "Duplicate entity flag: " << name << " please report this error";
errorLog(os.str());
}
}
}
*/
XMLElement *efx = doc.FirstChildElement("EFX");
if (efx)
@ -3017,7 +2970,6 @@ void Continuity::loadFile(int slot)
}
#ifdef AQUARIA_BUILD_MAPVIS
if (worldMap->Attribute("va") && dsq->continuity.worldMap.getNumWorldMapTiles())
{
std::istringstream is(worldMap->Attribute("va"));
@ -3026,7 +2978,7 @@ void Continuity::loadFile(int slot)
int idx;
//worldMapTiles.clear();
while (is >> idx)
{
@ -3043,7 +2995,6 @@ void Continuity::loadFile(int slot)
tile->stringToData(is);
}
}
#endif
}
@ -3321,13 +3272,7 @@ void Continuity::loadFile(int slot)
void Continuity::setNaijaModel(std::string model)
{
/*
naijaModel = model;
if (dsq->game->avatar)
{
dsq->game->avatar->refreshModel();
}
*/
}
int Continuity::getFlag(int flag)
@ -3403,7 +3348,7 @@ public:
timer = 0;
//GemGet *q = this;
setTexture("Gems/" + gem);
@ -3423,11 +3368,7 @@ public:
setLife(timeScale+0.1f);
setDecayRate(1);
/*
q->position.path.addPathNode(Vector(400,400), 0.6);
q->position.path.addPathNode(dsq->game->miniMapRender->position, 0.9);
q->position.startPath(t);
*/
}
protected:
float timer;
@ -3495,26 +3436,7 @@ GemData *Continuity::pickupGem(std::string name, bool effects)
GemGet *gg = new GemGet(g.name);
dsq->game->addRenderObject(gg, LR_MINIMAP);
/*
Quad *q = new Quad;
q->setTexture("Gems/" + g.name);
q->followCamera = 1;
q->scale = Vector(0, 0);
q->scale.path.addPathNode(Vector(0,0), 0);
q->scale.path.addPathNode(Vector(1,1), 0.3);
q->scale.path.addPathNode(Vector(1,1), 0.6);
q->scale.path.addPathNode(Vector(0.5,0.5), 0.9);
q->scale.path.addPathNode(Vector(0.1,0.1), 1);
q->scale.startPath(t);
q->position = Vector(400,400);
q->position.path.addPathNode(Vector(400,400), 0.6);
q->position.path.addPathNode(dsq->game->miniMapRender->position, 0.9);
q->position.startPath(t);
dsq->game->addRenderObject(q, LR_MESSAGEBOX);
*/
if (!getFlag("tokenHint"))
@ -3522,8 +3444,8 @@ GemData *Continuity::pickupGem(std::string name, bool effects)
setFlag("tokenHint", 1);
dsq->game->setControlHint(dsq->continuity.stringBank.get(4), false, false, false, 8);
}
//dsq->watch(1);
//dsq->resetTimer();
}
// return the last one
@ -3579,7 +3501,7 @@ void Continuity::reset()
dsq->game->recipeMenu.currentPage = 0;
}
//worldMapTiles.clear();
speedMult = biteMult = fishPoison = defenseMult = 1;
speedMult2 = 1;
@ -3635,12 +3557,12 @@ void Continuity::reset()
loadEatBank();
dsq->loadElementEffects();
form = FORM_NORMAL;
//cm.reset();
naijaModel = "Naija";
costume = "";
dsq->emote.load("data/naijaemote.txt");
//learnSong(SONG_SONGDOOR1);
worldType = WT_NORMAL;
@ -3668,7 +3590,7 @@ void Continuity::reset()
inFile >> spd;
speedTypes.push_back(spd);
}
//selectedSpell = SpellType(0);
if (!dsq->mod.isActive())
{

View file

@ -32,7 +32,7 @@ namespace AQCredits
void watchSlide(int slide)
{
float t = 10;//15;
float t = 10;
if (!(slide >= 0 && slide < slides.size())) return;
@ -190,7 +190,7 @@ void Credits::applyState()
dsq->game->transitionToScene("thirteenlair");
#endif
//dsq->title();
}
void Credits::removeState()

View file

@ -25,7 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
CurrentRender::CurrentRender() : RenderObject()
{
cull = false;
//alpha = 0.2f;
setTexture("Particles/Current");
texture->repeat = true;
rippleDelay = 2;
@ -35,32 +35,12 @@ void CurrentRender::onUpdate(float dt)
{
RenderObject::onUpdate(dt);
/*
rippleDelay -= dt;
if (rippleDelay < 0)
{
for (int i = 0; i < dsq->game->paths.size()-1; i++)
{
Path *p = dsq->game->paths[i];
for (int n = 0; n < p->nodes.size()-1; i++)
{
PathNode *n1 = &p->nodes[n];
PathNode *n2 = &p->nodes[n+1];
Vector diff = n2->position - n1->position;
Vector pos = n1->position + diff*p->animOffset;
// spawn effect at pos
if (core->afterEffectManager)
core->afterEffectManager->addEffect(new ShockEffect(Vector(core->width/2, core->height/2),pos,0.04,0.06,15,0.2f));
}
}
rippleDelay = 1.0;
}
*/
}
void CurrentRender::onRender()
{
#ifdef BBGE_BUILD_OPENGL
// note: Leave cull_face disabled!?
//glDisable(GL_CULL_FACE);
//int qs = 0;
@ -69,86 +49,12 @@ void CurrentRender::onRender()
if (p->active)
{
/*
std::ostringstream os;
os << "animOffset: " << p->animOffset;
debugLog(os.str());
*/
int w2 = p->rect.getWidth()/2;
/*
if (false)
{
float offset = 0;
glBegin(GL_QUAD_STRIP);
int sz = p->nodes.size();
float len = 0;
float totalLength = 0;
for (int n = 0; n < sz-1; n++)
{
totalLength += (p->nodes[n+1].position - p->nodes[n].position).getLength2D();
}
float texScale = totalLength/256.0f;
Vector p1, p2, diff, pl, pr;
for (int n = 0; n < sz; n++)
{
PathNode *n1 = &p->nodes[n];
p1 = n1->position;
if (n == sz-1)
{
PathNode *n2 = &p->nodes[n-1];
p2 = n2->position;
diff = p1-p2;
}
else
{
PathNode *n2 = &p->nodes[n+1];
p2 = n2->position;
diff = p2-p1;
}
len = diff.getLength2D();
float add = len/totalLength;
//texScale = len/totalLength;
pl = diff.getPerpendicularLeft();
pr = diff.getPerpendicularRight();
pl.setLength2D(w2);
pr.setLength2D(w2);
Vector r1 = p1+pl;
Vector r4 = p1+pr;
if (n == 0 || n == sz-1)
{
glColor4f(1, 1, 1, 0);
}
else
{
glColor4f(1, 1, 1, 1);
}
//(0+p->animOffset)*texScale +
glTexCoord2f((offset)*texScale+p->animOffset, 0);
glVertex2f(r1.x, r1.y);
glTexCoord2f((offset)*texScale+p->animOffset, 1);
//(0+p->animOffset)*texScale +
glVertex2f(r4.x, r4.y);
offset += add;
}
glEnd();
}
else
*/
if (true)
{
int sz = p->nodes.size()-1;
@ -165,23 +71,7 @@ void CurrentRender::onRender()
p2 += d*0.75f;
diff = p2 - p1;
//bool edge = false;
/*
if (n == 0)
{
p1 -= diff*0.25f;
edge = true;
}
if (n == sz-1)
{
p2 += diff*0.25f;
edge = true;
}
diff = p2-p1;
*/
if (!diff.isZero())
{
@ -202,21 +92,12 @@ void CurrentRender::onRender()
Vector r8 = p2+pr;
float len = diff.getLength2D();
float texScale = len/256.0f;
//float texScale2 = texScale;
/*
if (edge)
texScale *= 2;
*/
/*
if (edge)
texScale2 *= 4;
*/
if (isTouchingLine(p1, p2, dsq->screenCenter, dsq->cullRadius+p->rect.getWidth()/2.0f))
{
//qs++;
glBegin(GL_QUAD_STRIP);
glColor4f(1,1,1,0);
@ -274,7 +155,7 @@ void CurrentRender::onRender()
if (isTouchingLine(p1, p2, dsq->screenCenter, dsq->cullRadius))
{
//qs++;
glBegin(GL_QUADS);
if (n==0)
glColor4f(1,1,1,0);
@ -305,18 +186,11 @@ void CurrentRender::onRender()
}
}
}
//glEnd();
}
//glEnable(GL_CULL_FACE);
/*
std::ostringstream os;
os << "current quads: " << qs;
debugLog(os.str());
*/
#endif
}

File diff suppressed because it is too large Load diff

View file

@ -191,16 +191,7 @@ enum WorldMapRevealMethod
};
/*
class Title;
class GameOver;
class Logo;
class Entity;
class SCLogo;
class IntroText;
class AnimationEditor;
class Intro;
*/
struct SubLine
{
SubLine() { timeStamp = 0; }
@ -551,23 +542,7 @@ enum Layers
class Avatar;
/*
class GardenHoleData
{
public:
GardenHoleData();
float timePlanted, timeLastChecked, lastTimeGrown;
int plantedItem;
unsigned int state;
int slotsUsed;
};
class GardenData
{
public:
GardenHoleData holeData[256];
};
*/
#define MAPVIS_SUBDIV 64
@ -708,7 +683,7 @@ enum FoodSortType
struct IngredientEffect
{
IngredientEffect() : type(IET_NONE), magnitude(0) {}
IngredientEffect() : magnitude(0), type(IET_NONE) {}
float magnitude;
IngredientEffectType type;
std::string string;
@ -857,12 +832,7 @@ const int FLAG_SECRET03 = 236;
const int FLAG_COLLECTIBLE_START = 500;
const int FLAG_COLLECTIBLE_END = 600;
/*
const int FLAG_PET_NAUTILUS = 601;
const int FLAG_PET_DUMBO = 602;
const int FLAG_PET_BLASTER = 603;
const int FLAG_PET_PIRANHA = 604;
*/
struct PetData
{

View file

@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "DSQ.h"
#include "Game.h"
#include "Avatar.h"
//const float key = 0.1;
Demo::Demo()
{
time = 0;
@ -77,22 +77,8 @@ void Demo::save(const std::string &name)
std::string filename = "" + name + ".demo";
/*
XMLDocument doc;
// UNFINISHED
for (int i = 0; i < frames.size(); i++)
{
//DemoFrame *frame = &frames[i];
XMLElement *xmlDemoFrame = doc.NewElement("DemoFrame");
std::ostringstream os;
//os << frame->avatarPos.x << " " << frame->avatarPos.y << " " << frame->mouse;
//xmlDemoFrame->SetAttribute("a", os.str().c_str());
doc.InsertEndChild(xmlDemoFrame);
}
doc.SaveFile(filename.c_str());
*/
}
void Demo::load(const std::string &name)
@ -103,10 +89,8 @@ void Demo::load(const std::string &name)
// UNFINISHED
std::string filename = "" + name + ".demo";
//XMLDocument doc;
//doc.LoadFile(filename.c_str());
//doc.FirstChildElement("");
}
void Demo::clearRecordedFrames()
@ -136,13 +120,7 @@ void Demo::update(float dt)
frames.push_back(f);
/*
timeDiff += dt;
if (timeDiff > key)
{
timeDiff -= key;
}
*/
time += dt;
if (getQuitKey())
@ -153,7 +131,7 @@ void Demo::update(float dt)
}
else if (mode == DEMOMODE_PLAYBACK)
{
//core->updateMouse = false;
while (frame < frames.size())
{
DemoFrame *f = &frames[frame];
@ -175,10 +153,10 @@ void Demo::update(float dt)
break;
}
//
}
time += dt;
//core->updateMouse = true;
if (getQuitKey() || (!frames.empty() && frame >= frames.size())) {
togglePlayback(false);

View file

@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "Game.h"
ElementEffectData::ElementEffectData()
: elementEffectIndex(-1)
: elementEffectType(EFX_NONE)
, wavyAngleOffset(0)
, wavyMagnitude(0)
, wavyLerpIn(0)
@ -33,7 +33,7 @@ ElementEffectData::ElementEffectData()
, wavyWaving(false)
, wavyFlip(false)
, touching(false)
, elementEffectType(EFX_NONE)
, elementEffectIndex(-1)
{
}
@ -100,7 +100,6 @@ void Element::updateEffects(float dt)
/// check player position
{
// if a big wavy doesn't work, this is probably why
//if ((position - ent->position).isLength2DIn(1024))
{
ElementEffectData *eff = this->eff;
@ -163,7 +162,7 @@ void Element::updateEffects(float dt)
eff->wavyMagnitude = 0;
}
//std::cout << "setting grid from wav w/ wavyWaving\n";
setGridFromWavy();
}
@ -210,7 +209,7 @@ void Element::setGridFromWavy()
{
if (drawGrid)
{
//std::cout << "set grid from wavy (" << xDivs << ", " << yDivs << ")\n"
const float w = float(getWidth());
for (int x = 0; x < xDivs-1; x++)
{
@ -262,11 +261,7 @@ void Element::setElementEffectByIndex(int eidx)
break;
case EFX_WAVY:
{
/*
char buf[256];
sprintf(buf, "setting wavy segsy: %d radius: %d min: %d max: %d", e.segsy, e.wavy_radius, e.wavy_min, e.wavy_max);
debugLog(buf);
*/
eff->wavy.resize(e.segsy);
float bity = float(getHeight())/float(e.segsy);
for (int i = 0; i < eff->wavy.size(); i++)
@ -317,7 +312,7 @@ void Element::render()
renderBorderColor = Vector(1,1,1);
}
renderBorder = true;
//errorLog("!^!^$");
}
#endif

View file

@ -25,5 +25,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#endif

File diff suppressed because it is too large Load diff

View file

@ -35,6 +35,7 @@ using namespace tinyxml2;
class ManaBall;
class Path;
struct MinimapIcon;
struct BoneLock
{
@ -202,6 +203,7 @@ class Entity : public Quad, public StateMachine, public SoundHolder
{
public:
Entity();
virtual ~Entity();
virtual void init(){}
virtual void postInit(){}
@ -215,7 +217,7 @@ public:
ACT_RANGE = 1
};
void destroy();
//void damage(int amount, Spell *spell=0, Entity *attacker=0);
bool isEntityDead() const {return entityDead;}
std::string name;
Vector vel;
@ -242,8 +244,7 @@ public:
bool isUnderWater(const Vector &o=Vector());
//virtual void onHitBySpell(Spell *spell) {}
//virtual void onCollide(Entity *e);
virtual bool damage(const DamageData &d);
virtual bool canShotHit(const DamageData &d) { return true; }
@ -311,7 +312,7 @@ public:
STATE_TITLE =24
};
virtual void onNotify(Entity *notify){}
//void followPath(Path *p, int spd, int loop, bool deleteOnEnd = false);
float followPath(Path *p, float speed, int dir, bool deleteOnEnd = false);
Entity *attachedTo;
bool touchAvatarDamage(int radius, float dmg, const Vector &override=Vector(-1,-1,-1), float speed=0, float pushTime = 0, Vector collidePos = Vector(0,0,0));
@ -332,7 +333,7 @@ public:
void doEntityAvoidance(float dt, int range, float mod, Entity *ignore =0);
void setMaxSpeed(float ms);
Entity *findTarget(int dist, int type, int t=0);
//bool hasTarget() { return target != 0; }
bool hasTarget(int t=0);
bool isTargetInRange(int range, int t=0);
void doGlint(const Vector &position, const Vector &scale=Vector(2,2), const std::string &tex="Glint", RenderObject::BlendTypes bt=BLEND_DEFAULT);
@ -395,7 +396,7 @@ public:
InterpolatedVector maxSpeedLerp;
Hair *hair;
void assignUniqueID();
void assignUniqueID(bool temporary);
int entityID;
int getMaxSpeed();
std::string deathSound;
@ -417,10 +418,7 @@ public:
Vector ridingOnEntityOffset;
void moveOutOfWall();
bool isSittingOnInvisibleIn();
/*
void setCrawling(bool on) { crawling = on; }
bool isCrawling() { return crawling; }
*/
void flipToVel();
bool isInCurrent() { return inCurrent; }
void clearTargetPoints();
@ -454,10 +452,10 @@ public:
void clampToHit();
bool updateLocalWarpAreas(bool affectAvatar);
virtual void entityDied(Entity *e);
//bool registerEntityDied;
bool clampToSurface(int tcheck=0, Vector usePos=Vector(0,0), TileVector hitTile=TileVector(0,0));
bool checkSurface(int tcheck, int state, float statet);
//static Shader blurShader;
std::string naijaReaction;
Vector lookAtPoint;
Vector getLookAtPoint();
@ -502,6 +500,9 @@ public:
Vector getPushVec() const { return pushVec; }
float getPushDamage() const { return pushDamage; }
MinimapIcon *minimapIcon;
MinimapIcon *ensureMinimapIcon();
protected:
bool calledEntityDied;
Path *waterBubble;
@ -528,7 +529,7 @@ protected:
int lance;
Bone *lanceBone;
void updateLance(float dt);
//InterpolatedVector blurShaderAnim;
int fhScale, fvScale;
@ -550,9 +551,9 @@ protected:
Vector getMoveVel();
DisabledDamageTypes disabledDamageTypes;
//bool crawling;
//Vector backupPos, backupVel;
virtual void onIdle() {}
virtual void onHeal(int type){}
virtual void onDamage(DamageData &d){}
@ -573,7 +574,7 @@ protected:
virtual void onFreeze(){}
//Entity *target;
std::vector<Entity*>targets;
virtual void onAlwaysUpdate(float dt){}
virtual void onUpdateFrozen(float dt){}
@ -584,7 +585,7 @@ protected:
void onEnterState(int action);
void onExitState(int action);
//virtual bool onDamage(int amount, Spell *spell, Entity *attacker);
bool invincibleBreak;
bool entityDead;

View file

@ -1,62 +0,0 @@
/*
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 "DSQ.h"
void FFTNotes::load()
{
data.clear();
std::ifstream in("data/FFTNotes.txt");
std::string read;
while (std::getline(in, read))
{
std::istringstream is(read);
int n=0, v=0;
is >> n;
while (is >> v)
{
data[v] = n+1;
}
}
in.close();
}
int FFTNotes::getNoteFromFFT(int fft, int octave)
{
if (fft == 0)
return -1;
int v = data[fft]-1;
/*
std::ostringstream os;
os << "fftv: " << v;
debugLog(os.str());
*/
if (v == (octave+1)*10)
{
v = 7;
}
if (v > (octave+1)*10 || v < octave*10)
{
v = -1;
}
if (v != -1)
v -= octave*10; // : )
return v;
}

View file

@ -156,7 +156,7 @@ void PetSlot::onUpdate(float dt)
}
}
FoodHolder::FoodHolder(int slot, bool trash) : Quad(), slot(slot), trash(trash)
FoodHolder::FoodHolder(int slot, bool trash) : Quad(), trash(trash), slot(slot)
{
foodHolderIngredient = 0;
buttonDown = false;
@ -212,6 +212,11 @@ bool FoodHolder::isEmpty()
return (foodHolderIngredient == 0);
}
bool FoodHolder::isValid()
{
return this->alpha.x > 0 && this->alphaMod > 0;
}
IngredientData *FoodHolder::getIngredient()
{
return foodHolderIngredient;
@ -264,6 +269,10 @@ void FoodHolder::setIngredient(IngredientData *i, bool effects)
}
}
void FoodHolder::toggleValid(bool v) {
this->alpha = this->alphaMod = (float) v;
}
void Game::enqueuePreviewRecipe()
{
enqueuedPreviewRecipe = 1;
@ -477,7 +486,7 @@ void FoodSlot::moveRight()
for (int i = foodHolders.size()-1; i >= 0; i--)
{
if (foodHolders[i]->alpha.x > 0 && foodHolders[i]->alphaMod > 0 && foodHolders[i]->isEmpty() && !foodHolders[i]->isTrash())
if (foodHolders[i]->isValid() && foodHolders[i]->isEmpty() && !foodHolders[i]->isTrash())
{
foodHolders[i]->setIngredient(ingredient);
inCookSlot = true;
@ -564,7 +573,7 @@ void FoodSlot::onUpdate(float dt)
break;
//return;
}
else if (foodHolders[i]->isEmpty())
else if (foodHolders[i]->isEmpty() && foodHolders[i]->isValid())
{
foodHolders[i]->setIngredient(ingredient);
inCookSlot = true;
@ -1020,7 +1029,7 @@ public:
Vector menuBgScale;
const int ITEMS_PER_PAGE = 12;
//const int ITEMS_PER_PAGE = 12;
ObsRow::ObsRow(int tx, int ty, int len) : tx(tx), ty(ty), len(len)
{
@ -1648,7 +1657,6 @@ void Game::hideInGameMenu(bool effects, bool cancel)
for (int i = 0; i < dropIngrNames.size(); i++)
{
dsq->game->spawnIngredient(dropIngrNames[i], avatar->position + Vector(0,-96), 1, 1);
@ -1949,7 +1957,6 @@ void Game::clearObsRows()
void Game::fillGridFromQuad(Quad *q, ObsType obsType, bool trim)
{
#ifdef BBGE_BUILD_OPENGL
if (q->texture)
{
std::vector<TileVector> obs;
@ -2079,7 +2086,6 @@ void Game::fillGridFromQuad(Quad *q, ObsType obsType, bool trim)
}
glPopMatrix();
}
#endif
}
std::string Game::getNoteName(int n, const std::string &pre)
@ -2099,14 +2105,14 @@ void Game::clearDynamicGrid(unsigned char maskbyte /* = OT_MASK_BLACK */)
{
// just to be sure in case the grid/type sizes change,
// otherwise there is a chance to write a few bytes over the end of the buffer -- FG
compile_assert(sizeof(grid) % sizeof(uint32) == 0);
compile_assert(sizeof(grid) % sizeof(unsigned) == 0);
unsigned char *gridstart = &grid[0][0];
uint32 *gridend = (uint32*)(gridstart + sizeof(grid));
uint32 *gridptr = (uint32*)gridstart;
unsigned *gridend = (unsigned*)(gridstart + sizeof(grid));
unsigned *gridptr = (unsigned*)gridstart;
// mask out specific bytes
// use full uint32 rounds instead of single-bytes to speed things up.
const uint32 mask = maskbyte | (maskbyte << 8) | (maskbyte << 16) | (maskbyte << 24);
const unsigned mask = maskbyte | (maskbyte << 8) | (maskbyte << 16) | (maskbyte << 24);
do
{
*gridptr &= mask;
@ -2247,7 +2253,6 @@ float Game::getCoverage(Vector pos, int sampleArea)
{
if (x == t.x && y == t.y) continue;
TileVector ct(x,y);
Vector vt = ct.worldVector();
if (isObstructed(ct))
{
covered++;
@ -2659,7 +2664,7 @@ Entity* Game::establishEntity(Entity *e, int id, Vector position, int rot, bool
}
else
{
e->assignUniqueID();
e->assignUniqueID(!createSaveData); // when entity is placed on map, give positive ID; otherwise, if script-spawned, give negative ID
}
}
@ -2718,19 +2723,6 @@ void Game::initEntities()
}
}
void Game::assignEntitiesUniqueIDs()
{
FOR_ENTITIES(i)
{
Entity *e = *i;
if (e && e->entityID == 0)
{
e->assignUniqueID();
}
}
}
EntitySaveData *Game::getEntitySaveDataForEntity(Entity *e, Vector pos)
{
@ -2777,10 +2769,8 @@ void Game::setTimerText(float time)
void Game::generateCollisionMask(Quad *q, float overrideCollideRadius /* = 0 */)
{
#ifdef BBGE_BUILD_OPENGL
if (q->texture)
{
q->collidePosition = Vector(0,0,0);
if (overrideCollideRadius)
q->collideRadius = overrideCollideRadius;
else
@ -2882,7 +2872,6 @@ void Game::generateCollisionMask(Quad *q, float overrideCollideRadius /* = 0 */)
rot += 360;
*/
}
#endif
}
void Game::addPath(Path *p)
@ -3500,7 +3489,6 @@ void Game::createInGameMenu()
ToolTip *tip = 0;
foodTips.clear();
@ -3766,7 +3754,7 @@ void Game::createInGameMenu()
for (i = 0; i < foodHolders.size(); i++)
{
foodHolders[i] = new FoodHolder(i);
foodHolders[i]->alpha = 0;
foodHolders[i]->toggleValid(false);
float angle = (float(holders)/float(foodHolders.size()))*PI*2;
foodHolders[i]->position = rightCenter + Vector(sinf(angle), cosf(angle))*radius;
@ -3853,14 +3841,12 @@ void Game::createInGameMenu()
foodHolders.resize(4);
foodHolders[3] = new FoodHolder(-1, true);
foodHolders[3]->alpha = 0;
foodHolders[3]->toggleValid(false);
foodHolders[3]->position = rightCenter + Vector(96, 150);
menuBg->addChild(foodHolders[3], PM_POINTER);
int outer = 0;
int inner = 0;
for (i = 0; i < songSlots.size(); i++)
@ -6101,7 +6087,7 @@ void Game::action(int id, int state)
int trashIndex = -1;
for (int i = 0; i < foodHolders.size(); i++)
{
if (foodHolders[i]->alpha.x > 0 && foodHolders[i]->alphaMod > 0 && foodHolders[i]->isTrash())
if (foodHolders[i]->isValid() && foodHolders[i]->isTrash())
{
trashIndex = i;
break;
@ -6476,7 +6462,6 @@ void Game::applyState()
if (toFlip == 1)
{
dsq->game->avatar->flipHorizontal();
@ -6485,8 +6470,6 @@ void Game::applyState()
// li
//if (true)
@ -6806,8 +6789,6 @@ void Game::applyState()
cameraInterp = avatar->position;
core->cameraPos = getCameraPositionFor(avatar->position);
core->sort();
if (dsq->mod.isActive())
dsq->runScript(dsq->mod.getPath() + "scripts/premap_" + sceneName + ".lua", "init", true);
else
@ -7421,7 +7402,7 @@ void Game::onCook()
longAnim = false;
for (int i = foodHolders.size()-1; i >= 0; i--)
if (foodHolders[i]->alpha.x > 0 && !foodHolders[i]->isEmpty() && !foodHolders[i]->isTrash())
if (foodHolders[i]->isValid() && !foodHolders[i]->isEmpty() && !foodHolders[i]->isTrash())
foodHolders[i]->animateLid(true, longAnim);
//dsq->main(0.2);
@ -7509,7 +7490,7 @@ void Game::onCook()
dsq->sound->playSfx("Cook");
for (int i = 0; i < foodHolders.size(); i++)
if (foodHolders[i]->alpha.x > 0 && !foodHolders[i]->isTrash())
if (foodHolders[i]->isValid() && !foodHolders[i]->isTrash())
foodHolders[i]->animateLid(false);
dsq->spawnParticleEffect("cook-food", Vector(575,250), 0, 0, LR_HUD3, 1);
@ -8277,11 +8258,9 @@ void Game::playBurstSound(bool wallJump)
sound->playSfx("Burst", 1);
if (chance(50))
{
switch (dsq->continuity.form)
if (dsq->continuity.form == FORM_BEAST)
{
case FORM_BEAST:
sound->playSfx("BeastBurst", (128+rand()%64)/256.0f);
break;
}
}
}
@ -8409,21 +8388,15 @@ Bone *Game::collideSkeletalVsCircle(Entity *skeletal, Vector pos, float radius)
{
Bone *b = skeletal->skeletalSprite.bones[i];
if (b->alpha.x == 1 && b->renderQuad)
if (b->alpha.x == 1 && b->renderQuad &&
(!b->collisionMask.empty() || b->collideRadius) // check this here to avoid calculating getWorldCollidePosition() if not necessary
)
{
float checkRadius = sqr(radius+b->collisionMaskRadius);
Vector bonePos = b->getWorldCollidePosition();
float dist = (bonePos - pos).getSquaredLength2D();
// BOUND RECT METHOD
if (!b->collisionRects.empty())
{
for (int i = 0; i < b->collisionRects.size(); i++)
{
b->collisionRects[i].isCoordinateInside(pos, radius);
}
}
// MULTIPLE CIRCLES METHOD
else if (!b->collisionMask.empty())
if (!b->collisionMask.empty())
{
if (dist < checkRadius)
{
@ -9101,10 +9074,7 @@ void Game::toggleFoodMenu(bool f)
for (int i = 0; i < foodHolders.size(); i++)
{
if (f)
foodHolders[i]->alpha = 1;
else
foodHolders[i]->alpha = 0;
foodHolders[i]->toggleValid(f);
}
if (f)
@ -9117,11 +9087,11 @@ void Game::toggleFoodMenu(bool f)
&& p->isCoordinateInside(dsq->game->avatar->position)))
{
//cook->alpha = 1;
foodHolders[0]->alpha = 1;
foodHolders[0]->toggleValid(true);
}
else
{
foodHolders[0]->alpha = 0;
foodHolders[0]->toggleValid(false);
}
}
}
@ -9594,8 +9564,6 @@ void Game::updateOptionsMenu(float dt)
{
dsq->sound->playSfx("denied");
dsq->loops.updateVolume();
if (dsq->game->avatar)
dsq->game->avatar->updateHeartbeatSfx();
}
if (voxslider->isGrabbed())
{
@ -10438,8 +10406,6 @@ void Game::update(float dt)
cameraInterp.interpolateTo(dest, cameraLerpDelay);
dsq->cameraPos = getCameraPositionFor(cameraInterp);
constrainCamera();
float dd = (dsq->cameraPos - oldCamPos).getLength2D();
}
cameraInterp.update(dt);

View file

@ -100,7 +100,7 @@ const float MIN_SIZE = 0.1;
#undef AQUARIA_BUILD_SCENEEDITOR
#endif
//#include "GridRender.h"
class GridRender;
class MiniMapRender;
class WaterSurfaceRender;
@ -135,6 +135,20 @@ enum EditTypes
};
#endif
// impl is in Minimap.cpp
struct MinimapIcon
{
MinimapIcon();
bool setTexture(std::string);
void update(float dt);
CountedPtr<Texture> tex;
InterpolatedVector color, alpha, size;
float throbMult;
bool scaleWithDistance;
static const Vector defaultSize;
};
class ManaBall : public Quad
{
public:
@ -269,7 +283,9 @@ public:
bool isEmpty();
bool isTrash();
bool isValid();
void setIngredient(IngredientData *i, bool effects=true);
void toggleValid(bool v);
void dropFood();
IngredientData *getIngredient();
void animateLid(bool down, bool longAnim=true);
@ -349,7 +365,7 @@ class EntityClass
{
public:
EntityClass(std::string name, bool script=false, int idx=-1, std::string prevGfx="", float prevScale=1)
: name(name), script(script), idx(idx), prevGfx(prevGfx), prevScale(prevScale) {}
: name(name), prevScale(prevScale), prevGfx(prevGfx), script(script), idx(idx) {}
std::string name;
float prevScale;
std::string prevGfx;
@ -465,7 +481,6 @@ public:
bool multiSelecting;
Vector multiSelectPoint;
std::vector <Element*> selectedElements;
void fixEntityIDs();
Vector groupCenter;
Vector getSelectedElementsCenter();
@ -474,9 +489,9 @@ public:
void updateSelectedElementPosition(Vector position);
int selectedEntityType;
//int curEntity;
SelectedEntity selectedEntity;
//EntityGroups::iterator page;
int entityPageNum;
void checkForRebuild();
@ -573,6 +588,7 @@ typedef std::vector<QuadList> QuadArray;
typedef std::vector<Element*> ElementUpdateList;
// Note: although this is a bitmask, only one of these values may be set at a time!
// This is because GridRender and most Lua scripts check via ==, not for bits set (Lua 5.1 doesn't have bit ops)
enum ObsType
{
OT_EMPTY = 0x00,
@ -597,6 +613,8 @@ enum ObsType
OT_USER1 = 0x40,
OT_USER2 = 0x80,
OT_USER_MASK = OT_USER1 | OT_USER2,
OT_OUTOFBOUNDS = 0xff
};
struct EntitySaveData
@ -617,7 +635,7 @@ public:
void removeState();
void update(float dt);
void onLeftMouseButton();
//std::vector<Item*>items;
Avatar *avatar;
Entity *li;
@ -626,7 +644,7 @@ public:
FoodSlot *moveFoodSlotToFront;
//void doChoiceMenu(Vector position, std::vector<std::string> choices);
std::string getSelectedChoice() { return selectedChoice; }
@ -636,6 +654,7 @@ public:
void setGrid(const TileVector &tile, ObsType v);
void addGrid(const TileVector &tile, ObsType v);
bool isObstructed(const TileVector &tile, int t = OT_BLOCKING) const;
bool isObstructedRaw(const TileVector &tile, int t) const;
void trimGrid();
void dilateGrid(unsigned int radius, ObsType test, ObsType set, ObsType allowOverwrite);
@ -682,7 +701,7 @@ public:
void handleShotCollisionsHair(Entity *e, int num = 0, float perc = 0);
std::vector<ElementTemplate> elementTemplates;
std::string sceneName;
std::string sceneName, sceneDisplayName;
ElementTemplate *getElementTemplateByIdx(int idx);
@ -807,8 +826,8 @@ public:
Precacher tileCache;
//void cameraPanToNode(Path *p, int speed=500);
//void cameraRestore();
void setCameraFollow(Vector *position);
Shot *fireShot(Entity *firer, const std::string &particleEffect, Vector position, bool big, Vector direction, Entity *target, int homing=0, int velLenOverride=0, int targetPt=-1);
Shot *fireShot(const std::string &bankShot, Entity *firer, Entity *target=0, const Vector &pos=Vector(0,0,0), const Vector &aim=Vector(0,0,0), bool playSfx=true);
@ -893,7 +912,7 @@ public:
void selectEntityFromGroups();
InterpolatedVector cameraInterp;
//InterpolatedVector tintColor;
float getWaterLevel();
void setMusicToPlay(const std::string &musicToPlay);
Vector lastCollidePosition;
@ -1088,7 +1107,6 @@ protected:
Quad *options;
Quad *image;
void assignEntitiesUniqueIDs();
void initEntities();
@ -1147,12 +1165,7 @@ protected:
float deathTimer;
/*
void onAssignMenuScreenItemToSlot0();
void onAssignMenuScreenItemToSlot1();
void onAssignMenuScreenItemToSlot2();
void onAssignMenuScreenItemToSlot3();
*/
void onInGameMenuInventory();
void onInGameMenuSpellBook();
@ -1215,7 +1228,7 @@ ObsType Game::getGridRaw(const TileVector &tile) const
{
return (unsigned(tile.x) < unsigned(MAX_GRID) && unsigned(tile.y) < unsigned(MAX_GRID))
? ObsType(grid[tile.x][tile.y])
: OT_INVISIBLE;
: OT_OUTOFBOUNDS;
}
inline
@ -1257,4 +1270,10 @@ bool Game::isObstructed(const TileVector &tile, int t /* = OT_BLOCKING */) const
return (getGrid(tile) & t);
}
inline
bool Game::isObstructedRaw(const TileVector &tile, int t) const
{
return (getGridRaw(tile) & t);
}
#endif

View file

@ -56,11 +56,7 @@ void GameplayVariables::load()
inFile >> s >> zoomNaija;
inFile >> s >> maxOutOfWaterSpeed;
inFile >> s >> defaultCameraLerpDelay;
/*
inFile >> s >> initialId;
inFile >> s >> initialEgo;
inFile >> s >> initialSuperEgo;
*/
inFile.close();
}

View file

@ -29,8 +29,8 @@ GasCloud::GasCloud(Entity *source, const Vector &position, const std::string &pa
this->poisonTime = poisonTime;
this->particles = particles;
//this->gfx = gfx;
//this->isMoney = isMoney;
this->position = position;
this->damage = damage;
this->radius = radius;
@ -46,10 +46,10 @@ GasCloud::GasCloud(Entity *source, const Vector &position, const std::string &pa
emitter->load(particles);
emitter->start();
emitter->setDie(true);
//emitter->parentManagedStatic = true;
//addChild(&emitter);
dsq->game->addRenderObject(emitter, LR_PARTICLES);
//setDamageTarget(DT_ENEMY_GAS, false)
setEntityType(ET_NEUTRAL);
deathSound = "";
@ -96,32 +96,7 @@ void GasCloud::onUpdate(float dt)
}
}
/*
pTimer += dt;
while (pTimer > pSpawnRate)
{
int a = rand()%360;
int r = rand()%radius;
Vector pos = position;
pos += Vector(sinf(a)*r, cosf(a)*r);
Quad *quad = new Quad;
{
quad->rotation.z = rand()%360;
quad->position = pos;
quad->color = color;
quad->setTexture(gfx);
quad->alpha.path.addPathNode(0, 0);
quad->alpha.path.addPathNode(0.5, 0.2);
quad->alpha.path.addPathNode(0.5, 0.8);
quad->alpha.path.addPathNode(0, 1);
quad->alpha.startPath(3);
quad->scale = Vector(0.5, 0.5);
quad->scale.interpolateTo(Vector(2,2),4);
}
dsq->getTopStateData()->addRenderObject(quad, LR_PARTICLES);
pTimer -= pSpawnRate;
}
*/
}
else
{

View file

@ -24,13 +24,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
GridRender::GridRender(ObsType obsType) : RenderObject()
{
color = Vector(1, 0, 0);
//color = Vector(0.2,0.2,1);
position.z = 5;
cull = false;
alpha = 0.5f;
this->obsType = obsType;
blendEnabled = false;
//setTexture("grid");
}
void GridRender::onUpdate(float dt)
@ -46,22 +46,13 @@ inline static void doRenderGrid(int x, int startCol, int endCol)
const int drawy1 = startCol*TILE_SIZE;
const int drawy2 = (endCol+1)*TILE_SIZE;
#ifdef BBGE_BUILD_OPENGL
glBegin(GL_QUADS);
glVertex3i(drawx1, drawy2, 0.0f);
glVertex3i(drawx2, drawy2, 0.0f);
glVertex3i(drawx2, drawy1, 0.0f);
glVertex3i(drawx1, drawy1, 0.0f);
glEnd();
#endif
#ifdef BBGE_BUILD_DIRECTX
core->blitD3DVerts(0,
drawx1, drawy1,
drawx2, drawy1,
drawx2, drawy2,
drawx1, drawy2);
#endif
}
void GridRender::onRender()
@ -159,11 +150,10 @@ void SongLineRender::clear()
void SongLineRender::onRender()
{
int w=core->getWindowWidth();
//core->getWindowWidth(&w);
int ls = (4*w)/1024.0f;
if (ls < 0)
ls = 1;
#ifdef BBGE_BUILD_OPENGL
glLineWidth(ls);
const int alphaLine = pts.size()*(0.9f);
float a = 1;
@ -178,6 +168,5 @@ void SongLineRender::onRender()
glVertex2f(pts[i].pt.x, pts[i].pt.y);
}
glEnd();
#endif
}

View file

@ -63,8 +63,17 @@ protected:
float lightLevel;
void onUpdate(float dt);
void onRender();
void renderIcon(MinimapIcon *ico, const Vector& pos);
InterpolatedVector lerp;
public:
static bool setWaterBitTex(const std::string& name);
static bool setTopTex(const std::string& name);
static bool setBottomTex(const std::string& name);
static bool setAvatarTex(const std::string& name);
static bool setHealthBarTex(const std::string& name);
static bool setMaxHealthMarkerTex(const std::string& name);
};
class WorldMapRender : public RenderObject, public ActionMapper

View file

@ -23,8 +23,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "Hair.h"
#include "DSQ.h"
// nodes = 40
// segmentLength = 3
Hair::Hair(int nodes, float segmentLength, float hairWidth) : RenderObject()
{
this->segmentLength = segmentLength;
@ -33,8 +33,8 @@ Hair::Hair(int nodes, float segmentLength, float hairWidth) : RenderObject()
cull = false;
hairNodes.resize(nodes);
// nodes: 20 length: 6
//segmentLength = 3;
for (int i = 0; i < hairNodes.size(); i++)
{
float perc = (float(i)/(float(hairNodes.size())));
@ -47,64 +47,14 @@ Hair::Hair(int nodes, float segmentLength, float hairWidth) : RenderObject()
void Hair::exertWave(float dt)
{
/*
Vector diff = headPos - position;
Vector diff2;
if (!isFlippedHorizontal())
diff2 = diff.getPerpendicularLeft();
else
diff2 = diff.getPerpendicularRight();
Vector diff3 = position - headPos;
float len =diff2.getLength2D();
diff3.setLength2D(len);
hairTimer += dt;
while (hairTimer > 2.0f)
{
hairTimer -= 2.0f;
}
float useTimer = hairTimer;
if (useTimer > 1.0f)
useTimer = 1.0f - (hairTimer-1);
float frc = 0.5;
diff = (diff2*(frc*(1.0f-(useTimer*0.5f))) + diff3*(frc);
diff.setLength2D(400);
//if (!vel.isLength2DIn(10))
exertForce(diff, dt);
*/
}
void Hair::exertGravityWave(float dt)
{
/*
Vector diff = headPos - position;
Vector diff2;
if (!isFlippedHorizontal())
diff2 = diff.getPerpendicularLeft();
else
diff2 = diff.getPerpendicularRight();
Vector diff3 = position - headPos;
float len =diff2.getLength2D();
diff3.setLength2D(len);
hairTimer += dt;
while (hairTimer > 2.0f)
{
hairTimer -= 2.0f;
}
float useTimer = hairTimer;
if (useTimer > 1.0f)
useTimer = 1.0f - (hairTimer-1);
float frc = 0.333333;
diff = (diff2*(frc*(1.0f-(useTimer*0.5f))) + diff3*(frc) + Vector(0,len)*(frc*(0.5f+useTimer*0.5f)));
diff.setLength2D(400);
//if (!vel.isLength2DIn(10))
exertForce(diff, dt);
*/
}
void Hair::setHeadPosition(const Vector &vec)
@ -125,16 +75,15 @@ HairNode *Hair::getHairNode(int idx)
void Hair::onRender()
{
#ifdef BBGE_BUILD_OPENGL
//glDisable(GL_CULL_FACE);
glBegin(GL_QUAD_STRIP);
float texBits = 1.0f / (hairNodes.size()-1);
//float height2 = 2.5f;
Vector pl, pr;
for (int i = 0; i < hairNodes.size(); i++)
{
//glNormal3f( 0.0f, 0.0f, 1.0f);
if (i != hairNodes.size()-1)
{
@ -144,14 +93,6 @@ void Hair::onRender()
pr = diffVec.getPerpendicularRight();
}
/*
if (hairNodes[i].problem)
{
glColor3f(1,0,0);
}
else
glColor3f(1,1,1);
*/
glTexCoord2f(0, texBits*i);
@ -159,99 +100,33 @@ void Hair::onRender()
glTexCoord2f(1, texBits*i);
glVertex3f( hairNodes[i].position.x + pr.x, hairNodes[i].position.y + pr.y, 0);
//float angle = 0;
/*
float angle = 0;
if (i < hairNodes.size()-1)
{
MathFunctions::calculateAngleBetweenVectorsInDegrees(hairNodes[i+1].position, hairNodes[i].position, angle);
angle += 90;
angle = (angle*PI)/180.0f;
}
*/
/*
glTexCoord2f(0, 1-texBits*i);
glVertex3f(hairNodes[i].position.x -sinf(angle)*hairWidth, hairNodes[i].position.y + cosf(angle)*height2, 0);
glTexCoord2f(1, 1-texBits*i);
glVertex3f( hairNodes[i].position.x + sinf(angle)*hairWidth, hairNodes[i].position.y + cosf(angle)*height2, 0);
*/
}
glEnd();
/*
glColor3f(1,1,1);
for (int i = 0; i < hairNodes.size(); i++)
{
std::ostringstream os;
os << hairNodes[i].angleDiff;
core->print(hairNodes[i].position.x, hairNodes[i].position.y, os.str().c_str(), 6);
}
*/
//glEnable(GL_CULL_FACE);
#endif
}
void Hair::onUpdate(float dt)
{
RenderObject::onUpdate(dt);
/*
// straighten hair
if (hairNodes.size()>2)
{
Vector d1 = hairNodes[1].position - hairNodes[0].position;
for (int i = 2; i < hairNodes.size(); i++)
{
Vector d2 = hairNodes[i].position - hairNodes[i-1].position;
Vector wantPos = hairNodes[i-1].position + d1;
float perc = 1.0f-float(i)/float(hairNodes.size());
hairNodes[i].position += (wantPos - hairNodes[i].position)*dt*(40 * perc);
//Vector d1 = hairNodes[i-1].position - hairNodes[i-2].position;
//Vector d2 = hairNodes[i].position - hairNodes[i-1].position;
//float prod = d1.dot2D(d2);
////if (prod < 0.5f)
//{
// d1.setLength2D(segmentLength);
//
// Vector wantPos = (hairNodes[i-1].position + d1)*0.5f + hairNodes[i].position*0.5f;
// hairNodes[i].position += (wantPos - hairNodes[i].position)*dt*10;
// break;
//}
}
}
*/
}
void Hair::updatePositions()
{
BBGE_PROF(Hair_updatePositions);
//int minLength = 1;
/*
Vector accum;
for (int i = 1; i < hairNodes.size(); i++)
{
Vector diff = hairNodes[i].position - hairNodes[i-1].position;
accum += diff;
}
accum /= float(hairNodes.size()-1);
*/
for (int i = 1; i < hairNodes.size(); i++)
{
Vector diff = hairNodes[i].position - hairNodes[i-1].position;
/*
if (diff.getLength2D() < 1)
{
diff = accum;
}
*/
/*
if (diff.getLength2D() <= 1)
{
diff = hairNodes[i].position - hairNodes[0].position;
}
*/
if (diff.getLength2D() < segmentLength)
{
@ -260,181 +135,13 @@ void Hair::updatePositions()
}
else if (diff.getLength2D() > segmentLength)
{
//diff |= segmentLength;
diff.setLength2D(segmentLength);
hairNodes[i].position = hairNodes[i-1].position + diff;
}
/*
if (i > 1)
{
Vector d1 = hairNodes[i-1].position - hairNodes[i-2].position;
Vector d2 = hairNodes[i].position - hairNodes[i-1].position;
float prod = d1.dot2D(d2);
float a1 = 0, a2 = 0;
float maxAngle = 0.3;
MathFunctions::calculateAngleBetweenVectorsInRadians(d1, Vector(0,0,0), a1);
MathFunctions::calculateAngleBetweenVectorsInRadians(d2, Vector(0,0,0), a2);
float a = a2 - a1;
hairNodes[i].angleDiff = a;
if (fabsf(a) > maxAngle)
{
float len = d2.getLength2D();
//d2 = d1;
Vector dt1 = d1;
Vector dt2 = d1;
dt1.rotate2D(-maxAngle);
dt2.rotate2D(maxAngle);
//if (a < 0)
// d2.rotate2D(-maxAngle);
//else
// d2.rotate2D(maxAngle);
//d2.setLength2D(len);
//hairNodes[i].position = hairNodes[i-1].position + d2;
dt1 = hairNodes[i-1].position + dt1;
dt2 = hairNodes[i-1].position + dt2;
if ((hairNodes[i].position - dt1).getSquaredLength2D() < (hairNodes[i].position - dt2).getSquaredLength2D())
{
hairNodes[i].position = dt1;
}
else
hairNodes[i].position = dt2;
hairNodes[i].problem = true;
}
else
{
hairNodes[i].problem = false;
}
}
*/
/*
int diffLength = segmentLength * 2;
Vector accum;
int c=0;
for (int j = 0; j < hairNodes.size(); j++)
{
if (j != i && j != i-1 && j != i+1)
{
Vector diff = hairNodes[i].position - hairNodes[j].position;
if (diff.getLength2D() < diffLength)
{
diff.setLength2D(diffLength);
//hairNodes[i].position = hairNodes[j].position + diff;
accum += hairNodes[j].position + diff;
c++;
//break;
}
}
}
if (!accum.isZero())
{
accum /= c;
//hairNodes[i].position = (hairNodes[i].position + accum)*0.5f;
hairNodes[i].position = accum;
}
*/
/*
if (i > 1)
{
Vector d1 = hairNodes[i-1].position - hairNodes[i-2].position;
Vector d2 = hairNodes[i].position - hairNodes[i-1].position;
float prod = d1.dot2D(d2);
if (prod < -0.5f)
{
//d1.setLength2D(d2.getLength2D());
Vector wantPos = hairNodes[i-1].position + d1;
hairNodes[i].position = wantPos;//hairNodes[i].position*0.75f + wantPos*0.25f;
//
//d2 = (d2 + d1)*0.5f;
//hairNodes[i].position = hairNodes[i-1].position + d1;
}
}
*/
/*
if (i > 1)
{
//float a1,a2;
float a1=0;
// MathFunctions::calculateAngleBetweenVectorsInRadians(hairNodes[i].position, hairNodes[i-1].position, a1);
MathFunctions::calculateAngleBetweenVectorsInRadians(hairNodes[i-1].position, hairNodes[i-2].position, a1);
Vector d1 = hairNodes[i-1].position - hairNodes[i-2].position;
Vector d2 = hairNodes[i].position - hairNodes[i-1].position;
float a=0;
MathFunctions::calculateAngleBetweenVectorsInRadians(d2, d1, a);
//float d = a2 - a1, c=PI/2;
float c=PI/2;
float d=0;
bool adjust = 0;
if (a > c)
{
d = a1 + c;
adjust = 1;
}
else if (a < -c)
{
d = a1 - c;
adjust = -1;
}
if (adjust)
{
Vector add(sinf(d), cosf(d));
add.setLength2D(d2.getLength2D());
hairNodes[i].position = hairNodes[i-1].position + add;
}
//Vector diff2 = hairNodes[i-1] - hairNodes[i-2].position;
//hairNodes[i].position = hairNodes[i-1].position + diff;
}
*/
/*
if (i < hairNodes.size()-1)
{
Vector diff2 = hairNodes[i+1].position - hairNodes[i].position;
float a=0,c=PI/2;
bool adjust = false;
MathFunctions::calculateAngleBetweenVectorsInRadians(hairNodes[i+1].position, hairNodes[i].position, a);
if (a > c)
{
a = c;
adjust = true;
}
else if (a < -c)
{
a = -c;
adjust = true;
}
if (adjust)
{
Vector add(sinf(a), cosf(a));
add *= diff2.getLength2D();
hairNodes[i+1].position = hairNodes[i].position + add;
}
}
*/
/*
else if (diff.getLength2D() < minLength)
{
*/
/*
diff.setLength2D(minLength);
hairNodes[i].position = hairNodes[i-1].position + diff;
*/
//}
}
@ -474,15 +181,7 @@ void Hair::exertForce(const Vector &force, float dt, int usePerc)
hairNodes[i].position += force*dt;
break;
}
/*
Vector diff = hairNodes[i].position - hairNodes[i-1].position;
if (diff.getSquaredLength2D() > sqr(segmentLength))
{
diff |= segmentLength;
hairNodes[i].position = hairNodes[i-1].position + diff;
}
*/
}
}

View file

@ -22,9 +22,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "Avatar.h"
IngredientData::IngredientData(const std::string &name, const std::string &gfx, IngredientType type)
: name(name), gfx(gfx), amount(0), maxAmount(MAX_INGREDIENT_AMOUNT), held(0), type(type), marked(0), sorted(false)
, displayName(dsq->continuity.getIngredientDisplayName(name))
, rotKind(!(type == IT_OIL || type == IT_EGG))
: name(name)
, gfx(gfx)
, displayName(dsq->continuity.getIngredientDisplayName(name))
, type(type)
, amount(0)
, maxAmount(MAX_INGREDIENT_AMOUNT)
, held(0)
, marked(0)
, rotKind(!(type == IT_OIL || type == IT_EGG))
{
}
@ -44,7 +50,11 @@ bool IngredientData::hasIET(IngredientEffectType iet)
}
Ingredient::Ingredient(const Vector &pos, IngredientData *data, int amount)
: Entity(), data(data), amount(amount), gone(false), used(false)
: Entity()
, data(data)
, used(false)
, gone(false)
, amount(amount)
{
addType(SCO_INGREDIENT);
entityType = ET_INGREDIENT;
@ -59,7 +69,7 @@ Ingredient::Ingredient(const Vector &pos, IngredientData *data, int amount)
velocity = randVector(mag)*0.5f + Vector(0, -mag)*0.5f;
else
velocity = Vector(0,-mag*0.5f);
gravity = Vector(0, 250); //300
gravity = Vector(0, 250);
scale = Vector(0.2,0.2);
scale.interpolateTo(Vector(1, 1), 0.75);
@ -110,12 +120,7 @@ void Ingredient::onUpdate(float dt)
if (dsq->game->collideCircleWithGrid(position, 24))
{
position = lastPosition;
/*
if (velocity.x < velocity.y)
velocity.x = -velocity.x;
else
velocity.y = -velocity.y;
*/
velocity = 0;
}

View file

@ -765,8 +765,6 @@ void Intro::update(float dt)
dsq->overlay->color = Vector(0,0,0);
dsq->fade(1, 0.1);
if (waitQuit(0.1)) return;

View file

@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
void Logo::JumpTitle::act()
{
//dsq->title();
}
Logo::Logo() : StateObject()
@ -36,25 +36,8 @@ void Logo::applyState()
core->setClearColor(Vector(1,1,1));
//glClearColor(1,1,1,0);
//core->enable2D(800);
/*
Quad *q = new Quad;
{
q->setTexture("zs");
q->width=800;
q->height=100;
q->position = Vector(400,300);
q->alpha = 0;
q->alpha.interpolateTo(1, 3, 0);
}
addRenderObject(q);
addAction(&jumpTitle, MOUSE_BUTTON_LEFT, 1);
*/
Quad *q = new Quad;
{

View file

@ -27,7 +27,7 @@ class Logo : public StateObject
{
public:
Logo();
EVENT(JumpTitle, jumpTitle);
EVENT(JumpTitle, jumpTitle)
void applyState();
void removeState();
};

View file

@ -66,20 +66,6 @@ static void CheckConfig(void)
}
#if defined(BBGE_BUILD_WINDOWS) && !defined(BBGE_BUILD_SDL)
int WINAPI WinMain( HINSTANCE hInstance, // Instance
HINSTANCE hPrevInstance, // Previous Instance
LPSTR lpCmdLine, // Command Line Parameters
int nCmdShow) // Window Show State
{
#ifdef _DEBUG
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode ( _CRT_ERROR, _CRTDBG_MODE_DEBUG);
#endif
std::string dsqParam = GetCommandLine();
#else
extern "C" int main(int argc,char *argv[])
{
@ -102,7 +88,6 @@ static void CheckConfig(void)
extraDataDir = AQUARIA_EXTRA_DATA_DIR;
#endif
#endif
CheckConfig();

View file

@ -86,8 +86,8 @@ void ManaBall::onUpdate(float dt)
this->scale.interpolateTo(Vector(0,0),1);
setLife(1);
setDecayRate(1);
//this->shareAlphaWithChildren = 1;
//this->fadeAlphaWithLife = 1;
}
}
@ -99,7 +99,7 @@ void ManaBall::onUpdate(float dt)
if (diff.isLength2DIn(96))
{
use(dsq->game->avatar);
//position.interpolateTo(dsq->game->avatar->position, 0.5);
}
else
{
@ -122,7 +122,7 @@ void ManaBall::onUpdate(float dt)
else
{
position.interpolateTo(dsq->game->avatar->position, 0.2);
//position = ;
}
}
position.z = 0.5;

View file

@ -47,8 +47,6 @@ namespace MiniMapRenderSpace
const float iconBaseSize = 14;
// Additional radius added (or subtracted) by "throb" effect
const float iconThrobSize = 6;
// Size of cooking icon (fixed)
const float iconCookSize = 16;
// Maximum offset of warp/save/cooking icons from center of minimap
const float iconMaxOffset = miniMapRadius * miniMapScale * (7.0f/8.0f);
// Distance at which the icon decreases to minimum size
@ -66,11 +64,9 @@ namespace MiniMapRenderSpace
const int healthMarkerSize = 20;
CountedPtr<Texture> texCook = 0;
CountedPtr<Texture> texWaterBit = 0;
CountedPtr<Texture> texMinimapBtm = 0;
CountedPtr<Texture> texMinimapTop = 0;
CountedPtr<Texture> texRipple = 0;
CountedPtr<Texture> texNaija = 0;
CountedPtr<Texture> texHealthBar = 0;
CountedPtr<Texture> texMarker = 0;
@ -91,6 +87,69 @@ namespace MiniMapRenderSpace
using namespace MiniMapRenderSpace;
const Vector MinimapIcon::defaultSize(iconBaseSize, iconBaseSize);
MinimapIcon::MinimapIcon()
: color(1,1,1), alpha(1), size(defaultSize), throbMult(iconThrobSize), scaleWithDistance(true)
{
}
void MinimapIcon::update(float dt)
{
color.update(dt);
alpha.update(dt);
size.update(dt);
}
// pretty much copied from RenderObject::setTexture()
static bool _setTex(CountedPtr<Texture> &tex, std::string name)
{
stringToLowerUserData(name);
if (name.empty())
{
tex = NULL;
return false;
}
if(tex && tex->getLoadResult() == TEX_SUCCESS && name == tex->name)
return true; // no texture change
tex = core->addTexture(name);
return tex && tex->getLoadResult() == TEX_SUCCESS;
}
bool MinimapIcon::setTexture(std::string name)
{
return _setTex(tex, name);
}
bool MiniMapRender::setWaterBitTex(const std::string& name)
{
return _setTex(texWaterBit, name);
}
bool MiniMapRender::setTopTex(const std::string& name)
{
return _setTex(texMinimapTop, name);
}
bool MiniMapRender::setBottomTex(const std::string& name)
{
return _setTex(texMinimapBtm, name);
}
bool MiniMapRender::setAvatarTex(const std::string& name)
{
return _setTex(texNaija, name);
}
bool MiniMapRender::setHealthBarTex(const std::string& name)
{
return _setTex(texHealthBar, name);
}
bool MiniMapRender::setMaxHealthMarkerTex(const std::string& name)
{
return _setTex(texMarker, name);
}
MiniMapRender::MiniMapRender() : RenderObject()
{
toggleOn = 1;
@ -108,13 +167,11 @@ MiniMapRender::MiniMapRender() : RenderObject()
cull = false;
lightLevel = 1.0;
texCook = core->addTexture("GUI/ICON-FOOD");
texWaterBit = core->addTexture("GUI/MINIMAP/WATERBIT");
texMinimapBtm = core->addTexture("GUI/MINIMAP/BTM");
texMinimapTop = core->addTexture("GUI/MINIMAP/TOP");
texRipple = core->addTexture("GUI/MINIMAP/RIPPLE");
texNaija = core->addTexture("GEMS/NAIJA-TOKEN");
texHealthBar = core->addTexture("PARTICLES/glow-masked");
texWaterBit = core->addTexture("gui/minimap/waterbit");
texMinimapBtm = core->addTexture("gui/minimap/btm");
texMinimapTop = core->addTexture("gui/minimap/top");
texNaija = core->addTexture("gems/naija-token");
texHealthBar = core->addTexture("particles/glow-masked");
texMarker = core->addTexture("gui/minimap/marker");
buttons.clear();
@ -164,11 +221,9 @@ void MiniMapRender::destroy()
{
RenderObject::destroy();
UNREFTEX(texCook);
UNREFTEX(texWaterBit);
UNREFTEX(texMinimapBtm);
UNREFTEX(texMinimapTop);
UNREFTEX(texRipple);
UNREFTEX(texNaija);
UNREFTEX(texHealthBar);
UNREFTEX(texMarker);
@ -420,7 +475,6 @@ void MiniMapRender::onUpdate(float dt)
void MiniMapRender::onRender()
{
#ifdef BBGE_BUILD_OPENGL
glBindTexture(GL_TEXTURE_2D, 0);
RenderObject::lastTextureApplied = 0;
@ -541,14 +595,10 @@ void MiniMapRender::onRender()
if (!radarHide)
{
const float factor = sinf(game->getTimer()*PI);
const float iconSize = iconBaseSize + factor*iconThrobSize;
texRipple->apply();
// FIXME: use getFirstPathOfType?
for (int i = 0; i < dsq->game->getNumPaths(); i++)
{
Path *p = dsq->game->getPath(i);
if (!p->nodes.empty() && (p->pathType==PATH_COOK || p->pathType==PATH_SAVEPOINT || p->pathType==PATH_WARP))
if (!p->nodes.empty() && p->minimapIcon)
{
bool render = true;
Path *p2 = dsq->game->getNearestPath(p->nodes[0].position, PATH_RADARHIDE);
@ -562,95 +612,18 @@ void MiniMapRender::onRender()
if (render)
{
Vector pt(p->nodes[0].position);
Vector d = pt - dsq->game->avatar->position;
const float len = d.getLength2D();
float iconScale;
if (len < iconMaxOffset)
{
iconScale = 1;
}
else
{
d *= iconMaxOffset / len;
float k;
if (len < iconMaxDistance)
k = ((iconMaxDistance - len) / (iconMaxDistance - iconMaxOffset));
else
k = 0;
iconScale = iconMinScale + k*(1-iconMinScale);
}
const Vector miniMapPos = Vector(d)*Vector(1.0f/miniMapScale, 1.0f/miniMapScale);
switch(p->pathType)
{
case PATH_COOK:
{
glColor4f(1, 1, 1, 1);
glTranslatef(miniMapPos.x, miniMapPos.y, 0);
const float sz = iconCookSize * iconScale;
texCook->apply();
glBegin(GL_QUADS);
glTexCoord2f(0, 1);
glVertex2f(-sz, sz);
glTexCoord2f(1, 1);
glVertex2f(sz, sz);
glTexCoord2f(1, 0);
glVertex2f(sz, -sz);
glTexCoord2f(0, 0);
glVertex2f(-sz, -sz);
glEnd();
glTranslatef(-miniMapPos.x, -miniMapPos.y, 0);
texRipple->apply();
render = false; // Skip common rendering code
}
break;
case PATH_SAVEPOINT:
{
glColor4f(1.0, 0, 0, alphaValue*0.75f);
}
break;
case PATH_WARP:
{
if (p->naijaHome)
{
glColor4f(1.0, 0.9, 0.2, alphaValue*0.75f);
}
else
{
glColor4f(1.0, 1.0, 1.0, alphaValue*0.75f);
renderIcon(p->minimapIcon, p->nodes[0].position);
}
}
break;
}
if (render)
FOR_ENTITIES(i)
{
glTranslatef(miniMapPos.x, miniMapPos.y, 0);
const float sz = iconSize * iconScale;
glBegin(GL_QUADS);
glTexCoord2f(0, 1);
glVertex2f(-sz, sz);
glTexCoord2f(1, 1);
glVertex2f(sz, sz);
glTexCoord2f(1, 0);
glVertex2f(sz, -sz);
glTexCoord2f(0, 0);
glVertex2f(-sz, -sz);
glEnd();
glTranslatef(-miniMapPos.x, -miniMapPos.y, 0);
Entity *e = *i;
if(e->minimapIcon)
renderIcon(e->minimapIcon, e->position);
}
}
}
}
texRipple->unbind();
}
glColor4f(1,1,1, alphaValue);
@ -786,6 +759,49 @@ void MiniMapRender::onRender()
glBindTexture(GL_TEXTURE_2D, 0);
#endif
}
void MiniMapRender::renderIcon(MinimapIcon *ico, const Vector& pos)
{
if(!ico->tex)
return;
Vector d = pos - dsq->game->avatar->position;
const float len = d.getLength2D();
float iconScale = 1;
if (len >= iconMaxOffset)
{
d *= iconMaxOffset / len; // clamp to outer circle distance
if(ico->scaleWithDistance)
{
float k;
if (len < iconMaxDistance)
k = ((iconMaxDistance - len) / (iconMaxDistance - iconMaxOffset));
else
k = 0;
iconScale = iconMinScale + k*(1-iconMinScale);
}
}
ico->tex->apply();
const Vector c = ico->color;
const float a = ico->alpha.x * this->alpha.x;
glColor4f(c.x, c.y, c.z, a);
const Vector miniMapPos = Vector(d)*Vector(1.0f/miniMapScale, 1.0f/miniMapScale);
const float factor = sinf(game->getTimer()*PI);
const float addSize = factor * ico->throbMult;
const Vector sz = (ico->size + Vector(addSize, addSize)) * iconScale;
glPushMatrix();
glTranslatef(miniMapPos.x, miniMapPos.y, 0);
glBegin(GL_QUADS);
glTexCoord2f(0, 1);
glVertex2f(-sz.x, sz.y);
glTexCoord2f(1, 1);
glVertex2f(sz.x, sz.y);
glTexCoord2f(1, 0);
glVertex2f(sz.x, -sz.y);
glTexCoord2f(0, 0);
glVertex2f(-sz.x, -sz.y);
glEnd();
glPopMatrix();
}

View file

@ -154,9 +154,10 @@ void ModDL::GetModlist(const std::string& url, bool allowChaining, bool first)
}
else
{
std::string host, dummy_file;
std::string host, dummy_file, dummy_protocol;
int dummy_port;
minihttp::SplitURI(url, host, dummy_file, dummy_port);
bool dummy_useSSL;
minihttp::SplitURI(url, dummy_protocol, host, dummy_file, dummy_port, dummy_useSSL);
stringToLower(host);
if(knownServers.find(host) != knownServers.end())
{

View file

@ -41,8 +41,13 @@ static bool _modname_cmp(const ModIcon *a, const ModIcon *b)
return a->fname < b->fname;
}
ModSelectorScreen::ModSelectorScreen() : Quad(), ActionMapper(),
currentPanel(-1), gotServerList(false), dlText(&dsq->smallFont), subtext(&dsq->subsFont)
ModSelectorScreen::ModSelectorScreen()
: Quad()
, ActionMapper()
, dlText(&dsq->smallFont)
, gotServerList(false)
, currentPanel(-1)
, subtext(&dsq->subsFont)
{
followCamera = 1;
shareAlphaWithChildren = false;
@ -131,7 +136,7 @@ void ModSelectorScreen::showPanel(int id)
if(id == currentPanel)
return;
const float t = 0.2f;
//const float t = 0.2f;
IconGridPanel *newgrid = panels[id];
// fade in selected panel
@ -478,7 +483,11 @@ void BasicIcon::onClick()
dsq->sound->playSfx("denied");
}
MenuIcon::MenuIcon(int id) : SubtitleIcon(), iconId(id), cb(0), cb_data(0)
MenuIcon::MenuIcon(int id)
: SubtitleIcon()
, cb(0)
, cb_data(0)
, iconId(id)
{
}
@ -614,7 +623,13 @@ void ModIcon::updateStatus()
ModIconOnline::ModIconOnline()
: SubtitleIcon(), pb(0), extraIcon(0), statusIcon(0), clickable(true), pkgtype(MPT_MOD), hasUpdate(false)
: SubtitleIcon()
, pb(0)
, extraIcon(0)
, statusIcon(0)
, pkgtype(MPT_MOD)
, clickable(true)
, hasUpdate(false)
{
label = desc;
}
@ -872,7 +887,7 @@ void MenuIconBar::add(MenuIcon *ico)
}
IconGridPanel::IconGridPanel()
: spacing(0), y(0), x(0)
: spacing(0), x(0), y(0)
{
shareAlphaWithChildren = false; // patch selection icons need their own alpha, use fade() instead
alphaMod = 0.01f;

View file

@ -2,7 +2,7 @@
#include "DSQ.h"
#include "Network.h"
#include "ByteBuffer.h"
//#include "VFSTools.h"
#include "MT.h"
#include <map>
#include <set>
@ -44,7 +44,7 @@ public:
protected:
virtual void _OnClose()
{
//puts("_OnClose()");
minihttp::HttpSocket::_OnClose();
const Request& r = GetCurrentRequest();
@ -57,10 +57,10 @@ protected:
}
virtual void _OnOpen()
{
//puts("_OnOpen()");
minihttp::HttpSocket::_OnOpen();
const Request& r = GetCurrentRequest();
//const Request& r = GetCurrentRequest();
// TODO ??
}
@ -68,7 +68,7 @@ protected:
{
const Request& r = GetCurrentRequest();
RequestData *data = (RequestData*)(r.user);
//printf("_OnRequestDone(): %s\n", r.resource.c_str());
if(data->fp)
{
fclose(data->fp);
@ -87,15 +87,11 @@ protected:
notifyRequests.push(RequestDataHolder(data));
}
virtual void _OnRecv(char *buf, unsigned int size)
virtual void _OnRecv(void *buf, unsigned int size)
{
if(!size)
return;
/*if(GetStatusCode() != minihttp::HTTP_OK)
{
printf("NETWORK: Got %u bytes with status code %u", size, GetStatusCode());
return;
}*/
const Request& r = GetCurrentRequest();
RequestData *data = (RequestData*)(r.user);
if(!data->fp && !data->fail)
@ -200,7 +196,7 @@ static HttpDumpSocket *th_CreateSocket()
static bool th_DoSendRequest(RequestData *rq)
{
Request get;
SplitURI(rq->url, get.host, get.resource, get.port);
SplitURI(rq->url, get.protocol, get.host, get.resource, get.port, get.useSSL);
if(get.port < 0)
get.port = 80;
@ -210,7 +206,7 @@ static bool th_DoSendRequest(RequestData *rq)
HttpDumpSocket *sock = th_CreateSocket();
get.user = rq;
return sock->SendGet(get, false);
return sock->SendRequest(get, false);
}
static int _NetworkWorkerThread(void *)

View file

@ -46,8 +46,8 @@ void ParticleEditor::applyState()
addAction(MakeFunctionEvent(ParticleEditor, load), KEY_F1, 0);
addAction(MakeFunctionEvent(ParticleEditor, reload), KEY_F5, 0);
//addAction(MakeFunctionEvent(ParticleEditor, start), KEY_F5, 0);
//addAction(MakeFunctionEvent(ParticleEditor, stop), KEY_F6, 0);
addAction(MakeFunctionEvent(ParticleEditor, start), MOUSE_BUTTON_LEFT, 0);
addAction(MakeFunctionEvent(ParticleEditor, stop), MOUSE_BUTTON_RIGHT, 0);
@ -64,8 +64,8 @@ void ParticleEditor::applyState()
core->cameraPos = Vector(0,0);
emitter = new ParticleEffect;
//emitter->followCamera = 1;
//emitter->position = Vector(400,300);
addRenderObject(emitter, LR_ENTITIES);
dsq->overlay->alpha.interpolateTo(0, 0.5);

View file

@ -32,7 +32,6 @@ Path::Path()
pathShape = PATHSHAPE_RECT;
toFlip = -1;
replayVox = 0;
naijaHome = false;
addEmitter = false;
emitter = 0;
active = true;
@ -55,6 +54,7 @@ Path::Path()
spiritFreeze = true;
pauseFreeze = true;
activationRange = 800;
minimapIcon = 0;
}
void Path::clampPosition(Vector *pos, float radius)
@ -207,6 +207,9 @@ int Path::getDown()
void Path::destroy()
{
delete minimapIcon;
minimapIcon = NULL;
if (emitter)
{
emitter->safeKill();
@ -346,6 +349,11 @@ void Path::refreshScript()
else if (label == "cook")
{
pathType = PATH_COOK;
ensureMinimapIcon();
minimapIcon->setTexture("gui/icon-food");
minimapIcon->size = Vector(16, 16);
minimapIcon->scaleWithDistance = false;
minimapIcon->throbMult = 0.0f;
}
else if (label == "zoom")
{
@ -371,6 +379,10 @@ void Path::refreshScript()
else if (label == "savepoint")
{
pathType = PATH_SAVEPOINT;
ensureMinimapIcon();
minimapIcon->setTexture("gui/minimap/ripple");
minimapIcon->color = Vector(1, 0, 0);
minimapIcon->alpha = 0.75f;
}
else if (label == "steam")
{
@ -405,6 +417,10 @@ void Path::refreshScript()
else if (type == "out")
localWarpType = LOCALWARP_OUT;
pathType = PATH_WARP;
ensureMinimapIcon();
minimapIcon->setTexture("gui/minimap/ripple");
minimapIcon->alpha = 0.75f;
}
else if (label == "vox" || label == "voice")
{
@ -422,10 +438,12 @@ void Path::refreshScript()
// warpType is just char, which does not automatically skip spaces like strings would
warpType = warpTypeStr.length() ? warpTypeStr[0] : 0;
ensureMinimapIcon();
minimapIcon->setTexture("gui/minimap/ripple");
minimapIcon->alpha = 0.75f;
if (warpMap.find("vedha")!=std::string::npos)
{
naijaHome = true;
}
minimapIcon->color = Vector(1.0f, 0.9f, 0.2f);
pathType = PATH_WARP;
}
else if (label == "se")
@ -436,20 +454,15 @@ void Path::refreshScript()
spawnEnemyDistance = 0;
is >> dummy >> spawnEnemyName >> spawnEnemyDistance >> spawnEnemyNumber;
neverSpawned = true;
/*
if (!spawnedEntity && !nodes.empty())
{
spawnedEntity = dsq->game->createEntity(spawnEnemyName, 0, nodes[0].position, 0, false, "");
}
*/
}
else if (label == "pe")
{
std::string dummy, particleEffect;
SimpleIStringStream is(name);
is >> dummy >> particleEffect;
//core->removeRenderObject(&emitter, Core::DO_NOT_DESTROY_RENDER_OBJECT);
//core->getTopStateData()->addRenderObject(&emitter, LR_PARTICLES);
setEmitter(particleEffect);
}
@ -489,6 +502,9 @@ void Path::init()
void Path::update(float dt)
{
if(minimapIcon)
minimapIcon->update(dt);
if (!(pauseFreeze && dsq->game->isPaused()) && !(spiritFreeze && dsq->game->isWorldPaused()))
{
if (addEmitter && emitter)
@ -531,10 +547,7 @@ void Path::update(float dt)
if (pathType == PATH_CURRENT && !dsq->game->isWorldPaused())
{
animOffset -= currentMod*(dt/830);
/*
while (animOffset < -1.0f)
animOffset += 1.0f;
*/
}
if (pathType == PATH_GEM && dsq->game->avatar)
{
@ -574,18 +587,12 @@ void Path::update(float dt)
Vector start = nodes[0].position;
Vector end = nodes[1].position;
Vector v = end - start;
Vector left = v.getPerpendicularLeft();
Vector right = v.getPerpendicularRight();
Vector mid = (end-start) + start;
FOR_ENTITIES(i)
{
Entity *e = *i;
if (e)
{
/*
if (e->getEntityType() == ET_AVATAR && dsq->continuity.form == FORM_SPIRIT)
continue;
*/
if (dsq->game->collideCircleVsLine(e, start, end, rect.getWidth()*0.5f))
{
if (e->getEntityType() == ET_AVATAR)
@ -600,24 +607,13 @@ void Path::update(float dt)
d.damage = 0.1;
d.damageType = DT_STEAM;
e->damage(d);
//a->position = a->lastPosition;
}
Vector push;
push = e->position - dsq->game->lastCollidePosition;
// old method:
/*
int d1 = ((mid + left)-e->position).getSquaredLength2D();
if (((mid + right)-e->position).getSquaredLength2D() < d1)
{
push = right;
}
else
{
push = left;
}
*/
push.setLength2D(1000*dt);
if (e->vel2.isLength2DIn(1000) && !e->isNearObstruction(3))
@ -629,11 +625,7 @@ void Path::update(float dt)
if (dsq->game->collideCircleVsLine(e, start, end, rect.getWidth()*0.25f))
{
push.setLength2D(100);
/*
Vector oldVel = e->vel;
Vector nvel = v;
nvel.setLength2D(e->vel);
*/
e->vel = 0;
e->vel += push;
}
@ -731,3 +723,10 @@ void Path::luaDebugMsg(const std::string &func, const std::string &msg)
{
debugLog("luaScriptError: Path [" + name + "]: " + func + " : " + msg);
}
MinimapIcon *Path::ensureMinimapIcon()
{
if(!minimapIcon)
minimapIcon = new MinimapIcon;
return minimapIcon;
}

View file

@ -28,6 +28,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#undef PATH_MAX // May be set by a system header.
struct MinimapIcon;
class PathNode
{
public:
@ -107,11 +109,14 @@ public:
void activate(Entity *e=0);
void refreshScript();
MinimapIcon *ensureMinimapIcon();
Script *script;
bool updateFunction;
bool activateFunction;
bool cursorActivation;
int replayVox;
MinimapIcon *minimapIcon;
std::string warpMap, warpNode, vox, spawnEnemyName, content;
float amount, time;
@ -130,7 +135,6 @@ public:
LocalWarpType localWarpType;
bool naijaHome;
bool catchActions;
bool songFunc, songNoteFunc, songNoteDoneFunc;
bool neverSpawned;

View file

@ -28,7 +28,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
class SearchGridRaw
{
public:
SearchGridRaw(ObsType blocking) : game(dsq->game), blockingObsBits(blocking) {}
SearchGridRaw(ObsType blocking) : blockingObsBits(blocking), game(dsq->game) {}
inline bool operator()(unsigned x, unsigned y) const
{
return (game->getGridRaw(TileVector(x, y)) & blockingObsBits) == OT_EMPTY;
@ -58,7 +58,7 @@ void PathFinding::forceMinimumPath(VectorPath &path, const Vector &start, const
{
if (path.getNumPathNodes() <= 2)
{
//debugLog(" Path is <= 2 nodes... setting up simple path");
path.clear();
path.addPathNode(start, 0);
path.addPathNode(dest, 1);
@ -79,8 +79,7 @@ void PathFinding::molestPath(VectorPath &path)
{
Vector node = path.getPathNode(i)->value;
float dist;
int sample = 20;
float maxDist = sample * TILE_SIZE;
const int sample = 20;
{
Vector n = dsq->game->getWallNormal(node, sample, &dist);
if (dist != -1 && (n.x != 0 || n.y != 0))
@ -210,18 +209,19 @@ void PathFinding::beginFindPath(PathFinding::State *state, const Vector& start,
obs = OT_BLOCKING;
state->grid.blockingObsBits = (ObsType)obs;
JPS::Position istart = JPS::Pos(start.x, start.y);
JPS::Position iend = JPS::Pos(end.x, end.y);
TileVector tstart(start);
TileVector tend(end);
JPS::Position istart = JPS::Pos(tstart.x, tstart.y);
JPS::Position iend = JPS::Pos(tend.x, tend.y);
state->result = state->searcher.findPathInit(istart, iend);
}
bool PathFinding::updateFindPath(PathFinding::State *state, int limit)
{
int oldres = state->result;
if(oldres == JPS::NEED_MORE_STEPS)
if(state->result == JPS::NEED_MORE_STEPS)
{
state->result = state->searcher.findPathStep(limit);
return oldres != state->result;
return state->result != JPS::NEED_MORE_STEPS;
}
return true; // done
}
@ -229,7 +229,7 @@ bool PathFinding::updateFindPath(PathFinding::State *state, int limit)
bool PathFinding::finishFindPath(PathFinding::State *state, VectorPath& path, unsigned step /* = 0 */)
{
if(state->result != JPS::FOUND_PATH)
return false;
return state->result == JPS::EMPTY_PATH;
JPS::PathVector rawpath;
state->searcher.findPathFinish(rawpath, step);
@ -238,6 +238,11 @@ bool PathFinding::finishFindPath(PathFinding::State *state, VectorPath& path, un
return true;
}
void PathFinding::purgeFindPath(PathFinding::State *state)
{
state->searcher.freeMemory();
}
void PathFinding::getStats(PathFinding::State *state, unsigned& stepsDone, unsigned& nodesExpanded)
{
stepsDone = (unsigned)state->searcher.getStepsDone();

View file

@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define PATHFINDING_H
#include "../BBGE/Base.h"
//#include "Astar.h"
#include "TileVector.h"
#include <assert.h>
@ -47,6 +47,7 @@ namespace PathFinding
bool updateFindPath(State *state, int limit);
bool finishFindPath(State *state, VectorPath& path, unsigned step = 0);
void getStats(State *state, unsigned& stepsDone, unsigned& nodesExpanded);
void purgeFindPath(PathFinding::State *state);
};
#endif

View file

@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
PathRender::PathRender() : RenderObject()
{
//color = Vector(1, 0, 0);
position.z = 5;
cull = false;
alpha = 0.5f;
@ -30,7 +30,6 @@ PathRender::PathRender() : RenderObject()
void PathRender::onRender()
{
#ifdef BBGE_BUILD_OPENGL
const int pathcount = dsq->game->getNumPaths();
if (pathcount <= 0)
return;
@ -109,5 +108,4 @@ void PathRender::onRender()
glPopMatrix();
}
}
#endif
}

View file

@ -40,8 +40,8 @@ using namespace RecipeMenuNamespace;
RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe)
{
selected = 0;
// Quad *result, *i1, *i2, *i3;
// Recipe *recipe;
data = dsq->continuity.getIngredientDataByName(recipe->result);
if (data)
@ -70,7 +70,7 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
addChild(equals, PM_POINTER);
int c = 0;
//int size = (recipe->names.size() + recipe->types.size())-1;
int size=0;
for (int i = 0; i < recipe->names.size(); i++)
@ -120,14 +120,14 @@ RecipeMenuEntry::RecipeMenuEntry(Recipe *recipe) : RenderObject(), recipe(recipe
for (int i = 0; i < recipe->types.size(); i++)
{
//debugLog("recipe type: " + recipe->types[i].typeName);
for (int j = 0; j < recipe->types[i].amount; j++)
{
// any type of whatever...
BitmapText *text = new BitmapText(&dsq->smallFont);
text->color = 0;
text->scale = Vector(0.8, 0.8);
text->position = Vector(100*c, 0); //-20
text->position = Vector(100*c, 0);
std::string typeName = dsq->continuity.getIngredientDisplayName(recipe->types[i].typeName);
@ -180,15 +180,15 @@ void RecipeMenuEntry::onUpdate(float dt)
glow->alphaMod = 0.2;
std::ostringstream ds;
//ds << data->name << ": ";
//ds << "* ";
for (int i = 0; i < data->effects.size(); i++)
{
ds << dsq->continuity.getIEString(data, i);
if (i == data->effects.size()-1)
{
// do nothing
//ds << ".";
}
else
{
@ -198,7 +198,7 @@ void RecipeMenuEntry::onUpdate(float dt)
game->recipeMenu.description->setText(ds.str());
game->recipeMenu.description->offset = Vector(0, -10 * (game->recipeMenu.description->getNumLines()-1));
// description->setText(ds.str());
selected = 1;
}
else
@ -235,7 +235,7 @@ void RecipeMenu::slide(RenderObject *r, bool in, float t)
if (in)
{
r->alpha = 1;
//r->alpha.interpolateTo(1, 0.2);
r->offset = Vector(0,oy);
r->offset.interpolateTo(Vector(0,0), t, 0, 0, 1);
}
@ -261,15 +261,10 @@ int RecipeMenu::getNumKnown()
int RecipeMenu::getNumPages()
{
int numKnown = dsq->continuity.recipes.size();//getNumKnown();
int numKnown = dsq->continuity.recipes.size();
int numPages = (numKnown/pageSize);
/*
for (int i = 0; i < dsq->continuity.recipes.size(); i++)
{
debugLog("r: " + dsq->continuity.recipes[i].result);
}
*/
std::ostringstream os;
os << "numKnown: " << numKnown << " pagesSize: " << pageSize << " numPages: " << numPages;
@ -395,7 +390,7 @@ void RecipeMenu::createPage(int p)
{
RecipeMenuEntry *r = new RecipeMenuEntry(&dsq->continuity.recipes[i]);
recipeMenuEntries.push_back(r);
//80 + num * 70
r->position = Vector(500-5, 65 + num * 70);
dsq->game->addRenderObject(r, scroll->layer);
num++;

View file

@ -93,7 +93,6 @@ std::string getMapTemplateFilename()
void WarpAreaRender::onRender()
{
#ifdef BBGE_BUILD_OPENGL
for (int i = 0; i < dsq->game->warpAreas.size(); i++)
{
WarpArea *a = &dsq->game->warpAreas[i];
@ -141,53 +140,6 @@ void WarpAreaRender::onRender()
}
glTranslatef(-a->position.x, -a->position.y,0);
}
#endif
#ifdef BBGE_BUILD_DIRECTX
for (int i = 0; i < dsq->game->warpAreas.size(); i++)
{
WarpArea *a = &dsq->game->warpAreas[i];
core->translateMatrixStack(a->position.x, a->position.y);
switch (a->warpAreaType[0])
{
case 'B':
core->setColor(0, 0, 1, alpha.x);
break;
case 'R':
core->setColor(1,0,0,alpha.x);
break;
case 'G':
core->setColor(0,1,0,alpha.x);
break;
case 'Y':
core->setColor(1,1,0,alpha.x);
break;
case 'P':
core->setColor(1,0,1,alpha.x);
break;
}
if (a->radius)
{
// drawCircle(a->radius);
}
else
{
core->applyMatrixStackToWorld();
core->blitD3D(0, a->w*2, a->h*2);
/*
glBegin(GL_QUADS);
{
glVertex2f(-a->w,-a->h);
glVertex2f(-a->w,a->h);
glVertex2f(a->w,a->h);
glVertex2f(a->w,-a->h);
}
glEnd();
*/
}
core->translateMatrixStack(-a->position.x, -a->position.y);
//glTranslatef(-a->position.x, -a->position.y,0);
}
#endif
}
SceneEditor::SceneEditor() : ActionMapper(), on(false)
@ -217,8 +169,8 @@ void SceneEditor::changeDepth()
{
if (editingElement)
{
//editingElement->parallax = 0.9;
//editingElement->followCamera = 0.001;
editingElement->followCamera = 0.9;
editingElement->cull = false;
}
@ -280,7 +232,7 @@ public:
if (doubleClickTimer > 0)
doubleClickTimer -= dt;
Quad::onUpdate(dt);
//if ()
if (dsq->game->sceneEditor.selectedEntity.name == selectedEntity.name
|| (entType != -1 && dsq->game->sceneEditor.selectedEntity.typeListIndex == entType))
@ -311,7 +263,7 @@ public:
{
dsq->game->sceneEditor.selectedEntity.setName(selectedEntity.name, selectedEntity.prevGfx);
}
//se_changedEntityType = true;
if (doubleClickTimer > 0)
{
doubleClickTimer = 0;
@ -486,11 +438,7 @@ void SceneEditor::addMainMenuItem(const std::string &label, int bid)
void SceneEditor::openMainMenu()
{
/*
core->clearDebugMenu();
core->addDebugMenuItem("", bid);
core->doModalDebugMenu();
*/
if (core->getNestedMains()>1)
{
@ -520,12 +468,9 @@ void SceneEditor::openMainMenu()
addMainMenuItem("EDIT NODES (F7)", 108);
addMainMenuItem("REGEN COLLISIONS (ALT-R)", 103);
addMainMenuItem("RECACHE TEXTURES (CTRL-R)", 130);
// addMainMenuItem("REFRESH DATAFILES (F11)", 117);
addMainMenuItem("REGEN ROCK FROM MAPTEMPLATE (F11+F12)", 116);
/*
addMainMenuItem("RE-TEMPLATE (F11)", 104);
addMainMenuItem("RE-SKIN (F12)", 105);
*/
addMainMenuItem("SET BG GRADIENT", 110);
addMainMenuItem("SET MUSIC", 111);
addMainMenuItem("ENTITY GROUPS (CTRL-E)", 112);
@ -589,7 +534,7 @@ void SceneEditor::init()
btnMenu->label->setText("Menu");
btnMenu->followCamera = 1;
btnMenu->alpha = 0;
//btnMenu->event.set(MakeFunctionEvent(SceneEditor, openMainMenu));
dsq->game->addRenderObject(btnMenu, LR_HUD);
selectedEntityType = 0;
@ -601,7 +546,7 @@ void SceneEditor::init()
text->followCamera = 1;
text->position = Vector(125,20,4.5);
//text->setAlign(ALIGN_CENTER);
dsq->game->addRenderObject(text, LR_HUD);
text->alpha = 0;
selectedVariation = -1;
@ -613,13 +558,12 @@ void SceneEditor::init()
dsq->game->addRenderObject(boxPromo, LR_HUD);
on = false;
//addAction(MakeFunctionEvent(SceneEditor, addSpringPlant), KEY_K, 0);
addAction(MakeFunctionEvent(SceneEditor, loadScene), KEY_F1, 0);
addAction(MakeFunctionEvent(SceneEditor, saveScene), KEY_F2, 0);
// removed in fc3
//addAction(MakeFunctionEvent(SceneEditor, setGroup), KEY_G, 0);
addAction(MakeFunctionEvent(SceneEditor, moveToBack), KEY_Z, 0);
addAction(MakeFunctionEvent(SceneEditor, moveToFront), KEY_X, 0);
@ -640,12 +584,6 @@ void SceneEditor::init()
/*
addAction(MakeFunctionEvent(SceneEditor, placeEntity), KEY_U, 0);
addAction(MakeFunctionEvent(SceneEditor, removeEntity), KEY_I, 0);
*/
//addAction(MakeFunctionEvent(SceneEditor, changeDepth), KEY_N, 0);
addAction(MakeFunctionEvent(SceneEditor, placeElement), KEY_SPACE, 1);
addAction(MakeFunctionEvent(SceneEditor, enterName), KEY_N, 0);
@ -667,7 +605,7 @@ void SceneEditor::init()
addAction(MakeFunctionEvent(SceneEditor, generateLevel), KEY_F11, 0);
addAction(MakeFunctionEvent(SceneEditor, skinLevel), KEY_F12, 0);
//addAction(MakeFunctionEvent(SceneEditor, regenLevel), KEY_F12, 0);
addAction(MakeFunctionEvent(SceneEditor, nextEntityType), KEY_RIGHT, 0);
addAction(MakeFunctionEvent(SceneEditor, prevEntityType), KEY_LEFT, 0);
@ -699,17 +637,6 @@ void SceneEditor::init()
addAction(MakeFunctionEvent(SceneEditor, dumpObs), KEY_F8, 0);
/*
// OLD CRAP
addAction(MakeFunctionEvent(SceneEditor, rotateElement), KEY_MULTIPLY, 0);
addAction(MakeFunctionEvent(SceneEditor, rotateElement2), KEY_DIVIDE, 0);
addAction(MakeFunctionEvent(SceneEditor, scaleElementUp), KEY_NUMPAD7, 0);
addAction(MakeFunctionEvent(SceneEditor, scaleElementDown), KEY_NUMPAD1, 0);
addAction(MakeFunctionEvent(SceneEditor, scaleElement1), KEY_NUMPAD0, 0);
addAction(MakeFunctionEvent(SceneEditor, nextVariation), KEY_UP, 0);
addAction(MakeFunctionEvent(SceneEditor, prevVariation), KEY_DOWN, 0);
*/
addAction(ACTION_ZOOMIN, KEY_PGUP);
addAction(ACTION_ZOOMOUT, KEY_PGDN);
@ -844,10 +771,10 @@ void SceneEditor::alignVert()
void SceneEditor::createAquarian()
{
//if (dsq->mod.isActive()) return;
static bool inCreateAqurian = false;
if (inCreateAqurian) return;
//if (dsq->game->isPaused()) return;
inCreateAqurian = true;
std::string t = dsq->getUserInputString("Enter Aquarian:", "");
stringToUpper(t);
@ -863,7 +790,7 @@ void SceneEditor::createAquarian()
{
v = 1024+26;
}
//ElementTemplate et = dsq->game->getElementTemplateForLetter(v);
dsq->game->createElement(v, startPos + Vector(64*i,0), this->bgLayer);
}
inCreateAqurian = false;
@ -935,7 +862,7 @@ void SceneEditor::toggleWarpAreaRender()
warpAreaRender->alpha.x = 0.5;
else if (warpAreaRender->alpha.x >= 0.5f)
warpAreaRender->alpha.x = 0;
//warpAreaRender->alpha.interpolateTo(1, 0.2);
}
@ -1038,7 +965,7 @@ void SceneEditor::editModeEntities()
//target->alpha.interpolateTo(0, 0.5);
editType = ET_ENTITIES;
//dsq->game->entityTypeList[curEntity].prevGfx
placer->setTexture(selectedEntity.prevGfx);
placer->alpha = 0.5;
pathRender->alpha = 0;
@ -1066,7 +993,7 @@ Element *SceneEditor::getElementAtCursor()
{
if (e->life == 1)
{
if (e->isCoordinateInside(dsq->getGameCursorPosition()))//, minSelectionSize
if (e->isCoordinateInside(dsq->getGameCursorPosition()))
{
Vector v = dsq->getGameCursorPosition() - e->position;
int dist = v.getSquaredLength2D();
@ -1157,11 +1084,8 @@ void SceneEditor::deleteSelected()
}
else
p->removeNode(selectedNode);
/*
if (p->nodes.size() > 1)
p->nodes.resize(p->nodes.size()-1);
*/
//selectedIdx = -1;
}
}
}
@ -1362,11 +1286,7 @@ void SceneEditor::updateEntitySaveData(Entity *editingEntity)
{
if (editingEntity)
{
/*
std::ostringstream os;
os << "oldPos (" << oldPosition.x << ", " << oldPosition.y << ")";
debugLog(os.str());
*/
EntitySaveData *d = dsq->game->getEntitySaveDataForEntity(editingEntity, oldPosition);
if (d)
{
@ -1374,22 +1294,18 @@ void SceneEditor::updateEntitySaveData(Entity *editingEntity)
os << "idx1: " << d->idx << " ";
os << "idx2: " << editingEntity->entityTypeIdx << " ";
os << "name: " << editingEntity->name;
//os << "state: " << editingEntity->getState();
debugLog(os.str());
//debugLog("changing entity save data");
d->x = editingEntity->position.x;
d->y = editingEntity->position.y;
editingEntity->startPos = Vector(d->x, d->y);
/*
std::ostringstream os2;
os2 << "setting savedata rot to: " << d->rot;
debugLog(os2.str());
*/
d->rot = editingEntity->rotation.z;
}
else
{
//debugLog("didn't get entity save data");
}
}
}
@ -1458,7 +1374,7 @@ void SceneEditor::mouseButtonRightUp()
checkForRebuild();
}
state = ES_SELECTING;
//dsq->game->reconstructGrid();
}
@ -1664,7 +1580,7 @@ bool getGrassPixel(pngRawInfo *png, int x, int y)
{
if (x >= png->Width || y >= png->Height || x < 0 || y < 0) return false;
//int c = ((x*png->Width)*3)+y*3;
int c = (y*png->Width)*png->Components + x*png->Components;
if (png->Data[c] == 128 &&
png->Data[c+1] == 255 &&
@ -1738,21 +1654,15 @@ void SceneEditor::skinLevel(pngRawInfo *png, int minX, int minY, int maxX, int m
)
)
{
// do color check
/*
int ci = x+(y*png->Height);
if (png->data[ci] < pixelColor.x &&
png->data[ci+1] < pixelColor.y &&
png->data[ci+2] < pixelColor.z)
{
*/
float dist=0;
wallNormal = dsq->game->getWallNormal(t.worldVector(), 5, &dist, OT_MASK_BLACK);
offset = wallNormal*(-TILE_SIZE*0.6f);
MathFunctions::calculateAngleBetweenVectorsInDegrees(Vector(0,0,0), wallNormal, rot);
rot = 180-(360-rot);
addTile = true;
//}
}
if (addTile)
@ -1788,7 +1698,7 @@ void SceneEditor::skinLevel(pngRawInfo *png, int minX, int minY, int maxX, int m
Element *e = dsq->getElement(i);
if (e->templateIdx <= 4 && e->templateIdx >= 1)
{
if ((p - e->position).getSquaredLength2D() < sqr(120))//sqr(60*3+10)) // 120
if ((p - e->position).getSquaredLength2D() < sqr(120))
{
cantUse[e->templateIdx-1]++;
}
@ -1811,40 +1721,6 @@ void SceneEditor::skinLevel(pngRawInfo *png, int minX, int minY, int maxX, int m
e->offset = offset;
/*
bool addGrass = false;
int search = 2;
for (int dx = -search; dx < search; dx++)
{
for (int dy = -search; dy < search; dy++)
{
if (getGrassPixel(png, x+dx, y+dy))
{
//std::ostringstream os;
//os << "found grass pixel at (" << x+dx << ", " << y+dy << ")";
//debugLog(os.str());
//errorLog ("add grass");
addGrass = true;
break;
}
}
}
if (addGrass)
{
//Vector detailPos = p + wallNormal*48;
Element *grassE = dsq->game->createElement(5, p, 0, &q);
//dsq->game->createElement(5, detailPos, 6, &q);
//grassE->offset = offset;
}
*/
/*
float sz = ((rand()%1000)/4000.0f);
e->scale = Vector(1+sz, 1+sz, 1);
*/
idx++;
if(idx > 4)
@ -1864,24 +1740,13 @@ void SceneEditor::skinLevel(pngRawInfo *png, int minX, int minY, int maxX, int m
}
}
void SceneEditor::fixEntityIDs()
{
FOR_ENTITIES(i)
{
Entity *e = *i;
e->assignUniqueID();
}
}
void SceneEditor::generateLevel()
{
//pngSetStandardOrientation(0);
std::string file=getMapTemplateFilename();
//pngInfo info;
//PNG_ALPHA
//errorLog("generate level");
// Y R G B P
std::string file=getMapTemplateFilename();
int maxX=0, maxY=0;
const int YELLOW=0, RED=1, GREEN=2, BLUE=3, PURPLE=4, ORANGE=5, BROWN=6, MAX=7;
int firstColorX[MAX], firstColorY[MAX];
@ -1903,10 +1768,10 @@ void SceneEditor::generateLevel()
bool success = pngLoadRaw(file.c_str(), &rawinfo);
if (success)
{
//dsq->elements.clear();
std::vector<Row> rows;
std::vector<Vector> positions;
const int maxRowCount = 9999;//9999;//9999;
const int maxRowCount = 9999;
int rowCount = 0;
if (rawinfo.Components < 3)
{
@ -1914,7 +1779,7 @@ void SceneEditor::generateLevel()
}
int scale = TILE_SIZE;
int c = 0;
//for (int y = rawinfo.Height-1; y >= 0; y--)
for (int y = 0; y < rawinfo.Height; y++)
{
Vector lastElement;
@ -1959,7 +1824,7 @@ void SceneEditor::generateLevel()
}
for (int i = 0; i < MAX; i++)
{
//if (checkWarpPixel(rawinfo.Data, c, colorVects[i]))
bool p1, p2, p3;
p1=p2=p3=false;
int diff;
@ -1969,25 +1834,7 @@ void SceneEditor::generateLevel()
p2 = (diff < 5);
diff = fabsf((colorVects[i].z*255) - rawinfo.Data[c+2]);
p3 = (diff < 5);
/*
p1 = (colorVects[i].x == 1 && rawinfo.Data[c] > 200);
if (!p1)
{
p1 = (colorVects[i].x == 0 && rawinfo.Data[c] < 32);
}
p2 = (colorVects[i].y == 1 && rawinfo.Data[c+1] > 200);
if (!p2)
{
p2 = (colorVects[i].y == 0 && rawinfo.Data[c+1] < 32);
if (!p2)
{
p2 = (colorVects[i].y == 0.5f && rawinfo.Data[c+1] > 96 && rawinfo.Data[c+1] < 164);
}
}
p3 = (colorVects[i].z == 1 && rawinfo.Data[c+2] > 200);
if (!p3)
p3 = (colorVects[i].z == 0 && rawinfo.Data[c+2] < 32);
*/
if (p1 && p2 && p3)
{
lastColorX[i] = x;
@ -1999,63 +1846,25 @@ void SceneEditor::generateLevel()
}
}
}
/*
else if (checkPixel(1, 0, 0))
{
lastColorX[RED] = x;
lastColorY[RED] = y;
if (firstColorX[RED] == -1)
{
firstColorX[RED] = x;
firstColorY[RED] = y;
}
}
*/
/*
else if ( rawinfo.Data[c] > 200 &&
rawinfo.Data[c+1] < 32 &&
rawinfo.Data[c+2] < 32)
{
}
else if (rawinfo.
*/
c += rawinfo.Components;
if ((e==0 && firstRowElement) || (firstRowElement && rowCount >= maxRowCount && hasLastElement)
|| (firstRowElement && x == rawinfo.Width-1))
{
/*
if (x == rawinfo.Width-1)
row.x2 = rawinfo.Width-1;
else
{
*/
// HACK: it crashes here:
// because lastElement is garbage data
// fixed!
if (hasLastElement)
row.x2 = lastElement.x;
//}
hasLastElement = false;
firstRowElement = 0;
bool add = true;
/*
for (int i = 0; i < rows.size(); i++)
{
if (rows[i].x1 == row.x1 && rows[i].x2 == row.x2)
{
if (abs(rows[i].y - row.y) <= TILE_SIZE+1)
{
rows[i].rows++;
add = false;
break;
}
}
}
*/
if (add)
rows.push_back(row);
}
@ -2082,7 +1891,7 @@ void SceneEditor::generateLevel()
for (i = 0; i < rows.size(); i++)
{
int w = rows[i].x2 - rows[i].x1;
//int h = scale * rows[i].rows;
int useY = rows[i].y;
if (rows[i].rows > 1)
{
@ -2140,7 +1949,7 @@ void SceneEditor::generateLevel()
this->skinMinY = 4;
this->skinMaxX = maxX;
this->skinMaxY = maxY;
//skinLevel(&rawinfo, 4, 4, maxX, maxY);
if (rawinfo.Data != NULL)
free(rawinfo.Data);
}
@ -2303,9 +2112,7 @@ void SceneEditor::action(int id, int state)
this->bgLayer = newLayer;
}
/*
Vector multiSelectPoint, secondMultiSelectPoint;
*/
if (id == ACTION_MULTISELECT && this->state == ES_SELECTING)
{
if (state)
@ -2407,7 +2214,7 @@ void destroyEntityPage()
}
if (se_grad)
{
//se_grad->safeKill();
se_grad->setLife(1);
se_grad->setDecayRate(10);
se_grad->fadeAlphaWithLife = 1;
@ -2430,8 +2237,8 @@ void createEntityPage()
destroyEntityPage();
se_grad = new Quad();
//Gradient()
//se_grad->makeHorizontal(Vector(0,0,0.3), Vector(0,0,0.1));
se_grad->scale = Vector(800, 500);
se_grad->position = Vector(400,350);
se_grad->followCamera = 1;
@ -2481,7 +2288,7 @@ void createEntityPage()
{
q->setWidthHeight((q->getWidth()*sizing) / q->getHeight(), sizing);
}
//q->setWidthHeight(sizing, sizing);
q->followCamera = 1;
dsq->game->addRenderObject(q, LR_HUD);
qs.push_back(q);
@ -2883,7 +2690,7 @@ void SceneEditor::cloneSelectedElement()
Element *e = dsq->game->createElement(e1->templateIdx, placer->position + Vector(40,40), e1->bgLayer, e1);
e->elementFlag = e1->elementFlag;
e->setElementEffectByIndex(e1->getElementEffectIndex());
//e->repeatTextureToFill(e1->isRepeatingTextureToFill());
}
dsq->game->reconstructGrid();
}
@ -2947,7 +2754,7 @@ void SceneEditor::toggle(bool on)
movingEntity = 0;
dsq->toggleCursor(true);
dsq->setCursor(CURSOR_NORMAL);
//core->flags.set(CF_CLEARBUFFERS);
dsq->darkLayer.toggle(false);
@ -2968,7 +2775,7 @@ void SceneEditor::toggle(bool on)
else
{
btnMenu->alpha = 0;
//dsq->game->reconstructGrid();
selectedElements.clear();
for (int i = 0; i < 9; i++)
dsq->getRenderObjectLayer(LR_ELEMENTS1+i)->visible = true;
@ -2985,7 +2792,7 @@ void SceneEditor::toggle(bool on)
dsq->game->avatar->enableInput();
text->alpha.interpolateTo(0, 0.2);
placer->alpha.interpolateTo(0, 0.2);
//core->flags.unset(CF_CLEARBUFFERS);
dsq->darkLayer.toggle(true);
dsq->game->rebuildElementUpdateList();
@ -3007,8 +2814,8 @@ void SceneEditor::updateText()
std::ostringstream os;
os << dsq->game->sceneName << " bgL[" << bgLayer << "] (" <<
(int)dsq->cameraPos.x << "," << (int)dsq->cameraPos.y << ") ("
//<< (int)dsq->game->avatar->position.x
//<< "," << (int)dsq->game->avatar->position.y << "," << (int)dsq->game->avatar->position.z << ")" << " ("
<< (int)dsq->getGameCursorPosition().x << "," << (int)dsq->getGameCursorPosition().y << ")" << " ";
switch(editType)
{
@ -3056,6 +2863,9 @@ void SceneEditor::updateText()
if (getSelectedPath())
os << " name: " << getSelectedPath()->name;
break;
case ET_SELECTENTITY:
case ET_MAX:
break;
}
text->setText(os.str());
}
@ -3185,6 +2995,10 @@ void SceneEditor::update(float dt)
else
placer->alpha = 0.5;
break;
case ET_PATHS:
case ET_SELECTENTITY:
case ET_MAX:
break;
}
updateText();
@ -3263,7 +3077,7 @@ void SceneEditor::update(float dt)
smallestDist = dist;
selectedIdx = i;
selectedNode = n;
//return;
}
}
}
@ -3292,6 +3106,9 @@ void SceneEditor::update(float dt)
if (selectedIdx >= 0)
dsq->game->getPath(selectedIdx)->nodes[selectedNode].position = dsq->getGameCursorPosition() + cursorOffset;
break;
case ES_ROTATING:
case ES_MAX:
break;
}
}
else if (editType == ET_ENTITIES)
@ -3319,6 +3136,11 @@ void SceneEditor::update(float dt)
}
}
}
break;
case ES_SELECTING:
case ES_SCALING:
case ES_MAX:
break;
}
}
else if (editType == ET_ELEMENTS)
@ -3386,7 +3208,7 @@ void SceneEditor::update(float dt)
else if (cursorOffset.x < oldPosition.x-10)
right = false;
else
noSide = 1;
noSide = true;
if (cursorOffset.y > oldPosition.y+10)
down = true;
else if (cursorOffset.y < oldPosition.y-10)
@ -3451,7 +3273,7 @@ void SceneEditor::update(float dt)
}
else
{
//editingElement->scale=oldScale + add;
editVec = (repeatScale ? oldRepeatScale : oldScale) + add;
if (!uni && !repeatScale)
{
@ -3484,6 +3306,8 @@ void SceneEditor::update(float dt)
}
}
break;
case ES_MAX:
break;
}
}
}
@ -3526,8 +3350,8 @@ void SceneEditor::prevEntityType()
void SceneEditor::dumpObs()
{
TileVector tv;
unsigned char *data = new unsigned char[MAX_GRID * MAX_GRID * sizeof(uint32)];
uint32 *ptr = (uint32*)data;
unsigned char *data = new unsigned char[MAX_GRID * MAX_GRID * sizeof(unsigned)];
unsigned *ptr = (unsigned*)data;
for(tv.y = MAX_GRID - 1; ; --tv.y)
{
for(tv.x = 0; tv.x < MAX_GRID; ++tv.x)

View file

@ -25,10 +25,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
const float strengthSeparation = 1;
const float strengthAlignment = 0.8f;
const float strengthAvoidance = 1;
//const float strengthAvoidance = 1;
const float strengthCohesion = 0.5f;
const float avoidanceDistance = 128;
//const float avoidanceDistance = 128;
const float separationDistance = 128;
const float minUrgency = 5;//0.05;
const float maxUrgency = 10;//0.1;
@ -50,12 +50,8 @@ SchoolFish::SchoolFish(const std::string &texname) : FlockEntity()
float randScale = float(rand()%200)/1000.0f;
scale = Vector(0.6f-randScale, 0.6f-randScale);
/*
float randColor = float(rand()%250)/1000.0f;
color = Vector(1-randColor, 1-randColor, 1-randColor);
*/
//color.interpolateTo(Vector(0.5, 0.5, 0.5), 2, -1, 1);
color.ensureData();
color.data->path.addPathNode(Vector(1,1,1), 0);
color.data->path.addPathNode(Vector(1,1,1), 0.5);
@ -72,30 +68,24 @@ SchoolFish::SchoolFish(const std::string &texname) : FlockEntity()
setEntityType(ET_ENEMY);
canBeTargetedByAvatar = true;
health = maxHealth = 1;
//scale = Vector(0.5, 0.5);
avoidTime=0;
vel = Vector(-minUrgency, 0);
setTexture(texname);
flockType = FLOCK_FISH;
//updateCull = -1;
updateCull = 4000;
collideRadius = 20;
//2 32 0.1 0.1 -0.03 0 4 0
setSegs(8, 2, 0.1, 0.9, 0, -0.03, 8, 0);
/*
setDamageTarget(DT_AVATAR_SPORECHILD, false);
setDamageTarget(DT_AVATAR_ENERGYBLAST, false);
*/
//setAllDamageTargets(true);
setDamageTarget(DT_AVATAR_LIZAP, false);
/*
setDamageTarget(DT_AVATAR_ENERGYBLAST, false);
setDamageTarget(DT_AVATAR_SHOCK, false);
*/
//setDamageTarget(DT_AVATAR_BITE, true);
// updateCull = 10248;
targetPriority = -1;
setEatType(EAT_FILE, "SchoolFish");
@ -111,7 +101,7 @@ void SchoolFish::onEnterState(int action)
Entity::onEnterState(action);
if (action == STATE_DEAD)
{
//rotation.interpolateTo(Vector(0,0,180), 2);
vel.setLength2D(vel.getLength2D()*-1);
oldFlockID = flock ? flock->flockID : -1;
@ -119,24 +109,11 @@ void SchoolFish::onEnterState(int action)
doDeathEffects(0, false);
/*
alpha = 0;
alphaMod = 0;
*/
respawnTimer = 20 + rand()%20;
alphaMod = 0;
/*
this->setLife(2);
this->setDecayRate(1);
this->fadeAlphaWithLife = true;
*/
/*
dsq->game->spawnIngredient("FishOil", position, 10);
dsq->game->spawnIngredient("FishMeat", position, 10);
dsq->game->spawnIngredient("SmallEgg", position, 10);
dsq->game->spawnIngredient("PlantLeaf", position, 60);
*/
if (!isGoingToBeEaten())
{
@ -182,54 +159,27 @@ void SchoolFish::updateVelocity(Vector &accumulator)
vel.z = 0;
if (fabsf(vel.y) > fabsf(vel.x))
{
/*
float sign = vel.y / fabsf(vel.y);
vel.y = fabsf(vel.x) * sign;
*/
//std::swap(vel.x, vel.y);
// going up
/*
float len = vel.getLength2D();
if (vel.y < 0)
{
if (vel.x < 0)
vel.y = vel.x;
else
vel.y = -vel.x;
}
else
{
if (vel.x < 0)
vel.y = -vel.x;
else
vel.y = vel.x;
}
vel.setLength2D(len);
*/
}
}
inline
void SchoolFish::avoid(Vector &accumulator, Vector pos, bool inv)
{
//accumulator = Vector(0,0,0);
Vector change;
if (inv)
change = pos - this->position;
else
change = this->position - pos;
//change = position;
//change -= this->position;
change.setLength2D(maxUrgency);
//change |= maxUrgency;
//change = Vector(100,0);
//avoidTime = 2;
/*
std::ostringstream os;
os << "change(" << change.x << ", " << change.y << ")";
debugLog (os.str());
*/
change.setLength2D(maxUrgency);
accumulator += change;
}
@ -256,7 +206,6 @@ void SchoolFish::applyAvoidance(Vector &accumulator)
}
//return;
if (avoidTime>0) return;
@ -285,7 +234,7 @@ void SchoolFish::applyAvoidance(Vector &accumulator)
const float tileMult = (float)TILE_SIZE / (float)obsCount;
Vector change(obsSumX*tileMult, obsSumY*tileMult);
change += position - t0.worldVector();
//change |= 200;
float dist = change.getLength2D();
float ratio = dist / radius;
@ -346,7 +295,7 @@ void SchoolFish::applyCohesion(Vector &accumulator)
change = dsq->game->avatar->position - position;
change.setLength2D(maxUrgency*strengthCohesion);
accumulator += change;
//avoid(accumulator, dsq->game->avatar->position, true);
}
}
}
@ -382,47 +331,8 @@ void SchoolFish::applySeparation(Vector &accumulator)
void SchoolFish::onUpdate(float dt)
{
BBGE_PROF(SchoolFish_onUpdate);
/*
Quad::onUpdate(dt);
return;
*/
/*
if (dsq->continuity.form == FORM_BEAST)
this->activationType = ACT_CLICK;
else
this->activationType = ACT_NONE;
*/
/*
if (burstDelay == 0)
{
maxSpeedLerp = 2;
Vector v = getNormal();
vel = 0;
v *= -5000;
vel += v;
//float t = (100 + rand()%100)/100.0f;
float t = 2;
maxSpeedLerp.interpolateTo(1, t);
burstDelay = 10;// + (rand()%100)/100.0f;
//rotateToVec(v, 0, 90);
//rotation.interpolateTo(0, 1);
if (v.x > 0 && !isfh())
{
flipHorizontal();
flipDelay = 0.5;
}
if (v.x < 0 && isfh())
{
flipHorizontal();
flipDelay = 0.5;
}
}
else
*/
{
burstDelay -= dt;
@ -437,13 +347,8 @@ void SchoolFish::onUpdate(float dt)
if (this->layer < LR_ENTITIES)
{
//debugLog("background fish!");
/*
setDamageTarget(DT_AVATAR_SHOCK, false);
setDamageTarget(DT_AVATAR_BITE, false);
setDamageTarget(DT_AVATAR_VOMIT, false);
setDamageTarget(DT_AVATAR_ENERGYBLAST, false);
*/
setEntityType(ET_NEUTRAL);
collideRadius = 0;
}
@ -463,18 +368,7 @@ void SchoolFish::onUpdate(float dt)
}
else
{
/*
if (layer == LR_ENTITIES || layer == LR_ENTITIES2)
{
rippleTimer -= dt;
if (rippleTimer < 0)
{
if (core->afterEffectManager)
core->afterEffectManager->addEffect(new ShockEffect(Vector(core->width/2, core->height/2),position,0.04,0.06,15,0.2f));
rippleTimer = 0.5;
}
}
*/
FlockEntity::onUpdate(dt);
@ -482,31 +376,7 @@ void SchoolFish::onUpdate(float dt)
dsq->game->handleShotCollisions(this);
/*
soundDelay -= dt;
if (soundDelay <= 0)
{
//sound(swimSound, 1000 + rand()%100);
soundDelay = 4+(rand()%50)/100.0f;
}
*/
/*
1. if distance_to(closest_boid) <= too_close then set direction away from closest_boid
2. speed_of_neighbors := average(speed(x), for all x where distance_to(x) <= neighborhood_size)
direction_of_neighbors := avg(direction(x), for all x where distance_to(x) <= neighborhood_size)
if speed < speed_of_neighbors then increase speed
if speed > speed_of_neighbors then decrease speed
turn towards direction_of_neighbors
3. position_of_neighbors := avg(position(x), for all x where distance_to(x) <= neighborhood_size)
turn towards position_of_neighbors
*/
/*
FlockPiece flock;
getFlockInRange(160, &flock);
*/
// if flock in 160 ?
if (true)
{
VectorSet newDirection;
@ -530,10 +400,6 @@ void SchoolFish::onUpdate(float dt)
applyAvoidance(accumulator);
updateVelocity(accumulator);
/*
if (dsq->game->isValidTarget(this, 0))
doSpellAvoidance(dt, 96, dodgeAbility);
*/
Vector lastPosition = position;
@ -542,57 +408,21 @@ void SchoolFish::onUpdate(float dt)
if (dsq->game->isObstructed(position))
{
position = lastPosition;
/*
Vector newPosition = position;
position = Vector(newPosition.x, lastPosition.y);
if (dsq->game->isObstructed(position))
{
position = Vector(lastPosition.x, newPosition.y);
if (dsq->game->isObstructed(position))
{
position = lastPosition;
}
}
*/
}
//updateCurrents(dt);
updateVel2(dt);
/*
if (flipDelay > 0)
{
flipDelay -= dt;
if (flipDelay < 0)
{
flipDelay = 0;
}
}
*/
flipDelay = 0;
//dir.normalize2D();
if (flipDelay <= 0)
{
const float amt = 0;
/*
if (fabsf(dir.x) > fabsf(dir.y))
{
if (dir.x > amt && !isfh())
{
flipHorizontal();
flipDelay = 0.5;
}
if (dir.x < -amt && isfh())
{
flipHorizontal();
flipDelay = 0.5;
}
}
*/
if (vel.x > amt && !isfh())
{
flipHorizontal();
@ -604,7 +434,6 @@ void SchoolFish::onUpdate(float dt)
}
//rotateToVec(accumulator, 5, 90);
float angle = atan2f(dir.x<0 ? -dir.y : dir.y, fabsf(dir.x));
angle = ((angle*180)/PI);
@ -617,7 +446,7 @@ void SchoolFish::onUpdate(float dt)
rotation = Vector(0,0,angle);
//rotation.interpolateTo(Vector(0, 0, angle), 0);
}
}
@ -626,19 +455,6 @@ void SchoolFish::onUpdate(float dt)
void SchoolFish::onRender()
{
FlockEntity::onRender();
/*
glDisable(GL_BLEND);
glPointSize(12);
glDisable(GL_LIGHTING);
glColor3f(1,1,1);
glBegin(GL_POINTS);
glVertex3f(0,0,0);
glEnd();
glBegin(GL_LINES);
glVertex3f(0,0,0);
glVertex3f(vel.x*50, vel.y*50, 0);
glEnd();
*/
}

View file

@ -1,4 +1,4 @@
/*
#/*
Copyright (C) 2007, 2010 - Bit-Blot
This file is part of Aquaria.
@ -586,16 +586,6 @@ BaseText *getText(lua_State *L, int slot = 1)
return q;
}
static inline
Shader *getShader(lua_State *L, int slot = 1)
{
Shader *q = (Shader*)lua_touserdata(L, slot);
ENSURE_TYPE(q, SCO_SHADER);
if (!q)
scriptDebug(L, "Invalid Shader");
return q;
}
static SkeletalSprite *getSkeletalSprite(Entity *e)
{
return e ? &e->skeletalSprite : NULL;
@ -898,6 +888,17 @@ luaFunc(getModPath)
luaReturnStr(path.c_str());
}
luaFunc(getInterfaceFunctionNames)
{
lua_newtable(L);
for(unsigned i = 0; interfaceFunctions[i]; ++i)
{
lua_pushstring(L, interfaceFunctions[i]);
lua_rawseti(L, -2, i+1);
}
return 1;
}
// ----- RenderObject common functions -----
@ -1129,6 +1130,12 @@ luaFunc(obj_setBlendType)
luaReturnNil();
}
luaFunc(obj_getBlendType)
{
RenderObject *r = robj(L);
luaReturnInt(r ? r->blendType : 0);
}
luaFunc(obj_setTexture)
{
RenderObject *r = robj(L);
@ -1217,6 +1224,51 @@ luaFunc(obj_addChild)
luaReturnNil();
}
luaFunc(obj_getChild)
{
RenderObject *r = robj(L);
size_t idx = lua_tointeger(L, 2);
luaReturnPtr(r && idx < r->children.size() ? r->children[idx] : NULL);
}
luaFunc(obj_removeChild)
{
RenderObject *r = robj(L);
RenderObject *which = robj(L, 2);
if(r && which)
r->removeChild(which);
luaReturnNil();
}
luaFunc(obj_removeChildIdx)
{
RenderObject *r = robj(L);
size_t idx = lua_tointeger(L, 2);
if(r && idx < r->children.size())
r->removeChild(r->children[idx]);
luaReturnNil();
}
luaFunc(obj_removeAllChildren)
{
RenderObject *r = robj(L);
bool del = getBool(L, 2);
if(r)
{
if(del)
for(RenderObject::Children::iterator it = r->children.begin(); it != r->children.end(); ++it)
(*it)->safeKill();
r->children.clear();
}
luaReturnNil();
}
luaFunc(obj_getNumChildren)
{
RenderObject *r = robj(L);
luaReturnInt(r ? (int)r->children.size() : 0);
}
luaFunc(obj_setRenderBeforeParent)
{
RenderObject *r = robj(L);
@ -1831,6 +1883,7 @@ luaFunc(quad_getBorderAlpha)
RO_FUNC(getter, prefix, x ) \
RO_FUNC(getter, prefix, y ) \
RO_FUNC(getter, prefix, setBlendType ) \
RO_FUNC(getter, prefix, getBlendType ) \
RO_FUNC(getter, prefix, setTexture ) \
RO_FUNC(getter, prefix, delete ) \
RO_FUNC(getter, prefix, getLife ) \
@ -1864,6 +1917,11 @@ luaFunc(quad_getBorderAlpha)
RO_FUNC(getter, prefix, setRenderBeforeParent) \
RO_FUNC(getter, prefix, isRenderBeforeParent) \
RO_FUNC(getter, prefix, addChild ) \
RO_FUNC(getter, prefix, getChild ) \
RO_FUNC(getter, prefix, removeChild ) \
RO_FUNC(getter, prefix, removeChildIdx ) \
RO_FUNC(getter, prefix, removeAllChildren) \
RO_FUNC(getter, prefix, getNumChildren ) \
RO_FUNC(getter, prefix, fh ) \
RO_FUNC(getter, prefix, fv ) \
RO_FUNC(getter, prefix, fhTo ) \
@ -2090,7 +2148,7 @@ luaFunc(getNoteColor)
luaFunc(getRandNote)
{
//int note = lua_tointeger(L, 1);
luaReturnNum(dsq->getRandNote());
}
@ -2212,11 +2270,7 @@ luaFunc(shot_setOut)
Vector adjust = shot->velocity;
adjust.setLength2D(outness);
shot->position += adjust;
/*
std::ostringstream os;
os << "out(" << adjust.x << ", " << adjust.y << ")";
debugLog(os.str());
*/
}
luaReturnNil();
}
@ -2675,7 +2729,7 @@ luaFunc(entity_getBoneLockEntity)
{
BoneLock *b = e->getBoneLock();
ent = b->entity;
//ent = e->boneLock.entity;
}
luaReturnPtr(ent);
}
@ -2935,11 +2989,7 @@ luaFunc(isWithin)
Vector v1 = getVector(L, 1);
Vector v2 = getVector(L, 3);
float dist = lua_tonumber(L, 5);
/*
std::ostringstream os;
os << "v1(" << v1.x << ", " << v1.y << ") v2(" << v2.x << ", " << v2.y << ")";
debugLog(os.str());
*/
Vector d = v2-v1;
bool v = false;
if (d.isLength2DIn(dist))
@ -4031,29 +4081,13 @@ luaFunc(entity_isNearGround)
Vector v = dsq->game->getWallNormal(e->position, sampleArea);
if (!v.isZero())
{
//if (v.y < -0.5f && fabsf(v.x) < 0.4f)
if (v.y < 0 && fabsf(v.x) < 0.6f)
{
value = true;
}
}
/*
Vector v = e->position + Vector(0,e->collideRadius + TILE_SIZE/2);
std::ostringstream os;
os << "checking (" << v.x << ", " << v.y << ")";
debugLog(os.str());
TileVector t(v);
TileVector c;
for (int i = -5; i < 5; i++)
{
c.x = t.x+i;
c.y = t.y;
if (dsq->game->isObstructed(t))
{
value = true;
}
}
*/
}
luaReturnBool(value);
}
@ -4498,7 +4532,7 @@ luaFunc(entity_getAnimationLoop)
luaFunc(entity_move)
{
Entity *e = entity(L);
bool ease = lua_tointeger(L, 5);
//bool ease = lua_tointeger(L, 5);
Vector p(lua_tonumber(L, 2), lua_tonumber(L, 3));
if (getBool(L, 6))
p = e->position + p;
@ -4662,7 +4696,7 @@ luaFunc(savePoint)
Vector position;
if (p)
{
//dsq->game->avatar->moveToNode(p, 0, 0, 1);
position = p->nodes[0].position;
}
@ -4676,6 +4710,12 @@ luaFunc(saveMenu)
luaReturnNil();
}
luaFunc(setSceneDisplayNameInSave)
{
dsq->game->sceneDisplayName = getString(L);
luaReturnNil();
}
luaFunc(pause)
{
dsq->game->togglePause(1);
@ -4794,7 +4834,7 @@ luaFunc(entity_damage)
if (e)
{
DamageData d;
//d.attacker = e;
d.attacker = lua_isuserdata(L, 2) ? entity(L, 2) : NULL;
d.damage = lua_tonumber(L, 3);
d.damageType = (DamageType)lua_tointeger(L, 4);
@ -4967,11 +5007,7 @@ luaFunc(decrFlag)
luaFunc(setFlag)
{
/*
if (lua_isstring(L, 1))
dsq->continuity.setFlag(lua_tostring(L, 1), lua_tonumber(L, 2));
else
*/
dsq->continuity.setFlag(lua_tointeger(L, 1), lua_tointeger(L, 2));
luaReturnNil();
}
@ -4979,11 +5015,7 @@ luaFunc(setFlag)
luaFunc(getFlag)
{
int v = 0;
/*
if (lua_isstring(L, 1))
v = dsq->continuity.getFlag(lua_tostring(L, 1));
else if (lua_isnumber(L, 1))
*/
v = dsq->continuity.getFlag(lua_tointeger(L, 1));
luaReturnNum(v);
@ -6219,12 +6251,8 @@ luaFunc(entity_getBoneByName)
luaFunc(entity_getBoneByInternalId)
{
Entity *e = entity(L);
if(!e)
luaReturnPtr(NULL);
size_t i = lua_tointeger(L, 1);
if(i >= e->skeletalSprite.bones.size())
luaReturnPtr(NULL);
luaReturnPtr(e->skeletalSprite.bones[i]);
size_t i = lua_tointeger(L, 2);
luaReturnPtr((e && i < e->skeletalSprite.bones.size()) ? e->skeletalSprite.bones[i] : NULL);
}
luaFunc(entity_getNumBones)
@ -6668,7 +6696,7 @@ luaFunc(playMusic)
luaFunc(playMusicStraight)
{
dsq->sound->setMusicFader(1,0);
dsq->sound->playMusic(getString(L, 1), SLT_LOOP, SFT_IN, 0.5); //SFT_IN, 0.1);//, SFT_IN, 0.2);
dsq->sound->playMusic(getString(L, 1), SLT_LOOP, SFT_IN, 0.5);
luaReturnNil();
}
@ -6793,7 +6821,7 @@ luaFunc(entity_adjustPositionBySurfaceNormal)
e->position += v;
}
e->setv(EV_CRAWLING, 0);
//e->setCrawling(false);
}
luaReturnNil();
}
@ -6807,16 +6835,10 @@ luaFunc(entity_moveAlongSurface)
{
e->lastPosition = e->position;
//if (!e->position.isInterpolating())
{
/*
if (dsq->game->isObstructed(TileVector(e->position)))
{
e->moveOutOfWall();
}
*/
Vector v;
if (e->ridingOnEntity)
@ -6826,58 +6848,22 @@ luaFunc(entity_moveAlongSurface)
}
else
v = dsq->game->getWallNormal(e->position);
//int outFromWall = lua_tointeger(L, 5);
int outFromWall = e->getv(EV_WALLOUT);
bool invisibleIn = e->isSittingOnInvisibleIn();
/*
if (invisibleIn)
debugLog("Found invisibleIn");
else
debugLog("NOT FOUND");
*/
/*
for (int x = -2; x < 2; x++)
{
for (int y = -2; y< 2; y++)
{
if (dsq->game->getGrid(TileVector(x,y))== OT_INVISIBLEIN)
{
debugLog("found invisible in");
invisibleIn = true;
break;
}
}
}
*/
if (invisibleIn)
outFromWall -= TILE_SIZE;
float t = 0.1;
e->offset.interpolateTo(v*outFromWall, t);
/*
if (outFromWall)
{
//e->lastWallOffset = dsq->game->getWallNormal(e->position)*outFromWall;
//e->offset.interpolateTo(dsq->game->getWallNormal(e->position)*outFromWall, time*2);
//e->offset = v*outFromWall;
//float t = 0;
e->offset.interpolateTo(v*outFromWall, t);
//pos += e->lastWallOffset;
}
else
{
e->offset.interpolateTo(Vector(0,0), t);
//e->offset.interpolateTo(Vector(0,0), time*2);
//e->lastWallOffset = Vector(0,0);g
}
*/
// HACK: make this an optional parameter?
//e->rotateToVec(v, 0.1);
float dt = lua_tonumber(L, 2);
float speed = lua_tonumber(L, 3);
//int climbHeight = lua_tonumber(L, 4);
Vector mov;
if (e->surfaceMoveDir==1)
mov = Vector(v.y, -v.x);
@ -6890,49 +6876,8 @@ luaFunc(entity_moveAlongSurface)
e->vel = 0;
/*
float adjustbit = float(speed)/float(TILE_SIZE);
if (e->isNearObstruction(0))
{
Vector n = dsq->game->getWallNormal(e->position);
if (!n.isZero())
{
Vector sp = e->position;
e->position += n * adjustbit * dt;
}
}
if (!e->isNearObstruction(1))
{
Vector n = dsq->game->getWallNormal(e->position);
if (!n.isZero())
{
Vector sp = e->position;
e->position -= n * adjustbit * dt;
}
}
*/
/*
Vector sp = e->position;
e->clampToSurface();
*/
/*
e->position = sp;
e->internalOffset.interpolateTo(e->position-sp, 0.2);
*/
/*
e->position = e->lastPosition;
e->position.interpolateTo(to*0.5f + e->position*0.5f, 0.5);
*/
/*
Vector to = e->position;
e->position = e->lastPosition;
e->position.interpolateTo(to, 0.5);
*/
/*
e->position = sp;
e->internalOffset.interpolateTo(e->position - sp, 0.2);
*/
//e->clampToSurface(0.1);
}
}
@ -6941,7 +6886,7 @@ luaFunc(entity_moveAlongSurface)
luaFunc(entity_rotateToSurfaceNormal)
{
//ScriptedEntity *e = scriptedEntity(L);
Entity *e = entity(L);
float t = lua_tonumber(L, 2);
int n = lua_tointeger(L, 3);
@ -6950,7 +6895,7 @@ luaFunc(entity_rotateToSurfaceNormal)
{
e->rotateToSurfaceNormal(t, n, rot);
}
//Entity *e = entity(L);
luaReturnNil();
}
@ -7199,11 +7144,7 @@ luaFunc(entity_pullEntities)
Vector pull = pos - ent->position;
pull.setLength2D(float(len) * dt);
ent->vel2 += pull;
/*
std::ostringstream os;
os << "ent: " << ent->name << " + (" << pull.x << ", " << pull.y << ")";
debugLog(os.str());
*/
}
}
}
@ -7247,7 +7188,7 @@ luaFunc(entity_isRidingOnEntity)
luaReturnPtr(NULL);
}
//entity_setProperty(me, EP_SOLID, true)
luaFunc(entity_isProperty)
{
Entity *e = entity(L);
@ -7259,7 +7200,7 @@ luaFunc(entity_isProperty)
luaReturnBool(v);
}
//entity_setProperty(me, EP_SOLID, true)
luaFunc(entity_setProperty)
{
Entity *e = entity(L);
@ -7315,10 +7256,7 @@ luaFunc(entity_hurtTarget)
d.damage = lua_tointeger(L, 2);
e->getTargetEntity(e->currentEntityTarget)->damage(d);
}
/*
if (e && e->getTargetEntity())
e->getTargetEntity(e->currentEntityTarget)->damage(lua_tointeger(L, 2), 0, e);
*/
luaReturnNil();
}
@ -7755,7 +7693,7 @@ luaFunc(getNearestEntity)
Vector p(lua_tonumber(L, 1), lua_tonumber(L, 2));
int radius = lua_tointeger(L, 3);
Entity *ignore = lua_isuserdata(L, 4) ? entity(L, 4) : NULL;
EntityType et = lua_isnumber(L, 5) ? (EntityType)lua_tointeger(L, 5) : ET_NOTYPE;
//EntityType et = lua_isnumber(L, 5) ? (EntityType)lua_tointeger(L, 5) : ET_NOTYPE;
DamageType dt = lua_isnumber(L, 6) ? (DamageType)lua_tointeger(L, 6) : DT_NONE;
int lrStart = lua_isnumber(L, 7) ? lua_tointeger(L, 7) : -1;
int lrEnd = lua_isnumber(L, 8) ? lua_tointeger(L, 8) : -1;
@ -8174,7 +8112,7 @@ luaFunc(entity_getTarget)
if (e)
{
retEnt = e->getTargetEntity(lua_tonumber(L, 2));
//e->activate();
}
luaReturnPtr(retEnt);
}
@ -8672,6 +8610,12 @@ luaFunc(isObstructed)
luaReturnBool(dsq->game->isObstructed(TileVector(Vector(lua_tonumber(L, 1), lua_tonumber(L, 2))), obs ? obs : -1));
}
luaFunc(isObstructedRaw)
{
int obs = lua_tointeger(L, 3);
luaReturnBool(dsq->game->isObstructedRaw(TileVector(Vector(lua_tonumber(L, 1), lua_tonumber(L, 2))), obs));
}
luaFunc(getObstruction)
{
luaReturnInt(dsq->game->getGrid(TileVector(Vector(lua_tonumber(L, 1), lua_tonumber(L, 2)))));
@ -8789,11 +8733,7 @@ luaFunc(entity_getFlag)
luaFunc(isFlag)
{
int v = 0;
/*
if (lua_isstring(L, 1))
v = dsq->continuity.getFlag(lua_tostring(L, 1));
else if (lua_isnumber(L, 1))
*/
bool f = false;
if (lua_isnumber(L, 1))
{
@ -8805,11 +8745,7 @@ luaFunc(isFlag)
v = dsq->continuity.getFlag(getString(L, 1));
f = (v == lua_tointeger(L, 2));
}
/*
int f = 0;
dsq->continuity.getFlag(lua_tostring(L, 1));
*/
luaReturnBool(f);
}
@ -8970,9 +8906,9 @@ luaFunc(createFindPath)
luaFunc(findPathBegin)
{
PathFinding::State *state = *(PathFinding::State**)luaL_checkudata(L, 1, "pathfinder");
Vector start(lua_tonumber(L, 1), lua_tonumber(L, 2));
Vector end(lua_tonumber(L, 3), lua_tonumber(L, 4));
ObsType obs = ObsType(lua_tointeger(L, 8));
Vector start(lua_tonumber(L, 2), lua_tonumber(L, 3));
Vector end(lua_tonumber(L, 4), lua_tonumber(L, 5));
ObsType obs = ObsType(lua_tointeger(L, 6));
PathFinding::beginFindPath(state, start, end, obs);
luaReturnNil();
}
@ -8989,12 +8925,12 @@ luaFunc(findPathFinish)
{
PathFinding::State *state = *(PathFinding::State**)luaL_checkudata(L, 1, "pathfinder");
VectorPath path;
bool found = PathFinding::finishFindPath(state, path);
bool found = PathFinding::finishFindPath(state, path, lua_tointeger(L, 2));
if(!found)
luaReturnBool(false);
lua_pushinteger(L, (int)path.getNumPathNodes());
_fillPathfindTables(L, path, 2, 3);
_fillPathfindTables(L, path, 3, 4);
return 3;
}
@ -9008,6 +8944,13 @@ luaFunc(findPathGetStats)
return 2;
}
luaFunc(findPathFreeMemory)
{
PathFinding::State *state = *(PathFinding::State**)luaL_checkudata(L, 1, "pathfinder");
PathFinding::purgeFindPath(state);
luaReturnNil();
}
luaFunc(castLine)
{
Vector v(lua_tonumber(L, 1), lua_tonumber(L, 2));
@ -9015,10 +8958,13 @@ luaFunc(castLine)
int tiletype = lua_tointeger(L, 5);
if(!tiletype)
tiletype = OT_BLOCKING;
bool invert = getBool(L, 6);
Vector step = end - v;
int steps = step.getLength2D() / TILE_SIZE;
step.setLength2D(TILE_SIZE);
if(!invert)
{
for(int i = 0; i < steps; ++i)
{
if(dsq->game->getGridRaw(TileVector(v)) & tiletype)
@ -9030,6 +8976,21 @@ luaFunc(castLine)
}
v += step;
}
}
else
{
for(int i = 0; i < steps; ++i)
{
if(!(dsq->game->getGridRaw(TileVector(v)) & tiletype))
{
lua_pushinteger(L, dsq->game->getGrid(TileVector(v)));
lua_pushnumber(L, v.x);
lua_pushnumber(L, v.y);
return 3;
}
v += step;
}
}
lua_pushboolean(L, false);
lua_pushnumber(L, v.x);
@ -9377,6 +9338,191 @@ luaFunc(getPerformanceFreq)
#endif
}
// ---------- Minimap related ------------------
luaFunc(getMinimapRender)
{
luaReturnPtr(dsq->game->miniMapRender);
}
luaFunc(minimap_setWaterBitTex)
{
luaReturnBool(MiniMapRender::setWaterBitTex(getString(L)));
}
luaFunc(minimap_setTopTex)
{
luaReturnBool(MiniMapRender::setTopTex(getString(L)));
}
luaFunc(minimap_setBottomTex)
{
luaReturnBool(MiniMapRender::setBottomTex(getString(L)));
}
luaFunc(minimap_setAvatarIconTex)
{
luaReturnBool(MiniMapRender::setAvatarTex(getString(L)));
}
luaFunc(minimap_setHealthBarTex)
{
luaReturnBool(MiniMapRender::setAvatarTex(getString(L)));
}
luaFunc(minimap_setMaxHealthMarkerTex)
{
luaReturnBool(MiniMapRender::setMaxHealthMarkerTex(getString(L)));
}
template<typename T>
int mmicon_delete(lua_State *L, T *obj)
{
delete obj->minimapIcon;
obj->minimapIcon = NULL;
luaReturnNil();
}
template<typename T>
int mmicon_tex(lua_State *L, T *obj)
{
if(!obj)
luaReturnNil();
MinimapIcon *ico = obj->ensureMinimapIcon();
bool good = ico->setTexture(getString(L, 2));
luaReturnBool(good);
}
template<typename T>
int mmicon_size(lua_State *L, T *obj)
{
if(!obj)
luaReturnNil();
luaReturnNum(interpolateVec2(L, obj->ensureMinimapIcon()->size, 2));
}
template<typename T>
int mmicon_color(lua_State *L, T *obj)
{
if(!obj)
luaReturnNil();
luaReturnNum(interpolateVec3(L, obj->ensureMinimapIcon()->color, 2));
}
template<typename T>
int mmicon_alpha(lua_State *L, T *obj)
{
if(!obj)
luaReturnNil();
luaReturnNum(interpolateVec1(L, obj->ensureMinimapIcon()->alpha, 2));
}
template<typename T>
int mmicon_scaleWithDistance(lua_State *L, T *obj)
{
if(!obj)
luaReturnNil();
obj->ensureMinimapIcon()->scaleWithDistance = getBool(L, 2);
luaReturnNil();
}
template<typename T>
int mmicon_throb(lua_State *L, T *obj)
{
if(!obj)
luaReturnNil();
obj->ensureMinimapIcon()->throbMult = lua_tonumber(L, 2);
luaReturnNil();
}
luaFunc(entity_mmicon_delete) { return mmicon_delete(L, entity(L)); }
luaFunc(entity_mmicon_tex) { return mmicon_tex(L, entity(L)); }
luaFunc(entity_mmicon_size) { return mmicon_size(L, entity(L)); }
luaFunc(entity_mmicon_color) { return mmicon_color(L, entity(L)); }
luaFunc(entity_mmicon_alpha) { return mmicon_alpha(L, entity(L)); }
luaFunc(entity_mmicon_scaleWithDistance) { return mmicon_scaleWithDistance(L, entity(L)); }
luaFunc(entity_mmicon_throb) { return mmicon_throb(L, entity(L)); }
luaFunc(node_mmicon_delete) { return mmicon_delete(L, path(L)); }
luaFunc(node_mmicon_tex) { return mmicon_tex(L, path(L)); }
luaFunc(node_mmicon_size) { return mmicon_size(L, path(L)); }
luaFunc(node_mmicon_color) { return mmicon_color(L, path(L)); }
luaFunc(node_mmicon_alpha) { return mmicon_alpha(L, path(L)); }
luaFunc(node_mmicon_scaleWithDistance) { return mmicon_scaleWithDistance(L, path(L)); }
luaFunc(node_mmicon_throb) { return mmicon_throb(L, path(L)); }
class LuaXMLConverter : public tinyxml2::XMLVisitor
{
public:
LuaXMLConverter(lua_State *lua) : L(lua) {}
virtual ~LuaXMLConverter() {}
virtual bool VisitEnter( const tinyxml2::XMLDocument& /*doc*/ )
{
lua_newtable(L);
indexes.push_back(0);
return true;
}
virtual bool VisitExit( const tinyxml2::XMLDocument& /*doc*/ )
{
indexes.pop_back();
assert(indexes.empty());
// Leave the root table on the stack
return true;
}
virtual bool VisitEnter( const tinyxml2::XMLElement& element, const tinyxml2::XMLAttribute *a)
{
lua_newtable(L);
indexes.push_back(0);
if(a)
{
lua_newtable(L);
for( ; a; a = a->Next())
{
lua_pushstring(L, a->Value());
lua_setfield(L, -2, a->Name());
}
lua_setfield(L, -2, "attr");
}
if(const char *name = element.Value())
{
lua_pushstring(L, name);
lua_setfield(L, -2, "name");
}
if(const char *text = element.GetText())
{
lua_pushstring(L, text);
lua_setfield(L, -2, "text");
}
return true;
}
virtual bool VisitExit( const tinyxml2::XMLElement& /*element*/ )
{
indexes.pop_back();
lua_rawseti(L, -2, ++indexes.back());
return true;
}
protected:
std::vector<unsigned> indexes;
lua_State * const L;
};
luaFunc(loadXMLTable)
{
const std::string s = getString(L);
safePath(L, s);
std::string fn;
if(!findFile_helper(s.c_str(), fn))
luaReturnNil();
tinyxml2::XMLDocument xml;
tinyxml2::XMLError err = readXML(fn, xml);
if(err != tinyxml2::XML_SUCCESS)
{
lua_pushboolean(L, false);
lua_pushinteger(L, err);
return 2;
}
LuaXMLConverter cvt(L);
xml.Accept(&cvt);
return 1;
}
//--------------------------------------------------------------------------------------------
#define luaRegister(func) {#func, l_##func}
@ -9393,6 +9539,7 @@ static const struct {
luaRegister(fileExists),
luaRegister(getModName),
luaRegister(getModPath),
luaRegister(getInterfaceFunctionNames),
luaRegister(debugBreak),
luaRegister(setIgnoreAction),
@ -9549,6 +9696,7 @@ static const struct {
luaRegister(entity_setDeathParticleEffect),
luaRegister(entity_setDeathSound),
luaRegister(entity_setStopSoundsOnDeath),
luaRegister(entity_setDamageTarget),
luaRegister(entity_setAllDamageTargets),
@ -9801,7 +9949,7 @@ static const struct {
luaRegister(resetTimer),
luaRegister(addInfluence),
luaRegister(setSuckPosition),
luaRegister(getSuckPosition),
luaRegister(setSuckPosition),
luaRegister(setNumSuckPositions),
luaRegister(setupBasicEntity),
@ -9875,6 +10023,7 @@ static const struct {
luaRegister(savePoint),
luaRegister(saveMenu),
luaRegister(setSceneDisplayNameInSave),
luaRegister(wait),
luaRegister(watch),
@ -9942,6 +10091,7 @@ static const struct {
luaRegister(singSong),
luaRegister(isObstructed),
luaRegister(isObstructedRaw),
luaRegister(isObstructedBlock),
luaRegister(getObstruction),
luaRegister(getGridRaw),
@ -9951,6 +10101,7 @@ static const struct {
luaRegister(findPathUpdate),
luaRegister(findPathFinish),
luaRegister(findPathGetStats),
luaRegister(findPathFreeMemory),
luaRegister(castLine),
luaRegister(getUserInputString),
luaRegister(getMaxCameraValues),
@ -10403,7 +10554,29 @@ static const struct {
luaRegister(getPerformanceCounter),
luaRegister(getPerformanceFreq),
luaRegister(getMinimapRender),
luaRegister(minimap_setWaterBitTex),
luaRegister(minimap_setTopTex),
luaRegister(minimap_setBottomTex),
luaRegister(minimap_setAvatarIconTex),
luaRegister(minimap_setHealthBarTex),
luaRegister(minimap_setMaxHealthMarkerTex),
luaRegister(entity_mmicon_delete),
luaRegister(entity_mmicon_tex),
luaRegister(entity_mmicon_size),
luaRegister(entity_mmicon_color),
luaRegister(entity_mmicon_alpha),
luaRegister(entity_mmicon_scaleWithDistance),
luaRegister(entity_mmicon_throb),
luaRegister(node_mmicon_delete),
luaRegister(node_mmicon_tex),
luaRegister(node_mmicon_size),
luaRegister(node_mmicon_color),
luaRegister(node_mmicon_alpha),
luaRegister(node_mmicon_scaleWithDistance),
luaRegister(node_mmicon_throb),
luaRegister(loadXMLTable),
#undef MK_FUNC
#undef MK_ALIAS
@ -11114,6 +11287,7 @@ static const struct {
luaConstant(OT_MASK_BLACK),
luaConstant(OT_BLOCKING),
luaConstant(OT_USER_MASK),
luaConstant(OT_OUTOFBOUNDS),
luaConstant(SEE_MAP_NEVER),
luaConstant(SEE_MAP_DEFAULT),

View file

@ -39,7 +39,7 @@ ScriptedEntity::ScriptedEntity(const std::string &scriptName, Vector position, E
strandSpacing = 10;
animKeyFunc = true;
canShotHitFunc = true;
//runningActivation = false;
setEntityType(et);
myTimer = 0;
@ -80,6 +80,10 @@ ScriptedEntity::ScriptedEntity(const std::string &scriptName, Vector position, E
}
}
ScriptedEntity::~ScriptedEntity()
{
}
void ScriptedEntity::setAutoSkeletalUpdate(bool v)
{
skeletalSprite.ignoreUpdate = !v;
@ -227,7 +231,7 @@ void ScriptedEntity::setupEntity(const std::string &tex, int lcode)
void ScriptedEntity::setupBasicEntity(const std::string& texture, int health, int manaBall, int exp, int money, float collideRadius, int state, int w, int h, int expType, bool hitEntity, int updateCull, int layer)
{
//this->updateCull = updateCull;
updateCull = -1;
if (texture.empty())
@ -322,7 +326,7 @@ void ScriptedEntity::onAlwaysUpdate(float dt)
e->sound("RockHit");
dsq->spawnParticleEffect("rockhit", e->position, 0, 0);
}
//e->push(vel, 0.2, 500, 0);
Vector add = vel;
add.setLength2D(5000*dt);
e->vel += add;
@ -350,7 +354,7 @@ void ScriptedEntity::onAlwaysUpdate(float dt)
}
else if (!dist.isLength2DIn(800))
{
// break;
vel.setZero();
dsq->game->avatar->pullTarget->stopPull();
dsq->game->avatar->pullTarget = 0;
@ -386,7 +390,7 @@ void ScriptedEntity::updateStrands(float dt)
if (strands.empty()) return;
float angle = rotation.z;
angle = (PI*(360-(angle-90)))/180.0;
//angle = (180*angle)/PI;
float sz = (strands.size()/2);
for (int i = 0; i < strands.size(); i++)
{
@ -638,7 +642,7 @@ void ScriptedEntity::songNoteDone(int note, float len)
void ScriptedEntity::becomeSolid()
{
//vel = 0;
float oldRot = 0;
bool doRot=false;
Vector n = dsq->game->getWallNormal(position);
@ -814,4 +818,3 @@ void ScriptedEntity::deathNotify(RenderObject *r)
}
CollideEntity::deathNotify(r);
}

View file

@ -30,6 +30,7 @@ class ScriptedEntity : public CollideEntity, public Segmented
{
public:
ScriptedEntity(const std::string &scriptName, Vector position, EntityType et = ET_ENEMY);
virtual ~ScriptedEntity();
void init();
void postInit();
void destroy();
@ -100,7 +101,7 @@ protected:
void onAlwaysUpdate(float dt);
void updateStrands(float dt);
bool animKeyFunc;
//void onPathEnd();
void onExitTimer();
float myTimer;

View file

@ -345,7 +345,7 @@ void Shot::loadBankShot(const std::string &ident, Shot *setter)
{
std::string id = ident;
stringToLower(id);
//setter->shotData = &shotBank[id];
setter->applyShotData(&shotBank[id]);
}
}
@ -470,7 +470,7 @@ void Shot::onHitWall()
if (!shotData->spawnEntity.empty())
{
dsq->game->createEntity(shotData->spawnEntity, 0, position, 0, false, "", ET_ENEMY, true);
//(shotData->spawnEntity, 0, position, 0, false, "");
if (shotData->spawnEntity == "NatureFormFlowers")
{
dsq->game->registerSporeDrop(position, 0);
@ -518,9 +518,9 @@ void Shot::reflectFromEntity(Entity *e)
{
firer = e;
target = oldFirer;
//int d = (int)dt;
//d += DT_AVATAR;oll
//damageType = DamageType(d);
}
}
@ -542,11 +542,7 @@ void Shot::targetDied(Entity *target)
}
/*
std::ostringstream os;
os << "# of shots in list: " << c;
debugLog(os.str());
*/
}
bool Shot::isHitEnts() const
@ -585,13 +581,13 @@ void Shot::hitEntity(Entity *e, Bone *b)
if (damageType == DT_AVATAR_BITE)
{
//debugLog("Shot::hitEntity bittenEntities.push_back");
dsq->game->avatar->bittenEntities.push_back(e);
}
bool damaged = e->damage(d);
// doesn't have anything to do with effectTime
if (shotData)
{
if (!damaged && checkDamageTarget && !shotData->alwaysDoHitEffects)
@ -611,11 +607,11 @@ void Shot::hitEntity(Entity *e, Bone *b)
}
//debugLog("Shot hit enemy: " + e->name);
}
else
{
//debugLog("Shot hit 0 enemy");
}
if (doEffects)
@ -640,7 +636,7 @@ void Shot::hitEntity(Entity *e, Bone *b)
}
}
//d.bone = c.bone;
}
void Shot::noSegs()
@ -679,11 +675,7 @@ void Shot::setAimVector(const Vector &aim)
{
velocity.setLength2D(shotData->maxSpeed);
}
/*
std::ostringstream os;
os << "setting aim vector(" << aim.x << ", " << aim.y << ") to vel(" << velocity.x << ", " << velocity.y << ")";
debugLog(os.str());
*/
}
void Shot::setTarget(Entity *target)
@ -737,7 +729,7 @@ void Shot::onUpdate(float dt)
{
if (velocity.isZero())
{
//velocity = Vector(rand()%100-50, rand()%100-50);
}
else if (velocity.isLength2DIn(maxSpeed*0.75f))
{
@ -745,18 +737,7 @@ void Shot::onUpdate(float dt)
}
}
/*
if (!gravity.isZero())
{
velocity += shotData->gravity * dt;
}
*/
/*
std::ostringstream os;
os << "shotVel(" << velocity.x << ", " << velocity.y << ")";
debugLog(os.str());
*/
homingness += shotData->homingIncr*dt;
if (shotData->homingMax != 0 && homingness > shotData->homingMax)
@ -779,7 +760,7 @@ void Shot::onUpdate(float dt)
add.setLength2D(shotData->rotIncr);
velocity += add * dt;
}
//emitter.update(dt);
if (emitter)
{
emitter->position = position + offset;
@ -814,7 +795,7 @@ void Shot::onUpdate(float dt)
return;
}
}
//TileVector t(position);
Vector diff;
if (target)
diff = target->getTargetPoint(targetPt) - this->position;
@ -846,13 +827,13 @@ void Shot::onUpdate(float dt)
if (!N.isZero())
{
//2*(-I dot N)*N + I
velocity = 2*(-I.dot(N))*N + I;
velocity *= len;
}
break;
}
// fall through
}
default:
{

View file

@ -75,9 +75,9 @@ struct ShotData
class Shot : public Quad, public Segmented
{
public:
//Shot(DamageType damageType, Entity *firer, Vector pos, Entity *target, std::string tex="", float homingness=1000, int maxSpeed=400, int segments=10, float segMin=0.1, float segMax=5, float damage = 1, float lifeTime = 0);
Shot();
//void destroy();
void reflectFromEntity(Entity *e);
void setParticleEffect(const std::string &particleEffect);
typedef std::vector<Shot*> Shots;
@ -156,7 +156,7 @@ public:
Beam(Vector pos, float angle);
typedef std::list<Beam*> Beams;
static Beams beams;
//static void targetDied(Entity *t);
static void killAllBeams();
float angle;

View file

@ -68,7 +68,7 @@ void Spore::destroy()
void Spore::onEndOfLife()
{
//::onEndLife();
spores.remove(this);
}

View file

@ -1,70 +0,0 @@
/*
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 "States.h"
StarRenderer::StarRenderer(int num, int range) : RenderObject()
{
stars.resize(num);
int rh = range/2;
for (int i = 0; i < stars.size(); i++)
{
stars[i] = Vector((rand()%range)-rh, (rand()%range)-rh, (rand()%range)-rh);
}
//rotation.interpolateTo(Vector(0,360,0), 30, -1);
//position.interpolateTo(Vector(0,0,-100), 10, -1);
}
void StarRenderer::render()
{
#ifdef BBGE_BUILD_OPENGL
core->enable3D();
glLoadIdentity();
glTranslatef(position.x, position.y, position.z);
glRotatef(rotation.x, 1, 0, 0);
glRotatef(rotation.y, 0, 1, 0);
glRotatef(rotation.z, 0, 0, 1);
glPointSize(1);
glBindTexture(GL_TEXTURE_2D, 0);
glBegin(GL_POINTS);
for (int i = 0; i < stars.size(); i++)
{
float c = 1.0f-fabsf(stars[i].z)/50.0f;
glColor3f(c,c,c);
glVertex3f(stars[i].x, stars[i].y, stars[i].z);
}
glEnd();
core->enable2D(core->getVirtualWidth());
/*
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
*/
#endif
}
void StarRenderer::onRender()
{
}

View file

@ -28,15 +28,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Bubble::Bubble() : Quad()
{
setTexture("particles/bubble");
/*
this->life = 10;
this->decayRate = 1;
*/
this->alpha = 0.5f;
this->speed = rand()%10+20;
this->width = 32;
this->height = 32;
//this->scale = Vector(0.5f, 0.5f, 0.5f);
}
void Bubble::onUpdate(float dt)
@ -64,7 +61,7 @@ void Intro2::applyState()
ActionMapper::clearActions();
//addAction(MakeFunctionEvent(Intro2, skipIntro), KEY_ESCAPE, 0);
dsq->subtitlePlayer.show(0.5f);
@ -78,8 +75,7 @@ void Intro2::applyState()
dsq->overlay->alpha.interpolateTo(0, 40);
dsq->toggleCursor(0);
// OLD WAY of skipping
//dsq->user.control.actionSet.importAction(this, "Escape", ACTION_ESC);
Quad *frame4 = new Quad;
{
@ -114,92 +110,7 @@ void Intro2::applyState()
while (dsq->sound->isPlayingVoice())
dsq->main(FRAME_TIME);
/*
while (dsq->sound->isPlayingVoice())
{
if (isActing(ACTION_ESC))
{
while (isActing(ACTION_ESC) && dsq->sound->isPlayingVoice())
{
core->main(FRAME_TIME);
}
dsq->overlay->alpha.interpolateTo(1, 1);
dsq->stopVoice();
dsq->main(1);
dsq->newGame();
return;
}
core->main(FRAME_TIME);
}
*/
/*
Quad *frame3 = new Quad;
{
frame3->setTexture("gameover-0002");
frame3->position = Vector(400,300);
frame3->width = 600;
frame3->height = 600;
}
addRenderObject(frame3, LR_BACKGROUND);
Quad *frame2 = new Quad;
{
frame2->setTexture("gameover-0003");
frame2->position = Vector(400,300);
frame2->width = 600;
frame2->height = 600;
}
addRenderObject(frame2, LR_BACKGROUND);
Quad *frame1 = new Quad;
{
frame1->setTexture("gameover-0004");
frame1->position = Vector(400,300);
frame1->width = 600;
frame1->height = 600;
}
addRenderObject(frame1, LR_BACKGROUND);
*/
/*
dsq->voice("Naija_Intro1");
while (dsq->isStreamingVoice()) core->main(1);
*/
/*
frame1->alpha.interpolateTo(0, 1);
core->main(1);
*/
/*
dsq->voice("Naija_Intro2");
while (dsq->isStreamingVoice()) core->main(1);
*/
//frame2->alpha.interpolateTo(0, 1);
/*
dsq->voice("Naija_Intro3");
while (dsq->isStreamingVoice()) core->main(1);
*/
/*
frame3->alpha.interpolateTo(0, 1);
core->main(1);
*/
/*
dsq->voice("Naija_Intro3");
while (dsq->isStreamingVoice()) core->main(1);
*/
//frame4->alpha.interpolateTo(0, 1);
/*
dsq->voice("Naija_Intro4");
while (dsq->isStreamingVoice()) core->main(1);
*/
emitter->stop();
emitter2->start();
@ -245,8 +156,8 @@ void GameOver::applyState()
const bool frameOutputGameOver = false;
core->sound->fadeMusic(SFT_OUT, 1);
//float transTime = 0.01;
//core->sound->fadeOut(transTime);
StateObject::applyState();
core->globalScale = Vector(1,1);
core->globalScaleChanged();
@ -268,18 +179,6 @@ void GameOver::applyState()
}
addRenderObject(q);
/*
BitmapText *b = new BitmapText(&dsq->font);
{
int sz = 64;
b->setFontSize(sz);
b->setText("GAME OVER");
b->position = Vector(400+sz/2,300-sz/2);
}
addRenderObject(b);
*/
//core->main(transTime);
frame1 = new Quad;
@ -331,11 +230,10 @@ void GameOver::applyState()
core->afterEffectManager->addEffect(new ShockEffect(Vector(core->width/2, core->height/2),core->screenCenter, 0.07,0.03,30,0.2f, 1.1));
}
//dsq->screenTransition->transition(0);
dsq->overlay->alpha = 0;
//core->main(0.1);
//frame3->alpha.interpolateTo(0, GO_ANIM_TIME);
core->main(GO_ANIM_TIME);
frame4->alpha.interpolateTo(0, GO_ANIM_TIME);
@ -351,23 +249,17 @@ void GameOver::applyState()
core->main(GO_ANIM_TIME);
core->main(1.5);
//core->sound->streamMusic("Requiem", 0);
if (dsq->recentSaveSlot != -1)
{
// game over recent save load
dsq->sound->stopMusic();
float transferSeconds = dsq->continuity.seconds;
dsq->continuity.loadFile(dsq->recentSaveSlot);
/*
//float lastLoadSeconds = dsq->continuity.seconds;
// time spent on a session that ended with death is the
// difference between the current total time and the last save time?
// nope.
// ignore doing the above for now!
*/
dsq->continuity.seconds = transferSeconds;
dsq->game->transitionToScene(dsq->game->sceneToLoad);
@ -376,20 +268,16 @@ void GameOver::applyState()
dsq->title();
//core->main(transTime);
if (frameOutputGameOver)
core->frameOutputMode = false;
/*
addAction(MakeFunctionEvent(GameOver, onClick), ActionMapper::MOUSE_BUTTON_LEFT, 0);
timer = 1;
*/
}
void GameOver::removeState()
{
//dsq->screenTransition->capture();
StateObject::removeState();
frame3 = frame2 = frame1 = 0;
}
@ -410,30 +298,7 @@ void GameOver::update(float dt)
timer = 0;
}
/*
if (frame1 && frame2 && frame3)
{
if (frame3->alpha.x == 0 && !frame3->alpha.isInterpolating())
{
if (frame2->alpha.x == 0 && !frame2->alpha.isInterpolating())
{
if (frame1->alpha.x == 0 && !frame1->alpha.isInterpolating())
{
frame1=frame2=frame3=0;
}
else if (!frame1->alpha.isInterpolating())
{
frame1->alpha.interpolateTo(0, 0.8);
}
}
else if (!frame2->alpha.isInterpolating())
{
frame2->alpha.interpolateTo(0, GO_ANIM_TIME);
}
}
}
*/
}
namespace NagStuff
@ -442,10 +307,7 @@ namespace NagStuff
int ic=0;
const int numScreens = 11;
float screenTimer = 0;
/*
const float screenTime = 7;
const float nagFadeTime = 3;
*/
const float screenTime = 3;
const float nagFadeTime = 1;
};
@ -489,8 +351,8 @@ void Nag::applyState()
AquariaMenuItem *buy = new AquariaMenuItem();
buy->followCamera = 1;
buy->position = Vector(630, 400); //300, 540);
//buy->setLabel("Buy");
buy->position = Vector(630, 400);
buy->useGlow("particles/glow", 480, 128);
buy->event.set(MakeFunctionEvent(Nag, onBuy));
buy->setDirMove(DIR_LEFT, buy);
@ -501,7 +363,7 @@ void Nag::applyState()
AquariaMenuItem *exit = new AquariaMenuItem();
exit->followCamera = 1;
exit->position = Vector(732, 543);
//exit->setLabel("Exit");
exit->useGlow("particles/glow", 128, 64);
exit->event.set(MakeFunctionEvent(Nag, onExit));
exit->setDirMove(DIR_LEFT, exit);
@ -518,7 +380,7 @@ void Nag::applyState()
ic = 0;
irot.clear();
//Vector framePos(235, 405);
Vector framePos(240, 400);
Vector frameScale(0.98, 0.98);

View file

@ -68,7 +68,7 @@ protected:
bool done;
Precacher cachy;
//void update(float dt);
};
class Intro2 : public StateObject

View file

@ -92,7 +92,7 @@ const int FLAG_SPIRIT_DRASK = 126;
const int FLAG_SPIRIT_DRUNIAD = 127;
const int FLAG_TRANSTURTLE_VEIL01 = 130;
const int FLAG_TRANSTURTLE_OPENWATER06 = 131;
//const int FLAG_TRANSTURTLE_OPENWATER06 = 131;
const int FLAG_TRANSTURTLE_FOREST04 = 132;
const int FLAG_TRANSTURTLE_OPENWATER03 = 133;
const int FLAG_TRANSTURTLE_FOREST05 = 134;
@ -104,15 +104,15 @@ const int FLAG_TRANSTURTLE_FINALBOSS = 139;
const int FLAG_SEAHORSEBESTTIME = 247;
const int FLAG_MINIBOSS_START = 700;
const int FLAG_MINIBOSS_NAUTILUSPRIME = 700;
//const int FLAG_MINIBOSS_START = 700;
//const int FLAG_MINIBOSS_NAUTILUSPRIME = 700;
const int FLAG_MINIBOSS_KINGJELLY = 701;
const int FLAG_MINIBOSS_MERGOG = 702;
const int FLAG_MINIBOSS_CRAB = 703;
const int FLAG_MINIBOSS_OCTOMUN = 704;
const int FLAG_MINIBOSS_MANTISSHRIMP = 705;
const int FLAG_MINIBOSS_PRIESTS = 706;
const int FLAG_MINIBOSS_END = 720;
//const int FLAG_MINIBOSS_PRIESTS = 706;
//const int FLAG_MINIBOSS_END = 720;
//-----------------------------------------------------------------------------
@ -126,11 +126,7 @@ const int FLAG_MINIBOSS_END = 720;
#endif
StatsAndAchievements::StatsAndAchievements()
{
/*
std::ostringstream os;
os << "app_id: " << SteamUtils()->GetAppID();
debugLog(os.str());
*/
#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL
unlockedDisplayTimestamp = -1.0f;
@ -140,21 +136,7 @@ StatsAndAchievements::StatsAndAchievements()
statsValid = false;
storeStats = false;
/*
m_flGameFeetTraveled = 0;
m_nTotalGamesPlayed = 0;
m_nTotalNumWins = 0;
m_nTotalNumLosses = 0;
m_flTotalFeetTraveled = 0;
m_flMaxFeetTraveled = 0;
m_flAverageSpeed = 0;
m_hDisplayFont = pGameEngine->HCreateFont( ACHDISP_FONT_HEIGHT, FW_MEDIUM, false, "Arial" );
if ( !m_hDisplayFont )
OutputDebugString( "Stats font was not created properly, text won't draw\n" );
*/
}
#ifdef _MSC_VER
#pragma warning( pop )
@ -379,11 +361,11 @@ void StatsAndAchievements::OnGameStateChange( EClientGameState eNewState )
//-----------------------------------------------------------------------------
void StatsAndAchievements::EvaluateAchievement( Achievement &achievement )
{
//debugLog("Eval...");
// Already have it?
if ( achievement.achieved ) {
//debugLog(std::string(achievement.chAchievementID) + " was already achieved");
return;
}
@ -423,11 +405,7 @@ void StatsAndAchievements::EvaluateAchievement( Achievement &achievement )
|| (dsq->continuity.recipes[i].result == "VeggieSoup" && didVeggieSoup))
{}
else {
/*
std::ostringstream os;
os << "doesn't know recipe: " << dsq->continuity.recipes[i].result;
debugLog(os.str());
*/
knowAll = false;
}
}
@ -442,20 +420,7 @@ void StatsAndAchievements::EvaluateAchievement( Achievement &achievement )
case ACH_MASS_TRANSIT:
{
/*
debugLog("eval ACH_MASS_TRANSIT");
std::ostringstream os;
os << "FLAG_TRANSTURTLE_VEIL01: " << dsq->continuity.getFlag(FLAG_TRANSTURTLE_VEIL01) << "\n";
os << "FLAG_TRANSTURTLE_VEIL02: " << dsq->continuity.getFlag(FLAG_TRANSTURTLE_VEIL02) << "\n";
os << "FLAG_TRANSTURTLE_OPENWATER03: " << dsq->continuity.getFlag(FLAG_TRANSTURTLE_OPENWATER03) << "\n";
os << "FLAG_TRANSTURTLE_FOREST04: " << dsq->continuity.getFlag(FLAG_TRANSTURTLE_FOREST04) << "\n";
os << "FLAG_TRANSTURTLE_FOREST05: " << dsq->continuity.getFlag(FLAG_TRANSTURTLE_FOREST05) << "\n";
os << "FLAG_TRANSTURTLE_MAINAREA: " << dsq->continuity.getFlag(FLAG_TRANSTURTLE_MAINAREA) << "\n";
os << "FLAG_TRANSTURTLE_SEAHORSE: " << dsq->continuity.getFlag(FLAG_TRANSTURTLE_SEAHORSE) << "\n";
os << "FLAG_TRANSTURTLE_ABYSS03: " << dsq->continuity.getFlag(FLAG_TRANSTURTLE_ABYSS03) << "\n";
os << "FLAG_TRANSTURTLE_FINALBOSS: " << dsq->continuity.getFlag(FLAG_TRANSTURTLE_FINALBOSS) << "\n";
debugLog(os.str());
*/
if (dsq->continuity.getFlag(FLAG_TRANSTURTLE_VEIL01) > 0
&& dsq->continuity.getFlag(FLAG_TRANSTURTLE_VEIL02) > 0
@ -481,11 +446,7 @@ void StatsAndAchievements::EvaluateAchievement( Achievement &achievement )
{
WorldMapTile *tile = dsq->continuity.worldMap.getWorldMapTile(i);
if (!tile->revealed && (nocasecmp(tile->name, "thirteenlair") != 0)) {
/*
std::ostringstream os;
os << "does not have: " << tile->name;
debugLog(os.str());
*/
hasAllMap = false;
break;
}
@ -506,7 +467,7 @@ void StatsAndAchievements::EvaluateAchievement( Achievement &achievement )
break;
case ACH_AQUIRE_ALL_SONGS:
//debugLog("eval ACH_AQUIRE_ALL_SONGS");
if (dsq->continuity.hasSong(SONG_BIND)
&& dsq->continuity.hasSong(SONG_SHIELDAURA)
&& dsq->continuity.hasSong(SONG_LI)
@ -518,14 +479,14 @@ void StatsAndAchievements::EvaluateAchievement( Achievement &achievement )
&& dsq->continuity.hasSong(SONG_FISHFORM)
&& dsq->continuity.hasSong(SONG_SPIRITFORM))
{
//errorLog("ACH_AQUIRE_ALL_SONGS!");
UnlockAchievement(achievement);
}
break;
// gameplay
case ACH_DEFEAT_PRIESTS:
//if (dsq->continuity.getFlag(FLAG_MINIBOSS_PRIESTS) > 0)
if (dsq->continuity.hasSong(SONG_SPIRITFORM))
{
UnlockAchievement(achievement);
@ -618,8 +579,8 @@ void StatsAndAchievements::EvaluateAchievement( Achievement &achievement )
break;
case ACH_MOMMY_AND_DADDY:
//if (dsq->continuity.getFlag(SUNKENCITY_BOSSDONE) > 0)
//setFlag(FLAG_SUNKENCITY_PUZZLE, SUNKENCITY_BOSSDONE)
if (dsq->continuity.getFlag(FLAG_SUNKENCITY_PUZZLE) >= SUNKENCITY_BOSSDONE)
{
UnlockAchievement(achievement);
@ -723,16 +684,8 @@ void StatsAndAchievements::entityDied(Entity *eDead)
biteDeathComboCounter = 0;
}
/*
eDead->getState() ==
if (eDead->name == "monkey") {
// we killed a monkey, but how?
if (eDead->lastDamage.damageType == DT_AVATAR_VINE) {
// with a nature form vine
flungMonkey = true;
}
}
*/
}
void StatsAndAchievements::update(float dt)
@ -748,15 +701,11 @@ void StatsAndAchievements::update(float dt)
if (!rodeEkkritToTheStars) {
if (!dsq->game->isPaused() && b->on) {
//debugLog("boneLock->entity->name: " + b->entity->name);
if (b->entity->name == "ekkrit") {
ridingEkkritTime += dt;
/*
std::ostringstream os;
os << "ridingEkkritTime: " << ridingEkkritTime;
debugLog(os.str());
*/
if (ridingEkkritTime >= ridingEkkritTimeMax) {
rodeEkkritToTheStars = true;

View file

@ -155,7 +155,7 @@ private:
// Should we store stats this frame?
bool storeStats;
PlayStats playStats;
// PlayStats playStats;
// Current Stat details
//float m_flGameFeetTraveled;

View file

@ -25,7 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
SteamRender::SteamRender() : RenderObject()
{
cull = false;
//alpha = 0.1f;
alpha = 0.7;
setTexture("Particles/Steam");
texture->repeat = true;
@ -40,9 +40,8 @@ void SteamRender::onUpdate(float dt)
void SteamRender::onRender()
{
#ifdef BBGE_BUILD_OPENGL
//glDisable(GL_CULL_FACE);
//int qs = 0;
for (Path *p = dsq->game->getFirstPathOfType(PATH_STEAM); p; p = p->nextOfType)
{
@ -84,7 +83,7 @@ void SteamRender::onRender()
const float len = diff.getLength2D();
const float texScale = len/256.0f;
//qs++;
glBegin(GL_QUAD_STRIP);
glColor4f(1,1,1,0);
glTexCoord2f((0)*texScale+p->animOffset, 0);
@ -121,7 +120,6 @@ void SteamRender::onRender()
}
}
//glEnable(GL_CULL_FACE);
#endif
}

View file

@ -50,7 +50,6 @@ void Strand::onUpdate(float dt)
void Strand::onRender()
{
#ifdef BBGE_BUILD_OPENGL
const int numSegments = segments.size();
if (numSegments == 0) return;
@ -59,8 +58,8 @@ void Strand::onRender()
glLineWidth(1);
glBegin(GL_LINE_STRIP);
//glColor4f(0.25,0.25,0.5,1);
// Use fixed-point math to speed things up. --achurch
unsigned int r = (unsigned int)(color.x * (255<<8));
unsigned int g = (unsigned int)(color.y * (255<<8));
unsigned int b = (unsigned int)(color.z * (255<<8));
@ -90,5 +89,4 @@ void Strand::onRender()
glVertex2f(segments[i]->position.x, segments[i]->position.y);
}
glEnd();
#endif
}

View file

@ -48,7 +48,7 @@ void StringBank::load()
void StringBank::_load(const std::string &file)
{
//debugLog("StringBank::load("+file+")");
InStream in(file.c_str());
@ -59,9 +59,7 @@ void StringBank::_load(const std::string &file)
{
std::getline(in, line);
//std::ostringstream os;
//os << idx << ": StringBank Read Line: " << line;
//debugLog(os.str());
if (!line.empty() && line[0] == ' ')
line = line.substr(1, line.size());

View file

@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "../BBGE/DebugFont.h"
#include "../BBGE/BitmapFont.h"
//#define DISABLE_SUBS
SubtitlePlayer::SubtitlePlayer()
{
@ -130,7 +130,7 @@ void SubtitlePlayer::update(float dt)
// set text
debugLog(subLines[curLine].line);
dsq->subtext->scrollText(subLines[curLine].line, 0.02);
//dsq->subtext->scrollText(subLines[curLine].line, 0.1);
// advance
curLine++;
}

View file

@ -114,7 +114,7 @@ void ToolTip::onUpdate(float dt)
break;
}
const float t = 0.0;//0.4;//0.05;
const float t = 0.0;
if (in && (required || dsq->user.control.toolTipsOn))
{
back->alpha.interpolateTo(1, t);

View file

@ -32,7 +32,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
void UserSettings::save()
{
//initInputCodeMap();
XMLDocument doc;
{
@ -268,7 +268,7 @@ void UserSettings::save()
doc.SaveFile(userSettingsFilename.c_str());
#endif
//clearInputCodeMap();
}
static void readInt(XMLElement *xml, const char *elem, const char *att, int *toChange)
@ -328,7 +328,7 @@ void UserSettings::load(bool doApply, const std::string &overrideFile)
}
control.actionSet.clearActions();
//initInputCodeMap();
control.actionSet.addActionInput("lmb");
control.actionSet.addActionInput("rmb");
@ -419,9 +419,7 @@ void UserSettings::load(bool doApply, const std::string &overrideFile)
readInt(xml_video, "FpsSmoothing", "v", &video.fpsSmoothing);
/*
readInt(xml_video, "Parallax", "on", &video.parallaxOn);
*/
XMLElement *xml_parallax = xml_video->FirstChildElement("Parallax");
if (xml_parallax)
{
@ -484,12 +482,10 @@ void UserSettings::load(bool doApply, const std::string &overrideFile)
xml_action = xml_actionSet->FirstChildElement();
while (xml_action)
{
std::string name = xml_action->Attribute("name");
if (!name.empty())
const char *name = xml_action->Attribute("name");
if (name && *name)
{
ActionInput *ai = control.actionSet.addActionInput(name);
ai->fromString(xml_action->Attribute("input"));
}
xml_action = xml_action->NextSiblingElement();
@ -534,7 +530,7 @@ void UserSettings::load(bool doApply, const std::string &overrideFile)
network.masterServer = serv;
}
//clearInputCodeMap();
if (system.locale.empty())
{
@ -578,11 +574,6 @@ void UserSettings::apply()
if (dsq->game)
{
dsq->game->bindInput();
if (dsq->game->avatar)
{
dsq->game->avatar->updateHeartbeatSfx();
}
}
dsq->bindInput();

View file

@ -1,104 +0,0 @@
/*
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 "WaterFont.h"
#include "DSQ.h"
#include "Game.h"
#include "Avatar.h"
#include "../BBGE/Particles.h"
WaterFont::WaterFont() : BitmapText(&dsq->font)
{
pTime = 0;
setBitmapFontEffect(BFE_SHADOWBLUR);
setFontSize(26);
}
//const float interval = 0.015;
void spawnWaterFontParticle(RenderObject *me, Vector position, int size, float life, int layer)
{
float t = life;
int angle = rand()%360;
int spd = 10;
PauseQuad *q = new PauseQuad;
q->setTexture("particles/spark");
q->setBlendType(RenderObject::BLEND_ADD);
q->color.ensureData();
q->color.data->path.addPathNode(Vector(1,1,1),0);
q->color.data->path.addPathNode(Vector(0.1,0.75,1),0.3);
q->color.data->path.addPathNode(Vector(0.05,0.5,1),0.8);
q->color.data->path.addPathNode(Vector(0,0,1),1.0);
q->color.startPath(t);
//q->color = Vector(1, 0.5, 0);
q->alpha.ensureData();
q->alpha.data->path.addPathNode(0, 0);
q->alpha.data->path.addPathNode(0.2, 0.5);
q->alpha.data->path.addPathNode(0, 1.0);
q->alpha.startPath(t);
q->velocity = Vector(sinf(angle)*spd,cosf(angle)*spd);
//q->velocity += vel;
q->setLife(1.0);
q->setDecayRate(1.0f/t);
q->rotation.z = rand()%360;
q->setWidthHeight(size, size);
q->position = position;
q->cull = false;
//q->influenced = 16;
dsq->game->addRenderObject(q, layer);
//me->addChild(q);
//me->renderBeforeParent = false;
//me->parentManagedPointer = true;
//q->update(interval);
}
//const float interval = 0.012;
const float interval = 0.08;
void WaterFont::onUpdate(float dt)
{
BitmapText::onUpdate(dt);
Vector sp(position.x-alignWidth*0.5f-15, 5+position.y+5);
Vector ep(position.x+alignWidth*0.5f+15, 5+position.y+10);
pTime += dt;
while (pTime > interval)
{
int dist = alignWidth / 40;
for (int i = 0; i < dist; i++)
{
Vector p(rand()%(int(ep.x-sp.x))+sp.x, rand()%(int(ep.y-sp.y))+sp.y);
/*
std::ostringstream os;
os << "p(" << p.x << ", " << p.y << ")";
debugLog(os.str());
*/
Vector d(rand()%200-100,rand()%200-100);
d *= 0.01f;
spawnWaterFontParticle(this, p, 64, 1.2, LR_PARTICLES);
}
pTime -= interval;
}
}

View file

@ -1,35 +0,0 @@
/*
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.
*/
#ifndef WATERFONT_H
#define WATERFONT_H
#include "../BBGE/BitmapFont.h"
class WaterFont : public BitmapText
{
public:
WaterFont();
protected:
float pTime;
void onUpdate(float dt);
};
#endif

View file

@ -1,37 +1,10 @@
/*
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 "WaterSurfaceRender.h"
#include "DSQ.h"
#include "Game.h"
#include "Avatar.h"
/*
{
public:
WaterSurfaceRender();
void render();
protected:
void onRender();
};
*/
namespace WaterSurfaceRenderStuff
{
@ -44,7 +17,7 @@ WaterSurfaceRender::WaterSurfaceRender() : Quad()
{
color = baseColor;
cull = false;
//alpha = 0.98;
alpha = 0.75;
if (dsq->useFrameBuffer && dsq->frameBuffer.isInited())
@ -54,33 +27,17 @@ WaterSurfaceRender::WaterSurfaceRender() : Quad()
//addChild(qSurface);
//qSurface->renderBeforeParent = 1;
/*
qLine = new Quad("water/water-line", Vector(0,50));
qLine->repeatTextureToFill(1);
addChild(qLine);
*/
qLine = new Quad("water/water-line", Vector(0,0));
qLine->repeatTextureToFill(1);
qLine->cull = false;
dsq->game->addRenderObject(qLine, LR_WATERSURFACE2);
qLine2 = 0;
/*
qLine2 = new Quad("water/water-line", Vector(0,0));
qLine2->repeatTextureToFill(1);
qLine2->cull = false;
//qLine2->flipVertical();
dsq->game->addRenderObject(qLine2, LR_ELEMENTS3);
*/
//water/water-surface
qSurface = new Quad("missingimage", Vector(0,0));
//qSurface->parentManagedPointer = 1;
qSurface->cull = false;
qSurface->repeatTextureToFill(1);
dsq->game->addRenderObject(qSurface, LR_WATERSURFACE2);
@ -91,14 +48,14 @@ WaterSurfaceRender::WaterSurfaceRender() : Quad()
void WaterSurfaceRender::render()
{
//if (dsq->frameBuffer.isInited())
if (dsq->game->waterLevel.x > 0)
{
qLine->alpha = qSurface->alpha = 1;
//qSurface->alpha = 0;
position.x = core->screenCenter.x;
position.y = dsq->game->waterLevel.x;
@ -117,7 +74,7 @@ void WaterSurfaceRender::render()
}
offset.y = (height*scale.y);
//offset.y += 10;
offset.y -= 40*scale.y;
@ -125,11 +82,7 @@ void WaterSurfaceRender::render()
qLine->alphaMod = 0.5;
qLine->setWidth(width);
/*
qLine2->position = position + offset;
qLine2->alphaMod = 0.5;
qLine2->width = this->width;
*/
qSurface->position = position+offset;
qSurface->scale = scale.y;
@ -137,43 +90,30 @@ void WaterSurfaceRender::render()
qSurface->setWidthHeight(width, height);
float bit = core->cameraPos.x/300.0f;
//qSurface->texOff.x = bit;
qLine->texOff.x = bit;
//qSurface->refreshRepeatTextureToFill();
qLine->refreshRepeatTextureToFill();
/*
qLine2->texOff.x = bit;
qLine2->refreshRepeatTextureToFill();
*/
if (dsq->useFrameBuffer && dsq->frameBuffer.isInited())
{
qSurface->alphaMod = 0.5;
Quad::render();
//qLine->alpha = qSurface->alpha = 0;
}
else
{
//color = baseColor;
Quad::render();
//qSurface->alphaMod = 0.6;
//deleteGrid();
//color = Vector(1,1,1);
}
/*
//core->setupRenderPositionAndScale();
glClear(GL_DEPTH_BUFFER_BIT);
core->currentLayerPass = 0;
dsq->game->avatar->color = Vector(1,0,0);
dsq->game->avatar->render();
dsq->game->avatar->color = Vector(1,1,1);
//glBindTexture(GL_TEXTURE_2D, 0);
*/
}
else
{
@ -188,7 +128,6 @@ void WaterSurfaceRender::render()
void WaterSurfaceRender::onRender()
{
#ifdef BBGE_BUILD_OPENGL
if (dsq->game->waterLevel == 0) return;
if (dsq->useFrameBuffer && dsq->frameBuffer.isInited())
{
@ -218,22 +157,13 @@ void WaterSurfaceRender::onRender()
Quad::onRender();
/*
glTranslatef(0, -height - 20);
height = 40;
Quad::onRender();
*/
glBindTexture(GL_TEXTURE_2D, 0);
}
else
{
/*
upperLeftTextureCoordinates.x = 0;
lowerRightTextureCoordinates.x = core->frameBuffer.getWidthP();
*/
glColor4f(0.4, 0.7, 0.8, 0.2);
Quad::onRender();
@ -242,19 +172,6 @@ void WaterSurfaceRender::onRender()
RenderObject::lastTextureApplied = 0;
//dsq->game->avatar->setRenderPass(0);
/*
glEnable(GL_SCISSOR_TEST);
float realSz2 = sz2*scale.x;
float factor = float(core->getWindowWidth()) / 800.0f;
glScissor(dsq->game->waterLevel.x*factor - realSz2 * factor, 600*factor-(position.y+realSz2)*factor, realSz2*2*factor, realSz2*2*factor);
*/
//glDisable(GL_SCISSOR_TEST);
#endif
}

View file

@ -136,14 +136,7 @@ void Web::onUpdate(float dt)
}
if (hit)
{
/*
if (!e->vel.isZero())
{
Vector n = e->vel;
n.setLength2D(e->getv(EV_WEBSLOW)*dt);
e->vel -= n;
}
*/
e->vel /= float(e->getv(EV_WEBSLOW)) * dt;
}
}
@ -153,12 +146,11 @@ void Web::onUpdate(float dt)
void Web::onRender()
{
#ifdef BBGE_BUILD_OPENGL
glBindTexture(GL_TEXTURE_2D, 0);
//glDisable(GL_BLEND);
glLineWidth(4);
//glDisable(GL_CULL_FACE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBegin(GL_LINES);
@ -172,5 +164,4 @@ void Web::onRender()
}
glEnd();
#endif
}

View file

@ -157,28 +157,19 @@ public:
BeaconRender(BeaconData *beaconData) : Quad(), beaconData(beaconData)
{
renderQuad = false;
setTexture("gui/minimap/ripple"); //"particles/softring"); // or whatever
setTexture("gui/minimap/ripple");
position = beaconData->pos;
truePosition = beaconData->pos;
followCamera = 1;
/*
scale = Vector(0.2, 0.2);
scale.interpolateTo(Vector(0.5, 0.5), 0.75, -1, 1, 1);
*/
alpha = 0.5;
color = beaconData->color;
/*
pe = new ParticleEffect();
pe->load("sparkle");
pe->followCamera = 1;
pe->start();
core->addRenderObject(pe, LR_PARTICLES);
*/
spawnBitTimer = 0;
}
//float spawnBitTimer;
Vector truePosition;
ParticleEffect *pe;
@ -188,7 +179,7 @@ public:
void render()
{
//setProperPosition();
Quad::render();
}
@ -221,7 +212,7 @@ protected:
{
Quad::onUpdate(dt);
//setProperPosition();
if (!dsq->game->worldMapRender->isOn()) return;
@ -244,7 +235,7 @@ protected:
int x = sinf(radius)*len;
int y = cosf(radius)*len;
//truePosition +
float t = 0.75;
WorldMapBoundQuad *q = new WorldMapBoundQuad(Vector(x, y, 0));
q->setTexture("particles/glow");
@ -257,16 +248,15 @@ protected:
q->color = color;
q->scale = Vector(pscale, pscale);
//q->fadeAlphaWithLife = 1;
q->setLife(1);
q->setDecayRate(1.0f/t);
q->setBlendType(BLEND_ADD);
addChild(q, PM_POINTER);
//std::ostringstream os;
//os << "children: " << children.size();
//debugLog(os.str());
}
else
{
@ -276,9 +266,6 @@ protected:
/*
*/
}
};
@ -295,41 +282,26 @@ public:
blinkTimer = 0;
alphaMod = 0.66;
canMove = gemData->canMove;
//canMove = true;
//gemData->userString = "HI THERE!";
std::string useString = gemData->userString;
/*
if (gemData->userString.empty())
{
if (gemData->name == "savepoint")
useString = "Memory Crystal";
if (gemData->name == "cook")
useString = "Kitchen";
}
*/
/*
text = new BitmapText(&dsq->smallFont);
text->position = Vector(0, -20);
text->setText(gemData->userString);
addChild(text, PM_POINTER);
*/
text = new TTFText(&dsq->fontArialSmall);//new DebugFont(10, useString);
text->offset = Vector(0, 4); //Vector(0,5);
text = new TTFText(&dsq->fontArialSmall);
text->offset = Vector(0, 4);
text->setText(useString);
text->setAlign(ALIGN_CENTER);
textBG = new RoundedRect();
textBG->setWidthHeight(text->getActualWidth() + 20, 25, 10); // 30
textBG->setWidthHeight(text->getActualWidth() + 20, 25, 10);
textBG->alpha = 0;
textBG->followCamera = 1;
game->addRenderObject(textBG, LR_WORLDMAPHUD);
textBG->addChild(text, PM_POINTER);
//game->addRenderObject(text, LR_WORLDMAPHUD);
}
void destroy()
@ -348,24 +320,8 @@ public:
{
this->blink = blink;
//if (blink)
//{
// scale = Vector(0.5, 0.5);
// scale.interpolateTo(Vector(1,1), 0.5, -1, 1);
// /*
// alpha = 0.5;
// alpha.interpolateTo(1, 0.5, -1, 1);
// */
//}
//else
//{
// scale.stop();
// scale = Vector(1,1);
// /*
// alpha.stop();
// alpha = 1;
// */
//}
}
bool canMove;
protected:
@ -373,7 +329,7 @@ protected:
float blinkTimer;
bool blink;
GemData *gemData;
//BitmapText *text;
TTFText *text;
RoundedRect *textBG;
void onUpdate(float dt)
@ -421,22 +377,22 @@ protected:
{
core->sound->playSfx("Gem-Move");
mover = this;
//offset = Vector(position - core->mouse.position);
//position += core->mouse.position - wp;
//offset = Vector(0, 4);
}
}
else if (mover == this)
{
//position = core->mouse.position;
position += (core->mouse.position - wp)/parent->scale.x;
if (!core->mouse.buttons.left)
{
mover = 0;
core->sound->playSfx("Gem-Place");
//position += offset;
//offset = Vector(0,0);
//offset = Vector(0,0);
gemData->pos = position;
}
}
@ -450,20 +406,14 @@ protected:
if ((core->mouse.position - wp).isLength2DIn(GEM_GRAB))
{
//text->alpha.interpolateTo(1, 0.1);
/*
if (!gemData->userString.empty())
textBG->alpha.interpolateTo(1, 0.1);
*/
if (!gemData->userString.empty())
textBG->show();
}
else
{
/*
text->alpha.interpolateTo(0, 0.1);
textBG->alpha.interpolateTo(0, 0.1);
*/
if (textBG->alpha == 1)
textBG->hide();
}
@ -502,7 +452,6 @@ void WorldMapRender::setProperTileColor(WorldMapTile *tile)
}
}
#ifdef AQUARIA_BUILD_MAPVIS
static void tileDataToVis(WorldMapTile *tile, Vector **vis)
{
@ -615,20 +564,12 @@ static void resetTileAlpha(WorldMapTile *tile, const unsigned char *savedTexData
tile->q->texture->write(0, 0, tile->q->texture->width, tile->q->texture->height, savedTexData);
}
#endif // AQUARIA_BUILD_MAPVIS
void WorldMapRender::setVis(WorldMapTile *tile)
{
if (!tile) return;
#ifdef AQUARIA_BUILD_MAPVIS
/*
if (lastVisQuad)
{
lastVisQuad->alphaMod = 0.5;
lastVisQuad->color = Vector(0.7, 0.8, 1);
}
*/
tile->q->color = Vector(1,1,1);
tile->q->alphaMod = 1;
@ -645,13 +586,11 @@ void WorldMapRender::setVis(WorldMapTile *tile)
lastVisQuad = tile->q;
lastVisTile = tile;
#endif
}
void WorldMapRender::clearVis(WorldMapTile *tile)
{
if (!tile) return;
#ifdef AQUARIA_BUILD_MAPVIS
if (visMethod == VIS_VERTEX)
{
if (tile->q)
@ -666,7 +605,6 @@ void WorldMapRender::clearVis(WorldMapTile *tile)
savedTexData = 0;
}
}
#endif
}
@ -704,19 +642,7 @@ WorldMapRender::WorldMapRender() : RenderObject(), ActionMapper()
savedTexData = 0;
/*
bg = new Quad("", Vector(400,300));
bg->setWidthHeight(810, 610);
bg->setSegs(32, 32, 0.5, 0.5, 0.008, 0.008, 2.0, 1);
bg->alphaMod = 0.5;
bg->alpha = 0;
bg->followCamera = 1;
bg->repeatTextureToFill(true);
//bg->parentManagedPointer = 1;
dsq->game->addRenderObject(bg, LR_MESSAGEBOX);
bg->renderQuad = false;
*/
int num = dsq->continuity.worldMap.getNumWorldMapTiles();
std::string n = dsq->game->sceneName;
@ -789,14 +715,14 @@ WorldMapRender::WorldMapRender() : RenderObject(), ActionMapper()
tophud->alpha = 0;
dsq->game->addRenderObject(tophud, LR_WORLDMAPHUD);
//int fontSize = 6;
float aly = 26, aly2 = 18;
float sz = 0.6;
//hover
areaLabel = new BitmapText(&dsq->smallFont);
areaLabel->scale = Vector(sz,sz);
//areaLabel->setFontSize(fontSize);
areaLabel->setAlign(ALIGN_CENTER);
areaLabel->followCamera = 1;
areaLabel->position = Vector(150,aly);
@ -805,7 +731,7 @@ WorldMapRender::WorldMapRender() : RenderObject(), ActionMapper()
//in
areaLabel2 = new BitmapText(&dsq->smallFont);
//areaLabel2->setFontSize(fontSize);
areaLabel2->scale = Vector(sz,sz);
areaLabel2->followCamera = 1;
areaLabel2->setAlign(ALIGN_CENTER);
@ -816,7 +742,7 @@ WorldMapRender::WorldMapRender() : RenderObject(), ActionMapper()
//select
areaLabel3 = new BitmapText(&dsq->smallFont);
areaLabel3->scale = Vector(sz,sz);
//areaLabel3->setFontSize(fontSize);
areaLabel3->followCamera = 1;
areaLabel3->setAlign(ALIGN_CENTER);
areaLabel3->position = Vector(650, aly);
@ -833,7 +759,7 @@ WorldMapRender::WorldMapRender() : RenderObject(), ActionMapper()
bindInput();
underlay = new Gradient;
//underlay->makeVertical(Vector(0.5,0.5,1), Vector(0,0,0.5));
underlay->makeVertical(Vector(0.25,0.25,0.5), Vector(0,0,0.25));
underlay->position = Vector(400,300);
underlay->autoWidth = AUTO_VIRTUALWIDTH;
@ -852,14 +778,14 @@ WorldMapRender::WorldMapRender() : RenderObject(), ActionMapper()
addHintQuad2->alpha = 0;
dsq->game->addRenderObject(addHintQuad2, LR_WORLDMAPHUD);
//helpButton->event.set(MakeFunctionEvent(WorldMapRender, onToggleHelpScreen));
helpButton = new AquariaMenuItem;
helpButton->event.setActionMapperCallback(this, ACTION_TOGGLEHELPSCREEN, 0);
helpButton->useQuad("gui/icon-help");
helpButton->useGlow("particles/glow", 40, 40);
helpButton->useSound("Click");
helpButton->alpha = 0;
//helpButton->position = Vector(800-20, 20);
dsq->game->addRenderObject(helpButton, LR_WORLDMAPHUD);
}
@ -886,7 +812,7 @@ void WorldMapRender::bindInput()
void WorldMapRender::destroy()
{
//clearVis(activeTile);
for (int i = 0; i < dsq->continuity.worldMap.getNumWorldMapTiles(); i++)
{
WorldMapTile *tile = dsq->continuity.worldMap.getWorldMapTile(i);
@ -939,7 +865,7 @@ void WorldMapRender::onUpdate(float dt)
if (alpha.x > 0)
{
//if (activeTile && activeTile==originalActiveTile && !gemMovers.empty())
if (originalActiveTile && !gemMovers.empty())
{
gemMovers.back()->position = getAvatarWorldMapPosition();
@ -1009,7 +935,7 @@ void WorldMapRender::onUpdate(float dt)
activeTile = selectedTile;
activeQuad = activeTile->q;
//activeTile->gridPos = activeTile->q->position;
if (activeQuad)
{
dsq->clickRingEffect(activeQuad->getWorldPosition(), 0);
@ -1126,7 +1052,7 @@ void WorldMapRender::onUpdate(float dt)
zoomMax = exteriorZoomMax;
}
float scrollAmount = 0.2;//0.25;
float scrollAmount = 0.2;
if (core->mouse.scrollWheelChange)
{
@ -1219,7 +1145,6 @@ void WorldMapRender::onUpdate(float dt)
}
else
{
#ifdef AQUARIA_BUILD_MAPVIS
if (!dsq->isInCutscene() && dsq->game->avatar && activeTile
#ifdef AQUARIA_BUILD_SCENEEDITOR
&& !dsq->game->sceneEditor.isOn()
@ -1261,7 +1186,6 @@ void WorldMapRender::onUpdate(float dt)
}
}
}
#endif
}
lastMousePosition = core->mouse.position;
@ -1387,7 +1311,7 @@ void WorldMapRender::toggle(bool turnON)
{
restoreVel = dsq->game->avatar->vel;
dsq->game->avatar->vel = Vector(0,0,0);
//dsq->game->avatar->idle();
dsq->game->togglePause(true);
core->sound->playSfx("menu-open");
@ -1436,7 +1360,7 @@ void WorldMapRender::toggle(bool turnON)
alpha.interpolateTo(1, 0.2);
//dsq->game->hudUnderlay->alpha.interpolateTo(WORLDMAP_UNDERLAY_ALPHA, 0.2);
underlay->alpha.interpolateTo(WORLDMAP_UNDERLAY_ALPHA, 0.2);
addHintQuad1->alpha.interpolateTo(1.0, 0.2);
@ -1450,8 +1374,8 @@ void WorldMapRender::toggle(bool turnON)
if ((*i).on)
{
BeaconRender *b = new BeaconRender(&(*i));
//b->position = (*i).pos;
//game->addRenderObject(b, layer+1);
addChild(b, PM_POINTER);
beaconRenders.push_back(b);
}
@ -1496,14 +1420,6 @@ void WorldMapRender::toggle(bool turnON)
}
//setVis(activeTile);
/*
for (int i = 0; i < LR_MENU; i++)
{
RenderObjectLayer *rl = dsq->getRenderObjectLayer(i);
rl->visible = true;
}
*/
core->sound->playSfx("Menu-Close");
@ -1513,7 +1429,7 @@ void WorldMapRender::toggle(bool turnON)
alpha.interpolateTo(0, 0.2);
dsq->game->togglePause(false);
//dsq->game->hudUnderlay->alpha.interpolateTo(0, 0.2);
underlay->alpha.interpolateTo(0, 0.2);
addHintQuad1->alpha.interpolateTo(0, 0.2);
addHintQuad2->alpha.interpolateTo(0, 0.2);
@ -1522,14 +1438,14 @@ void WorldMapRender::toggle(bool turnON)
for (GemMovers::iterator i = gemMovers.begin(); i != gemMovers.end(); i++)
{
//removeChild(*i);
(*i)->safeKill();
}
gemMovers.clear();
for (BeaconRenders::iterator i = beaconRenders.begin(); i != beaconRenders.end(); i++)
{
//removeChild(*i);
(*i)->safeKill();
}
beaconRenders.clear();
@ -1546,7 +1462,7 @@ void WorldMapRender::createGemHint(const std::string &gfx)
doubleClickTimer = 0;
GemData *g = dsq->continuity.pickupGem(gfx, false);
g->canMove = 1;
g->pos = getAvatarWorldMapPosition();// + Vector(0, -20);
g->pos = getAvatarWorldMapPosition();
g->userString = useString;
addGem(g);
fixGems();
@ -1614,25 +1530,6 @@ void WorldMapRender::action (int id, int state)
}
/*
if (id == ACTION_PRIMARY && state)
{
if (doubleClickTimer > 0)
{
doubleClickTimer = 0;
GemData *g = dsq->continuity.pickupGem("pyramidyellow", false);
g->canMove = 1;
g->userString = dsq->getUserInputString("Enter Map Hint Name:", "");
addGem(g);
}
else
{
if (doubleClickTimer == 0)
{
doubleClickTimer = DOUBLE_CLICK_DELAY;
}
}
}
*/
}
}

View file

@ -337,18 +337,8 @@ WorldMapTile *WorldMap::getWorldMapTileByIndex(int index)
return 0;
}
/*
void WorldMap::revealMapIndex(int index)
{
if (index < 0 || index >= worldMapTiles.size()) return;
worldMapTiles[index].revealed = true;
}
*/
void WorldMap::hideMap()
{
for (int i = 0; i < worldMapTiles.size(); i++)

View file

@ -24,8 +24,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <Winver.h>
#include <Windows.h>
#include "resource.h" // Might as well use what's there, even though it's questionable.
#define AQUARIA_RC_FILEVERSION 1,1,3,999
#define AQUARIA_RC_PRODUCTVERSION 1,1,3,0
#define AQUARIA_RC_PRODUCTVERSION_STRING "1.1.3"

View file

@ -1,37 +0,0 @@
/*
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.
*/
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by DSQ.rc
//
#define IDI_ICON1 106
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 108
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View file

@ -13,53 +13,11 @@ 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 "ActionMapper.h"
#include "Core.h"
//bool ActionMapper::isActing(const std::string &action)
//{
// ButtonList::iterator i = actionMap[action].begin();
// for (; i != actionMap[action].end(); i++)
// {
// if (keyDownMap[(*i)])
// return true;
// }
// return false;
// //return keyDownMap[actionMap[action]];
//}
//bool ActionMapper::isActing(int actionID)
//{
// std::string action = "A";
// action[0] = char(actionID);
// ButtonList::iterator i = actionMap[action].begin();
// for (; i != actionMap[action].end(); i++)
// {
// if (keyDownMap[(*i)])
// return true;
// }
// return false;
// //return keyDownMap[actionMap[action]];
//}
//void ActionMapper::addAction (const std::string &action, int k)
//{
// actionMap[action].push_back(k);
// keyDownMap[k] = core->getKeyState(k);
//}
//
//void ActionMapper::addAction (int actionID, int k)
//{
// std::string action = "A";
// action[0] = char(actionID);
// actionMap[action].push_back(k);
// keyDownMap[k] = core->getKeyState(k);
//}
ActionMapper::ActionMapper()
{
@ -104,11 +62,7 @@ void ActionMapper::addAction (int actionID, int k)
if (ad)
{
/*
std::ostringstream os;
os << "Action ID [" << actionID << "] already exists!";
debugLog(os.str());
*/
}
else
{
@ -166,55 +120,7 @@ void ActionMapper::clearCreatedEvents()
createdEvents.clear();
}
/*
void ActionMapper::addMouseButtonAction (const std::string &action, int b)
{
actionMap[action].push_back (0-b);
keyDownMap[0-b] = mouse_b & b;
}
void ActionMapper::addJoystickButtonAction (const std::string &action, int b)
{
if (num_joysticks)
{
actionMap[action].push_back (b+9000);
keyDownMap[b+9000] = joy[0].button[b].b;
}
}
int ActionMapper::getDPad(int dir)
{
// for (int = 0; i < joy[0].num_sticks; i++)
//int s = 4;
int s = 0;
switch (dir)
{
case 0:
return (joy[0].stick[s].axis[0].d1);
break;
case 1:
return (joy[0].stick[s].axis[0].d2);
break;
case 2:
return (joy[0].stick[s].axis[1].d1);
break;
case 3:
return (joy[0].stick[s].axis[1].d2);
break;
}
return 0;
}
void ActionMapper::addJoystickDPadAction (const std::string &action, int dir)
{
if (num_joysticks)
{
actionMap[action].push_back (dir+8000);
keyDownMap[dir+8000] = getDPad(dir);
}
}
*/
void ActionMapper::enableInput()
{
@ -248,19 +154,7 @@ void ActionMapper::removeAction(int actionID)
}
}
//int ActionMapper::getKeyForAction (std::string action)
//{
// ButtonList b = actionMap[action];
// if (!b.empty())
// {
// return b[0];
// }
// else
// {
// debugLog ("no action: " +action);
// return -1;
// }
//}
bool ActionMapper::pollAction(int actionID)
{
@ -372,10 +266,7 @@ void ActionMapper::onUpdate (float dt)
{
if (inUpdate) return;
inUpdate = true;
/*
if (num_joysticks)
poll_joystick();
*/
if (cleared) cleared = false;
ActionDataSet::iterator i;
KeyDownMap oldKeyDownMap = keyDownMap;
@ -417,7 +308,7 @@ void ActionMapper::onUpdate (float dt)
out:
inUpdate = false;
// keyDownMap[k] = ;
}
void ActionMapper::clearActions()

View file

@ -48,15 +48,10 @@ public:
// funcs
ActionMapper();
virtual ~ActionMapper();
//void addAction (const std::string &action, int k);
void addAction(Event *event, int k, int state=-1);
void addAction(int actionID, int k);
/*
void addMouseButtonAction (const std::string &action, int b);
void addJoystickButtonAction (const std::string &action, int b);
void addJoystickDPadAction (const std::string &action, int dir);
int getDPad(int dir);
*/
void removeAction(int actionID);
void removeAllActions();
@ -80,9 +75,6 @@ public:
//typedef std::map <std::string, int> StringIntMap;
//StringIntMap stateCheckMap;
enum {
MOUSE_BUTTON_LEFT = 999,
MOUSE_BUTTON_RIGHT = 1000,
@ -106,7 +98,7 @@ public:
JOY1_BUTTON_15 = 2015,
JOY1_BUTTON_16 = 2016,
//JOY1_BUTTON_X360_START=2011,
X360_BTN_START = 3016,
X360_BTN_BACK = 3017,
@ -122,13 +114,13 @@ public:
enum { DPAD_LEFT = 0, DPAD_RIGHT, DPAD_UP, DPAD_DOWN };
//int getKeyForAction(std::string action);
virtual void enableInput();
virtual void disableInput();
/*void loadActionSet(const std::string &fn);*/
//nasty hack
//void forceUpdate(float dt);
Event *addCreatedEvent(Event *event);
void clearCreatedEvents();
@ -149,4 +141,3 @@ protected:

View file

@ -38,68 +38,7 @@ ActionInput *ActionSet::getActionInputByName(const std::string &name)
return 0;
}
//void ActionSet::loadAction(const std::string &name, int inputCode, InputSetType set)
//{
// ActionInput *a = getActionInputByName(name);
// if (!a)
// {
// ActionInput newa;
// newa.name = name;
// inputSet.push_back(newa);
// a = getActionInputByName(name);
//
// if (!a) return;
// }
//
// switch(set)
// {
// case INPUTSET_KEY:
// a->keyCodes.push_back(inputCode);
// break;
// case INPUTSET_JOY:
// a->joyCodes.push_back(inputCode);
// break;
// case INPUTSET_MOUSE:
// a->mouseCodes.push_back(inputCode);
// break;
// case INPUTSET_GENERAL:
// default:
// a->inputCodes.push_back(inputCode);
// break;
// }
//}
//
//void ActionSet::loadAction(const std::string &name, const std::vector<int> &inputCodes, InputSetType set)
//{
//
// ActionInput *a = getActionInputByName(name);
// if (!a)
// {
// ActionInput newa;
// newa.name = name;
// inputSet.push_back(newa);
// a = getActionInputByName(name);
//
// if (!a) return;
// }
//
// switch(set)
// {
// case INPUTSET_KEY:
// a->keyCodes = inputCodes;
// break;
// case INPUTSET_JOY:
// a->joyCodes = inputCodes;
// break;
// case INPUTSET_MOUSE:
// a->mouseCodes = inputCodes;
// break;
// case INPUTSET_GENERAL:
// default:
// a->inputCodes = inputCodes;
// break;
// }
//}
void ActionSet::importAction(ActionMapper *mapper, const std::string &name, int actionID)
{
@ -178,7 +117,7 @@ std::string ActionSet::insertInputIntoString(const std::string &string)
std::string part1 = str.substr(0, start);
std::string part3 = str.substr(end+1, str.size());
//{ToggleHelp:k0}
int thing = code.find(':');
std::string input = code.substr(0, thing);
std::string button = code.substr(thing+1, code.size());

View file

@ -39,8 +39,7 @@ public:
ActionInput *addActionInput(const std::string &name);
//void loadAction(const std::string &name, int inputCode, InputSetType set);
//void loadAction(const std::string &name, const std::vector<int> &inputCodes, InputSetType set=INPUTSET_GENERAL);
ActionInput *getActionInputByName(const std::string &name);

View file

@ -19,7 +19,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "AfterEffect.h"
//#include "math.h"
#include <assert.h>
@ -177,7 +177,6 @@ void AfterEffectManager::render()
{
assert(core->frameBuffer.isInited());
#ifdef BBGE_BUILD_OPENGL
glPushMatrix();
glDisable (GL_ALPHA_TEST);
@ -189,14 +188,12 @@ void AfterEffectManager::render()
glColor4f(1,1,1,1);
renderGrid();
//renderGridPoints();
glPopMatrix();
#endif
}
void AfterEffectManager::renderGrid()
{
#ifdef BBGE_BUILD_OPENGL
int firstShader = -1;
int lastShader = -1;
@ -237,28 +234,28 @@ void AfterEffectManager::renderGrid()
backupBuffer.startCapture();
}
//float div = xDivs;
for (int i = 0; i < (xDivs-1); i++)
{
for (int j = 0; j < (yDivs-1); j++)
{
glBegin(GL_QUADS);
//glColor3f(i/div, i/div, i/div);
glTexCoord2f(i/(float)(xDivs-1)*percentX, 1*percentY-(j)/(float)(yDivs-1)*percentY);
//glMultiTexCoord2fARB(GL_TEXTURE0_ARB,i/(float)(xDivs-1)*percentX, 1*percentY-(j)/(float)(yDivs-1)*percentY);
//glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,0);
glVertex2f(offx + vw*drawGrid[i][j].x, offy + vh*drawGrid[i][j].y);
glTexCoord2f(i/(float)(xDivs-1)*percentX, 1*percentY-(j+1)/(float)(yDivs-1)*percentY);
//glMultiTexCoord2fARB(GL_TEXTURE0_ARB,i/(float)(xDivs-1)*percentX, 1*percentY-(j+1)/(float)(yDivs-1)*percentY);
//glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,(float)(screenHeight/(yDivs-1))/16);
glVertex2f(offx + vw*drawGrid[i][j+1].x, offy + vh*drawGrid[i][j+1].y);
glTexCoord2f((i+1)/(float)(xDivs-1)*percentX, 1*percentY-(j+1)/(float)(yDivs-1)*percentY);
//glMultiTexCoord2fARB(GL_TEXTURE0_ARB,(i+1)/(float)(xDivs-1)*percentX, 1*percentY-(j+1)/(float)(yDivs-1)*percentY);
//glMultiTexCoord2fARB(GL_TEXTURE1_ARB,(float)(screenWidth/(xDivs-1))/16,(float)(screenHeight/(yDivs-1))/16);
glVertex2f(offx + vw*drawGrid[i+1][j+1].x, offy + vh*drawGrid[i+1][j+1].y);
glTexCoord2f((i+1)/(float)(xDivs-1)*percentX, 1*percentY-(j)/(float)(yDivs-1)*percentY);
//glMultiTexCoord2fARB(GL_TEXTURE0_ARB,(i+1)/(float)(xDivs-1)*percentX, 1*percentY-(j)/(float)(yDivs-1)*percentY);
//glMultiTexCoord2fARB(GL_TEXTURE1_ARB,(float)(screenWidth/(xDivs-1))/16,0);
glVertex2f(offx + vw*drawGrid[i+1][j].x, offy + vh*drawGrid[i+1][j].y);
glEnd();
}
@ -267,10 +264,6 @@ void AfterEffectManager::renderGrid()
if (activeShader)
activeShader->unbind();
float width2 = float(vw)/2;
float height2 = float(vh)/2;
if(firstShader != lastShader)
{
// From here on: secondary shader passes.
@ -355,12 +348,10 @@ void AfterEffectManager::renderGrid()
//glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
//if (bRenderGridPoints)
// renderGridPoints();
#endif
}
void AfterEffectManager::renderGridPoints()
{
#ifdef BBGE_BUILD_OPENGL
glColor4f(0.0f,0.0f,0.0f,1.0f);
for (int i = 0; i < (xDivs); i++)
{
@ -374,7 +365,6 @@ void AfterEffectManager::renderGridPoints()
glEnd();
}
}
#endif
}
void AfterEffectManager::unloadDevice()
@ -438,31 +428,15 @@ void AfterEffectManager::addEffect(Effect *e)
effects.push_back(e);
}
numEffects++;
//float lowest = 9999;
Vector base(0,0,0);
//Vector *newPos = &base;
//Vector *v;
e->position.x /= screenWidth;
//e->position.x *= xDivs;
e->position.y /= screenHeight;
//e->position.y *= yDivs;
/*
for (int x = 1; x < xDivs-1; x++)
{
for (int y = 1; y < yDivs-1; y++)
{
v = &drawGrid[x][y];
float dist = (v->x - e->position.x)*(v->x - e->position.x)+(v->y - e->position.y)*(v->y - e->position.y);
if (dist < lowest)
{
lowest = dist;
newPos = &drawGrid[x][y];
}
}
}
e->position = Vector(newPos->x, newPos->y, newPos->z);
*/
Vector base(0,0,0);
e->position.x /= screenWidth;
e->position.y /= screenHeight;
}
@ -471,18 +445,13 @@ void ShockEffect::update(float dt, Vector ** drawGrid, int xDivs, int yDivs)
{
dt *= timeMultiplier;
Effect::update(dt, drawGrid, xDivs, yDivs);
//GLdouble sx, sy,sz;
/*
gluProject(position.x,position.y,position.z,
nCameraPointer->modelMatrix,nCameraPointer->projMatrix,nCameraPointer->viewport,
&sx,&sy,&sz); // Find out where the light is on the screen.
centerPoint.Set(sx/(float)nCameraPointer->viewport[2],1-sy/(float)nCameraPointer->viewport[3],sz);
*/
centerPoint = position;
centerPoint -= ((core->screenCenter-originalCenter)*core->globalScale.x)/core->width;
//centerPoint = position/xDivs;
//centerPoint = drawGrid[xDivs/2][yDivs/2];
float xDist,yDist,tDist;
@ -490,8 +459,7 @@ void ShockEffect::update(float dt, Vector ** drawGrid, int xDivs, int yDivs)
currentDistance+=dt*frequency;
//float distFromCamp =(core->cameraPos - position).getLength2D();//v3dDist(nCameraPointer->pos, position);
//if (distFromCamp < 4)
float distFromCamp = 4;
float adjWaveLength = waveLength/distFromCamp;
@ -504,33 +472,21 @@ void ShockEffect::update(float dt, Vector ** drawGrid, int xDivs, int yDivs)
{
for (int j = 1; j < (yDivs-1); j++)
{
/*
Vector p = getNearestPointOnLine(centerPoint, centerPoint + Vector(-200, -200), Vector(drawGrid[i][j].x*core->width, drawGrid[i][j].y*core->height));
p.x /= core->width;
p.y /= core->height;
*/
xDist = (centerPoint.x - drawGrid[i][j].x)/.75;
yDist = centerPoint.y - drawGrid[i][j].y;
/*
xDist = (p.x - drawGrid[i][j].x)/.75;
yDist = p.y - drawGrid[i][j].y;
*/
//xDist = 1;
//yDist = 2;
tDist = sqrtf(xDist*xDist+yDist*yDist);
//drawGrid[i][j].x += (rand()%100)/10000.0f;
//drawGrid[i][j].y += (rand()%100)/10000.0f;
if (tDist < currentDistance*adjWaveLength)
{
//drawGrid[i][j].x += rand()%50;
//drawGrid[i][j].y += rand()%50;
drawGrid[i][j].x += adjAmplitude*sinf(-tDist/adjWaveLength+currentDistance)*.75f;
drawGrid[i][j].y += adjAmplitude*cosf(-tDist/adjWaveLength+currentDistance);
}
@ -546,20 +502,9 @@ RippleEffect::RippleEffect() : Effect()
void RippleEffect::update(float dt, Vector ** drawGrid, int xDivs, int yDivs)
{
/*
// whole screen roll
time += dt;
float amp = 0.01;
for (int i = 0; i < (xDivs-1); i++)
{
for (int j = 0; j < (yDivs-1); j++)
{
float offset = +i/float(xDivs) +j/float(xDivs);
//drawGrid[i][j].x += sinf(time+offset)*amp;
drawGrid[i][j].y += cosf((time+offset)*2.5f)*amp;
}
}
*/
time += dt*0.5f;
float amp = 0.002;
for (int i = 0; i < (xDivs-1); i++)
@ -567,7 +512,7 @@ void RippleEffect::update(float dt, Vector ** drawGrid, int xDivs, int yDivs)
for (int j = 0; j < (yDivs-1); j++)
{
float offset = i/float(xDivs) + (core->screenCenter.x/float(core->width)/2) +j/float(xDivs) + (core->screenCenter.y/float(core->height)/2);
//drawGrid[i][j].x += sinf(time+offset)*amp;
drawGrid[i][j].x += sinf((time+offset)*7.5f)*(amp*0.5f);
drawGrid[i][j].y += cosf((time+offset)*7.5f)*amp;
}

View file

@ -28,6 +28,7 @@ class Effect
{
public:
Effect();
virtual ~Effect(){};
virtual void go(){}
virtual void update(float dt, Vector ** drawGrid, int xDivs, int yDivs){}
bool done;
@ -51,7 +52,7 @@ public:
this->timeMultiplier = timeMultiplier;
}
float timeMultiplier;
//void go();
void update(float dt, Vector ** drawGrid, int xDivs, int yDivs);
float waveLength;

View file

@ -1,79 +0,0 @@
/*
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 "AnimatedSprite.h"
AnimData::AnimData()
{
frameStart = frameEnd = 0;
time = 0;
loop = 0;
pingPong = false;
datafile = 0;
}
AnimatedSprite::AnimatedSprite() : Quad()
{
//debugLog("AnimatedSprite::AnimatedSprite()");
frame = 0;
animator.setUpdatee(&frame);
animationTime.setUpdatee (&animator.timePeriod);
//debugLog("End AnimatedSprite::AnimatedSprite()");
}
void AnimatedSprite::animate (AnimData &animData)
{
onAnimData(animData);
animate (animData.name, animData.frameStart, animData.frameEnd, animData.time, animData.loop, animData.pingPong);
}
void AnimatedSprite::onAnimData(AnimData &animData)
{
}
void AnimatedSprite::animate (const std::string &name, int from, int to, float time, int loopType, bool pingPong, float initialDelay)
{
if (from == to && to == 0)
{
debugLog ("null animation");
animator.stop();
return;
}
currentAnim = name;
frame = from;
animator.interpolateTo (to, time, loopType);
animator.pingPong = pingPong;
animator.initialDelay = initialDelay;
}
void AnimatedSprite::onUpdate (float dt)
{
Quad::onUpdate (dt);
animator.update (dt);
animationTime.update (dt);
if (!animator.interpolating && currentAnim != "")
{
animComplete(currentAnim);
lastAnim = currentAnim;
currentAnim = "";
}
}

View file

@ -1,68 +0,0 @@
/*
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.
*/
#ifndef __animated_sprite__
#define __animated_sprite__
#include "Quad.h"
#include "Interpolator.h"
class AnimData
{
public:
AnimData();
std::string name;
int frameStart, frameEnd, datafile;
float time;
int loop;
bool pingPong;
};
class AnimatedSprite : public Quad
{
public:
AnimatedSprite();
Interpolator animator, animationTime;
float frame;
std::string currentAnim, lastAnim;
virtual void animComplete(std::string name) {}
void animate (const std::string &name, int from, int to, float time, int loopType, bool pingPong = false, float initialDelay = 0.0f);
void animate (AnimData &animData);
bool isAnimating()
{
return animator.interpolating;
}
protected:
virtual void onAnimData(AnimData &animData);
virtual void onUpdate (float dt);
};
#endif

View file

@ -68,6 +68,13 @@ Vector getDirVector(Direction dir)
case DIR_RIGHT:
return Vector(1, 0);
break;
case DIR_UPLEFT:
case DIR_UPRIGHT:
case DIR_DOWNLEFT:
case DIR_DOWNRIGHT:
case DIR_MAX:
case DIR_NONE:
break;
}
return Vector(0,0);
}
@ -88,6 +95,13 @@ Direction getOppositeDir(Direction dir)
case DIR_RIGHT:
return DIR_LEFT;
break;
case DIR_UPLEFT:
case DIR_UPRIGHT:
case DIR_DOWNLEFT:
case DIR_DOWNRIGHT:
case DIR_MAX:
case DIR_NONE:
break;
}
return DIR_NONE;
@ -109,6 +123,13 @@ Direction getNextDirClockwise(Direction dir)
case DIR_RIGHT:
return DIR_DOWN;
break;
case DIR_UPLEFT:
case DIR_UPRIGHT:
case DIR_DOWNLEFT:
case DIR_DOWNRIGHT:
case DIR_MAX:
case DIR_NONE:
break;
}
return DIR_NONE;
}
@ -161,7 +182,6 @@ unsigned hash(const std::string &string)
return hash;
}
/* hash * 33 + c */
static unsigned char lowerToUpperTable[256];
@ -198,11 +218,6 @@ struct TransatableStaticInit
static TransatableStaticInit _transtable_static_init;
static unsigned char charIsUpper(unsigned char c)
{
return c == upperToLowerTable[c];
}
static unsigned char charIsLower(unsigned char c)
{
return c == lowerToUpperTable[c];
}
@ -352,8 +367,7 @@ bool exists(const std::string &f, bool makeFatal, bool skipVFS)
void drawCircle(float radius, int stepSize)
{
#ifdef BBGE_BUILD_OPENGL
//glDisable(GL_CULL_FACE);
glBegin(GL_POLYGON);
{
@ -364,8 +378,7 @@ void drawCircle(float radius, int stepSize)
}
glEnd();
//glEnable(GL_CULL_FACE);
#endif
}
void exit_error(const std::string &message)
@ -386,9 +399,7 @@ std::string parseCommand(const std::string &line, const std::string &command)
void glColor3_256(int r, int g, int b)
{
#ifdef BBGE_BUILD_OPENGL
glColor4f(float(r)/256.0f, float(g)/256.0f, float(b)/256.0f, 1.0f);
#endif
}
bool chance(int perc)
@ -405,68 +416,7 @@ bool chancef(float p)
return ((rand()%100) <= p*100);
}
/*
PHYSFS_file *openRead(const std::string &f)
{
PHYSFS_file *file = PHYSFS_openRead(f.c_str());
if (!file)
{
errorLog ("Could not open [" + f + "]");
exit(0);
}
return file;
}
void pfread(void *buffer, PHYSFS_uint32 size, PHYSFS_uint32 objs, PHYSFS_file *handle)
{
PHYSFS_read(handle, buffer, size, objs);
}
void pfseek(PHYSFS_file *handle,PHYSFS_uint64 byte,int origin)
{
if (origin == SEEK_CUR)
{
byte += PHYSFS_tell(handle);
}
PHYSFS_seek(handle,byte);
}
void pfclose(PHYSFS_file *handle)
{
PHYSFS_close(handle);
}
std::string pLoadStream(const std::string &filename)
{
PHYSFS_file *f = openRead(filename.c_str());
int len = PHYSFS_fileLength(f);
std::string s;
for (int i = 0; i < len; i++)
{
char p;
PHYSFS_read(f, &p, sizeof(char), 1);
s += p;
}
//std::istringstream is(s);
PHYSFS_close(f);
return s;
}
void pSaveStream(const std::string &filename, std::ostringstream &os)
{
PHYSFS_file *f = PHYSFS_openWrite(filename.c_str());
//int size = os.str().size();
//PHYSFS_write(f, (void*)size, sizeof(int), 1);
PHYSFS_write(f, (void*)os.str().c_str(), sizeof(char)*os.str().size(), 1);
PHYSFS_close(f);
}
*/
void errorLog(const std::string &s)
{
@ -562,29 +512,7 @@ tinyxml2::XMLDocument *readXML(const std::string& fn, tinyxml2::XMLError *perr /
return doc;
}
/*
void pForEachFile(std::string path, std::string type, void callback(const std::string &filename, int param), int param)
{
char **rc = PHYSFS_enumerateFiles(path.c_str());
char **i;
for (i = rc; *i != NULL; i++)
{
std::string s(*i);
int p=0;
if ((p=s.find('.'))!=std::string::npos)
{
std::string ext = s.susbtr(p, s.getLength2D());
if (ext == type)
{
callback(fielnameafhghaha
}
}
}
PHYSFS_freeList(rc);
}
*/
void doSingleFile(const std::string &path, const std::string &type, std::string filename, void callback(const std::string &filename, int param), int param)
{
@ -593,9 +521,9 @@ void doSingleFile(const std::string &path, const std::string &type, std::string
std::string search = filename;
stringToLower(search);
std::string filetype = filename.substr(search.size()-4, search.size());
//stringToUpper(filetype);
//debugLog("comparing: " + filetype + " and: " + type);
//if (filetype==type)
debugLog("checking:" + search + " for type:" + type);
if (search.find(type)!=std::string::npos)
{
@ -680,7 +608,7 @@ void forEachFile(std::string path, std::string type, void callback(const std::st
dirent *file=0;
while ( (file=readdir(dir)) != NULL )
{
if (file->d_name && strlen(file->d_name) > 4)
if (strlen(file->d_name) > 4)
{
debugLog(file->d_name);
char *extension=strrchr(file->d_name,'.');
@ -726,9 +654,7 @@ void forEachFile(std::string path, std::string type, void callback(const std::st
}
//std::string add = "%s*" + type;
//sprintf(szDir, "%s*", path.c_str());
sprintf(szDir, "%s\\*", path.c_str());
stringToUpper(type);
@ -737,7 +663,7 @@ void forEachFile(std::string path, std::string type, void callback(const std::st
hList = FindFirstFile(szDir, &FileData);
if (hList == INVALID_HANDLE_VALUE)
{
//printf("No files found\n\n");
debugLog("No files of type " + type + " found in path " + path);
}
else
@ -749,13 +675,13 @@ void forEachFile(std::string path, std::string type, void callback(const std::st
// Check the object is a directory or not
//printf("%*s%s\n", indent, "", FileData.cFileName);
std::string filename = FileData.cFileName;
//debugLog("found: " + filename);
if (filename.size()>4)
{
std::string filetype = filename.substr(filename.size()-4, filename.size());
stringToUpper(filetype);
//debugLog("comparing: " + filetype + " and: " + type);
if (filetype==type)
{
callback(path+filename, param);
@ -765,12 +691,7 @@ void forEachFile(std::string path, std::string type, void callback(const std::st
if (!FindNextFile(hList, &FileData))
{
/*
if (GetLastError() == ERROR_NO_MORE_FILES)
{
fFinished = TRUE;
}
*/
fFinished = TRUE;
}
}
@ -811,19 +732,14 @@ std::vector<std::string> getFileList(std::string path, std::string type, int par
std::string filename = FileData.cFileName;
if (filename.size()>4 && filename.substr(filename.size()-4, filename.size())==type)
{
//callback(path+filename, param);
list.push_back (filename);
}
if (!FindNextFile(hList, &FileData))
{
/*
if (GetLastError() == ERROR_NO_MORE_FILES)
{
fFinished = TRUE;
}
*/
fFinished = TRUE;
}
}
@ -884,18 +800,7 @@ Vector getNearestPointOnLine(Vector a, Vector b, Vector c)
return nearest;
}
/*
bool isTouchingLine(Vector lineStart, Vector lineEnd, Vector point, int radius)
{
Vector p = getNearestPointOnLine(lineStart, lineEnd, point);
Vector diff = p - point;
std::ostringstream os;
os << "s(" << lineStart.x << ", " << lineStart.y << ") e(";
os << lineEnd.x << ", " << lineEnd.y << ") - p(" << point.x << ", " << point.y << ")";
debugLog(os.str());
return (diff.getSquaredLength2D() < sqr(radius));
}
*/
bool isTouchingLine(Vector lineStart, Vector lineEnd, Vector point, int radius, Vector *closestP)
{
@ -931,14 +836,12 @@ GLuint generateEmptyTexture(int quality) // Create An Empty Texture
memset(data, 0, size); // Clear Storage Memory
#ifdef BBGE_BUILD_OPENGL
glGenTextures(1, &txtnumber); // Create 1 Texture
glBindTexture(GL_TEXTURE_2D, txtnumber); // Bind The Texture
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, quality, quality, 0,
GL_RGBA, GL_UNSIGNED_BYTE, data); // Build Texture Using Information In data
#endif
delete [] data; // Release data

View file

@ -39,67 +39,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifdef BBGE_BUILD_WINDOWS
//#include "iprof/prof.h"
//#define BBGE_PROF(x) Prof(x)
#define BBGE_PROF(x)
/*
//#ifdef BBGE_BUILD_DIRECTX
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
//#endif
*/
#else
#define BBGE_PROF(x)
#endif
#ifdef BBGE_BUILD_GLFW
#include <glfw.h>
#include "glext.h"
//#include "glext.h"
#elif BBGE_BUILD_DIRECTX
#if defined(BBGE_BUILD_X360) && !defined(BBGE_BUILD_WINDOWS)
#include <xtl.h>
#include <ppcintrinsics.h>
#endif // _XBOX
#if defined(BBGE_BUILD_X360) && defined(BBGE_BUILD_WINDOWS)
// Using the win32\ path prefix on the D3D include files makes sure that the Xbox 360
// version of D3D is used, not the DirectX SDK version.
#include <win32\vs2005\d3d9.h>
#include <win32\vs2005\d3dx9.h>
#pragma warning(disable:4100)
#include "XTLOnPC.h"
#endif // _PC
#if defined(BBGE_BUILD_X360)
#include <xgraphics.h>
#include <xboxmath.h>
#include <stdio.h>
#include <stdarg.h>
#include <assert.h>
#endif
#endif
#ifdef BBGE_BUILD_SDL
#include "SDL.h"
#endif
#if defined(BBGE_BUILD_OPENGL)
#define GL_GLEXT_LEGACY 1
#include "gl.h"
#include "glext.h"
#endif
#define compile_assert(pred) switch(0){case 0:case (pred):;}
@ -136,7 +94,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <queue>
#include <map>
#include <stack>
//#include <typeinfo.h>
#include "Rect.h"
@ -233,23 +191,9 @@ Direction getOppositeDir(Direction dir);
Direction getNextDirClockwise(Direction dir);
Vector colorRGB(int r, int g, int b);
#ifdef BBGE_BUILD_DIRECTX
typedef unsigned int GLuint;
#endif
GLuint generateEmptyTexture(int res);
//void pForEachFile(std::string path, std::string type, void callback(const std::string &filename, int param), int param);
/*
void pfread(void *buffer, PHYSFS_uint32 size, PHYSFS_uint32 objs, PHYSFS_file *handle);
void pfseek(PHYSFS_file *handle,PHYSFS_uint64 byte,int origin);
void pfclose(PHYSFS_file *handle);
PHYSFS_file *openRead(const std::string &f);
std::string pLoadStream(const std::string &filename);
void pSaveStream(const std::string &filename, std::ostringstream &os);
*/
void drawCircle(float radius, int steps=1);
bool isVectorInRect(const Vector &vec, const Vector &coord1, const Vector &coord2);
@ -287,8 +231,7 @@ enum LerpType
float lerp(const float &v1, const float &v2, float dt, int lerpType);
//int packFile(const std::string &sourcef, const std::string &destf, int level);
//int unpackFile(const std::string &sourcef, const std::string &destf);
void openURL(const std::string &url);

View file

@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "BitmapFont.h"
#include "Core.h"
//#include "DSQ.h"
using namespace glfont;
@ -56,14 +56,12 @@ void BmpFont::load(const std::string &file, float scale, bool loadTexture)
this->scale = scale;
#ifdef BBGE_BUILD_OPENGL
GLuint id=0;
glGenTextures(1, &id);
if (!font.Create(file.c_str(), id, loadTexture))
return;
#endif
loaded = true;
}
@ -81,13 +79,13 @@ BitmapText::BitmapText(BmpFont *bmpFont)
align = ALIGN_CENTER;
textWidth = 600;
this->fontDrawSize = 24;
//color = Vector(0.5,0.5,1);
cull = false;
//setTexture(font);
alignWidth = 0;
//fontTextureTest = core->addTexture("font");
}
void BitmapText::autoKern()
@ -165,7 +163,7 @@ void BitmapText::formatText()
maxW = 0;
for (int i = 0; i < text.size(); i++)
{
//currentWidth += spacingMap[text[i]]*fontDrawSize;
float sz = bmpFont->font.GetCharWidth(text[i])*bmpFont->scale;
currentWidth += sz;
@ -218,24 +216,7 @@ void BitmapText::updateWordColoring()
}
}
/*
for (int i = 0; i < lines.size(); i++)
{
int c = 0;
for (int t = 0; t < dsq->continuity.wordColoring.size(); t++)
{
WordColoring *w = &dsq->continuity.wordColoring[t];
if ((c = lines[i].find(w->word)) != std::string::npos)
{
for (int j = c; j < c + w->word.size(); j++)
{
colorIndices[i][j] = w->color;
}
}
}
}
*/
//lines.push_back(text);
}
@ -316,15 +297,9 @@ void BitmapText::onRender()
float top_color[3] = {bmpFont->fontTopColor.x*color.x, bmpFont->fontTopColor.y*color.y, bmpFont->fontTopColor.z*color.z};
float bottom_color[3] = {bmpFont->fontBtmColor.x*color.x, bmpFont->fontBtmColor.y*color.y, bmpFont->fontBtmColor.z*color.z};
#ifdef BBGE_BUILD_OPENGL
glEnable(GL_TEXTURE_2D);
/*
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
*/
//glDisable(GL_CULL_FACE);
//glScalef(1, -1, 0);
bmpFont->font.Begin();
@ -353,11 +328,7 @@ void BitmapText::onRender()
x = -sz.first*0.5f*bmpFont->scale;
}
float la = 1.0f-(scrollDelay/scrollSpeed);
/*
std::ostringstream os;
os << "la: " << la;
debugLog(os.str());
*/
bmpFont->font.DrawString(theLine, bmpFont->scale, x, y, top_color, bottom_color, alpha.x, la);
y += adj;
@ -379,10 +350,9 @@ void BitmapText::onRender()
}
}
//glEnable(GL_CULL_FACE);
glBindTexture(GL_TEXTURE_2D, 0);
#endif
}
void BitmapText::unloadDevice()
@ -454,33 +424,4 @@ float BitmapText::getStringWidth(const std::string& text)
return maxsize * bmpFont->scale;
}
/*
BitmapText::BitmapText() : RenderObject()
{
cull = false;
followCamera = 1;
scrollSpeed = 0.1f;
}
void BitmapText::scrollText(const std::string &text, float scrollSpeed)
{
setText(text);
this->scrollSpeed = scrollSpeed;
}
void BitmapText::setText(const std::string &text)
{
this->text = text;
}
std::string BitmapText::getText()
{
return text;
}
void BitmapText::onRender()
{
CTextDrawer::GetSingleton().SetColor(color.x, color.y, color.z, alpha.getValue());
dsq->print(position.x, 600 - (position.y + 16*2), text);
}
*/

View file

@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef BITMAPFONT_H
#define BITMAPFONT_H
//#include "DrawText.h"
#include "RenderObject.h"
#include "BaseText.h"

View file

@ -1,139 +0,0 @@
/*
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 "BloomEffect.h"
#include "Core.h"
BloomEffect::BloomEffect() : RenderObject()
{
active = false;
followCamera = 1;
cull = 0;
stretch = 0;
startLayer = endLayer = -1;
texID = 0;
format = GL_LUMINANCE;
useFrameBuffer = true;
}
void BloomEffect::init(int quality, int startLayer, int endLayer)
{
this->startLayer = startLayer;
this->endLayer = endLayer;
this->quality = quality;
if (useFrameBuffer)
{
if (frameBuffer.init(quality, quality))
active = true;
else
{
active = false;
useFrameBuffer = false;
}
}
else
{
texID = generateEmptyTexture(quality);
}
}
void BloomEffect::unloadDevice()
{
if (frameBuffer.isInited())
frameBuffer.unloadDevice();
}
void BloomEffect::reloadDevice()
{
if (frameBuffer.isInited())
frameBuffer.reloadDevice();
}
void BloomEffect::render()
{
if (active && frameBuffer.isInited())
{
// get
glViewport(0,0,quality,quality);
frameBuffer.startCapture();
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT);
core->render(startLayer, endLayer, false);
if (useFrameBuffer)
{
frameBuffer.endCapture();
}
else
{
glBindTexture(GL_TEXTURE_2D,texID);
glCopyTexImage2D(GL_TEXTURE_2D, 0, format, 0, 0, quality, quality, 0);
}
core->setClearColor(core->getClearColor());
glViewport(0, 0, core->width, core->height);
// render
glEnable(GL_TEXTURE_2D);
if (useFrameBuffer)
frameBuffer.bindTexture();
else
glBindTexture(GL_TEXTURE_2D,texID);
glPushMatrix();
glLoadIdentity();
//glScalef(scale.x, scale.y, 0);
float spost = 0.0;
int x=0,y=0;
x = -core->getVirtualOffX()*2;
y = -core->getVirtualOffY()*2;
applyBlendType();
glColor4f(color.x, color.y, color.z, alpha.x*alphaMod);
glBegin(GL_QUADS); // Begin Drawing Quads
glTexCoord2f(0,1); // Texture Coordinate ( 0, 1 )
glVertex2f(x-stretch,y-stretch); // First Vertex ( 0, 0 )
glTexCoord2f(0,0); // Texture Coordinate ( 0, 0 )
glVertex2f(x-stretch,core->height+stretch); // Second Vertex ( 0, 480 )
glTexCoord2f(1,0); // Texture Coordinate ( 1, 0 )
glVertex2f(core->width+stretch,core->height+stretch); // Third Vertex ( 640, 480 )
glTexCoord2f(1,1); // Texture Coordinate ( 1, 1 )
glVertex2f(core->width+stretch,y-stretch); // Fourth Vertex ( 640, 0 )
glEnd();
glPopMatrix();
glBindTexture(GL_TEXTURE_2D, 0);
RenderObject::lastTextureApplied = 0;
}
}

View file

@ -1,48 +0,0 @@
/*
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.
*/
#ifndef BLOOMEFFECT_H
#define BLOOMEFFECT_H
#include "RenderObject.h"
#include "FrameBuffer.h"
class BloomEffect : public RenderObject
{
public:
BloomEffect();
void init(int quality, int startLayer, int endLayer);
FrameBuffer frameBuffer;
void unloadDevice();
void reloadDevice();
void render();
GLuint format;
int texID;
protected:
int startLayer, endLayer;
int quality;
bool active;
int stretch; // slightly adjust edges outward
bool useFrameBuffer;
};
#endif

View file

@ -1,28 +0,0 @@
/*
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.
*/
//#ifdef BBGE_BUILD_MSVC8X
extern "C"
{
int errno;
}
//#endif

View file

@ -1,443 +0,0 @@
/*
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 "Collision.h"
CollisionShape::CollisionShape()
{
xw = yw = 0;
setType(CIRCLE);
active = true;
project = true;
radius = 32;
corners.resize(4);
layer = 0;
}
void CollisionShape::setType(Type type)
{
this->type = type;
}
CollisionShape::Type CollisionShape::getType()
{
return type;
}
/*
bool CollisionShape::compareMask(CollisionShape &c)
{
for (CollisionLayerMask::iterator i = c.colliderMask.begin(); i != c.colliderMask.end(); i++)
{
for (CollisionLayerMask::iterator j = c.collideeMask.begin(); j != c.collideeMask.end(); j++)
{
if ((*i)) && (*j))
{
return true;
}
}
}
return false;
}
*/
bool CollisionShape::compareLayer(CollisionShape &c)
{
return (this->layer <= c.layer);
}
void CollisionShape::updatePosition(const Vector &position)
{
this->position = position + offsetPosition;
/*
switch (getType())
{
case AABB:
{
corners[0] = position + Vector( - xw, - yw);
corners[1] = position + Vector(xw, - yw);
corners[2] = position + Vector(xw, yw);
corners[3] = position + Vector(-xw ,yw);
}
break;
}
*/
}
CollisionResult CollisionShape::findOverlap(CollisionShape &collisionShape)
{
CollisionResult c;
switch (getType())
{
case CIRCLE:
{
switch(collisionShape.getType())
{
case CIRCLE:
c = collideCircleWithCircle(collisionShape);
break;
case AABB:
{
float txw = collisionShape.xw;
float tyw = collisionShape.yw;
Vector d = position - collisionShape.position;//tile->obj delta
int px = (txw + radius) - fabsf(d.x);//penetration depth in x
if(0 < px)
{
int py = (tyw + radius) - fabsf(d.y);//pen depth in y
if(0 < py)
{
//object may be colliding with tile
//determine grid/voronoi region of circle center
float oH = 0;
float oV = 0;
if(d.x < -txw)
{
//circle is on left side of tile
oH = -1;
}
else if(txw < d.x)
{
//circle is on right side of tile
oH = 1;
}
if(d.y < -tyw)
{
//circle is on top side of tile
oV = -1;
}
else if(tyw < d.y)
{
//circle is on bottom side of tile
oV = 1;
}
c = collideCircleWithAABB(collisionShape, px, py, oH, oV);
//ResolveCircleTile(px,py,oH,oV,this,c);
}
}
//return collideCircleWithAABB(collisionShape);
}
break;
case TOP_HALF_CIRCLE:
c = collideCircleWithTopHalfCircle(collisionShape);
break;
}
}
break;
}
return c;
}
CollisionResult CollisionShape::collideCircleWithCircle(CollisionShape &collisionShape)
{
CollisionResult c;
Vector dist = position - collisionShape.position;// - position;
float fastLen = dist.getSquaredLength2D();
float totalDist = (radius + collisionShape.radius);
if (fastLen < (totalDist*totalDist))
{
/*
std::ostringstream os;
os << "len " << len << " totalDist " << totalDist;
msg(os.str());
*/
float len = dist.getLength2D();
c.collided = true;
dist.setLength2D(totalDist - len);
//dist |= totalDist;
c.overlap = dist;
}
else
{
c.collided = false;
}
return c;
}
float CollisionShape::getY1()
{
return position.y - yw;
}
float CollisionShape::getY2()
{
return position.y + yw;
}
float CollisionShape::getX1()
{
return position.x - xw;
}
float CollisionShape::getX2()
{
return position.x + xw;
}
void CollisionShape::render()
{
#ifdef BBGE_BUILD_OPENGL
glTranslatef(offsetPosition.x, offsetPosition.y,0);
switch(getType())
{
case CIRCLE:
drawCircle(radius);
break;
case AABB:
//case CIRCLE:
//glColor3f(1,1,1);
//glLineWidth(2);
glBegin(GL_QUADS);
{
glVertex2f(-xw,yw);
glVertex2f(xw,yw);
glVertex2f(xw,-yw);
glVertex2f(-xw,-yw);
/*
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glVertex2f(topLeft.x, topLeft.y);
glVertex2f(bottomRight.x, topLeft.y);
glVertex2f(bottomRight.x, topLeft.y);
glVertex2f(bottomRight.x, bottomRight.y);
glVertex2f(bottomRight.x, bottomRight.y);
glVertex2f(topLeft.x, bottomRight.y);
glVertex2f(topLeft.x, bottomRight.y);
glVertex2f(topLeft.x, topLeft.y);
*/
}
glEnd();
break;
}
glTranslatef(-offsetPosition.x, -offsetPosition.y,0);
#endif
//glDisable(GL_BLEND);
}
/*
// FOR EDGES
if (position.y > collisionShape.getY1() - radius && position.y < collisionShape.getY2() + radius)
{
float dist = collisionShape.getX1() - position.x;
if (dist > 0 && dist < radius)
{
c.collided = true;
c.overlap = Vector(radius - dist,0);
}
else if (dist < 0 && -dist < radius)
{
c.collided = true;
c.overlap = -Vector(radius - (-dist),0);
}
}
if (!c.collided)
{
if (position.y > collisionShape.getY1() - radius && position.y < collisionShape.getY2() + radius)
{
float dist = collisionShape.getX2() - position.x;
if (dist > 0 && dist < radius)
{
c.collided = true;
c.overlap += Vector(radius - dist,0);
}
else if (dist < 0 && -dist < radius)
{
c.collided = true;
c.overlap += -Vector(radius - (-dist),0);
}
}
}
*/
CollisionResult CollisionShape::collideCircleWithAABB(CollisionShape &collisionShape, float x, float y, int oH, int oV)
{
CollisionResult c;
if(oH == 0)
{
if(oV == 0)
{
//collision with current cell
if(x < y)
{
//penetration in x is smaller; project in x
float dx = position.x - collisionShape.position.x;//get sign for projection along x-axis
// msg("oH==0, oV ==0, x <y");
//NOTE: should we handle the delta == 0 case?! and how? (project towards oldpos?)
if(dx < 0)
{
c.reportCollision(Vector(-x, 0));
return c;
}
else
{
c.reportCollision(Vector(x,0));
return c;
}
}
else
{
// msg("oH==0, oV ==0, x >= y");
//penetration in y is smaller; project in y
float dy = position.y - collisionShape.position.y;//get sign for projection along y-axis
//NOTE: should we handle the delta == 0 case?! and how? (project towards oldpos?)
if(dy < 0)
{
c.reportCollision(Vector(0, -y));
return c;
}
else
{
c.reportCollision(Vector(0, y));
return c;
}
}
}
else
{
// msg ("oH == 0, oV != 0");
c.reportCollision(Vector(0, y*oV));
return c;
}
}
else if(oV == 0)
{
// msg ("oV == 0");
c.reportCollision(Vector(x*oH,0));
return c;
}
else
{
//diagonal collision
//get diag vertex position
float vx = collisionShape.position.x + (oH*collisionShape.xw);
float vy = collisionShape.position.y + (oV*collisionShape.yw);
float dx = position.x - vx - 1;//calc vert->circle vector
float dy = position.y - vy - 1;
float len = sqrtf(dx*dx + dy*dy);
float pen = radius - len;
if(0 < pen)
{
//vertex is in the circle; project outward
if(len == 0)
{
//project out by 45deg
dx = oH / SQRT2;
dy = oV / SQRT2;
}
else
{
dx /= len;
dy /= len;
}
c.reportCollision(Vector(dx*pen, dy*pen));
//obj.ReportCollisionVsWorld(dx*pen, dy*pen, dx, dy, t);
return c;
}
}
return c;
}
bool CollisionShape::isPointWithin(Vector point)
{
switch (this->getType())
{
case CIRCLE:
{
Vector dist = point - this->position;
return (dist.getSquaredLength2D() < sqr(this->radius));
}
break;
case AABB:
{
if (point.x < position.x + xw && point.y < position.y + yw)
{
if (point.x > position.x - xw && point.y > position.y - yw)
{
return true;
}
}
}
break;
}
return false;
}
CollisionResult CollisionShape::collideCircleWithTopHalfCircle(CollisionShape &collisionShape)
{
CollisionResult c;
Vector dist = collisionShape.position - position;
float len = dist.getLength2D();
float totalDist = (radius + collisionShape.radius);
//which edge did we hit?
if (collisionShape.position.y > (position.y - (radius/2)))
{
if (len < collisionShape.radius)
{
c.collided = true;
c.overlap = Vector(0, position.y - (collisionShape.position.y - collisionShape.radius));
}
}
else if (len < totalDist && dist.y > 0)
{
c.collided = true;
dist.setLength2D(totalDist - len);
c.overlap = dist;
}
else
{
c.collided = false;
}
return c;
}

View file

@ -1,146 +0,0 @@
/*
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.
*/
#ifndef COLLISION_H
#define COLLISION_H
#include "Base.h"
class RenderObject;
struct CollisionResult
{
CollisionResult()
{
collided = false;
collider = 0;
project = true;
}
bool project;
bool collided;
Vector overlap;
RenderObject *collider;
void reportCollision(Vector overlap)
{
collided = true;
this->overlap = overlap;
}
};
class CollisionShape
{
public:
CollisionShape();
/*
void addCollisionGroup(int group);
void removeCollisionGroup(int group);
void canCollideWithGroup();
*/
void updatePosition(const Vector &position);
void activate()
{
active = true;
}
void deactivate()
{
active = false;
}
bool isActive()
{
return active;
}
float getX1();
float getX2();
float getY1();
float getY2();
float xw, yw;
float radius;
enum Type { NONE=0, AABB, CIRCLE, TOP_HALF_CIRCLE, TRIANGLE };
void setType(Type type);
Type getType();
bool isPointWithin(Vector point);
void render();
CollisionResult findOverlap(CollisionShape &collisionShape);
Vector offsetPosition;
bool compareLayer(CollisionShape &c);
//bool compareMask(CollisionShape &c);
int getLayer() { return layer; }
void setLayer(int layer) { this->layer = layer; }
bool project;
protected:
int layer;
/*
typedef std::vector<int> CollisionLayerMask;
CollisionLayerMask colliderMask, collideeMask;
*/
std::vector<Vector> corners;
Vector position;
bool active;
CollisionResult collideCircleWithCircle(CollisionShape &collisionShape);
CollisionResult collideCircleWithTopHalfCircle(CollisionShape &collisionShape);
CollisionResult collideCircleWithAABB(CollisionShape &collisionShape, float x, float y, int oH, int oV);
Type type;
};
/*
class CollisionObject
{
public:
void onCollision();
void collide()
{
CollisionResult c;
for (int i = 0; i < collisionManager->colliders.size(); i++)
{
c = findOverlap(collisionManager->colliders[i]->collisionShape);
if (c.collided)
{
position -= c.overlap;
collisionShape.position =
}
}
}
};
class CollisionManager
{
public:
void addCollider(
};
*/
#endif

View file

@ -1,51 +0,0 @@
/*
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.
*/
#ifndef COMMONEVENTS_H
#define COMMONEVENTS_H
#include "Event.h"
class SoundEvent : public Event
{
public:
SoundEvent(const PlaySfx &p) : playSfx(p)
{}
void act()
{
core->sound->playSfx(playSfx);
}
private:
PlaySfx playSfx;
};
class JumpStateEvent : public Event
{
public:
JumpStateEvent(const std::string &state) : state(state) {}
void act()
{
core->enqueueJumpState(state, true);
}
private:
std::string state;
};
#endif

File diff suppressed because it is too large Load diff

View file

@ -35,19 +35,12 @@ BUILD_LINUX
#include "ActionMapper.h"
#include "Event.h"
#include "StateManager.h"
#include "Light.h"
#include "Flags.h"
//#include "Scripting.h"
#include "Effects.h"
#include "Localization.h"
#include "DarkLayer.h"
/*
#ifdef BBGE_BUILD_WINDOWS
#include "Joystick.h"
#endif
*/
#include "FrameBuffer.h"
#include "Shader.h"
@ -62,12 +55,6 @@ std::string getInputCodeToString(int key);
std::string getInputCodeToUserString(int key);
int getStringToInputCode(const std::string &string);
enum TimeUpdateType
{
TIMEUPDATE_DYNAMIC = 0,
TIMEUPDATE_FIXED = 1
};
struct ScreenMode
{
ScreenMode() { idx = x = y = hz = 0; }
@ -105,183 +92,10 @@ class Texture;
const int baseVirtualWidth = 800;
const int baseVirtualHeight = 600;
#if (defined(BBGE_BUILD_WINDOWS)) && !defined(BBGE_BUILD_SDL)
enum GameKeys
{
KEY_BACKSPACE = DIK_BACKSPACE,
KEY_CAPSLOCK = DIK_CAPSLOCK,
KEY_CIRCUMFLEX = DIK_CIRCUMFLEX,
KEY_DOWNARROW = DIK_DOWNARROW,
KEY_LALT = DIK_LALT,
KEY_LEFTARROW = DIK_LEFTARROW,
KEY_NUMPADMINUS = DIK_NUMPADMINUS,
KEY_NUMPADPERIOD = DIK_NUMPADPERIOD,
KEY_NUMPADPLUS = DIK_NUMPADPLUS,
KEY_NUMPADSLASH = DIK_NUMPADSLASH,
KEY_NUMPADSTAR = DIK_NUMPADSTAR,
KEY_PGDN = DIK_PGDN,
KEY_PGUP = DIK_PGUP,
KEY_RALT = DIK_RALT,
KEY_RIGHTARROW = DIK_RIGHTARROW,
KEY_UPARROW = DIK_UPARROW,
KEY_TILDE = DIK_GRAVE,
KEY_0 = DIK_0,
KEY_1 = DIK_1,
KEY_2 = DIK_2,
KEY_3 = DIK_3,
KEY_4 = DIK_4,
KEY_5 = DIK_5,
KEY_6 = DIK_6,
KEY_7 = DIK_7,
KEY_8 = DIK_8,
KEY_9 = DIK_9,
KEY_A = DIK_A,
KEY_ABNT_C1 = DIK_ABNT_C1,
KEY_ABNT_C2 = DIK_ABNT_C2,
KEY_ADD = DIK_ADD,
KEY_APOSTROPHE = DIK_APOSTROPHE,
KEY_APPS = DIK_APPS,
KEY_AT = DIK_AT,
KEY_AX = DIK_AX,
KEY_B = DIK_B,
KEY_BACK = DIK_BACK,
KEY_BACKSLASH = DIK_BACKSLASH,
KEY_C = DIK_C,
KEY_CALCULATOR = DIK_CALCULATOR,
KEY_CAPITAL = DIK_CAPITAL,
KEY_COLON = DIK_COLON,
KEY_COMMA = DIK_COMMA,
KEY_CONVERT = DIK_CONVERT,
KEY_D = DIK_D,
KEY_DECIMAL = DIK_DECIMAL,
KEY_DELETE = DIK_DELETE,
KEY_DIVIDE = DIK_DIVIDE,
KEY_DOWN = DIK_DOWN,
KEY_E = DIK_E,
KEY_END = DIK_END,
KEY_EQUALS = DIK_EQUALS,
KEY_ESCAPE = DIK_ESCAPE,
KEY_F = DIK_F,
KEY_F1 = DIK_F1,
KEY_F2 = DIK_F2,
KEY_F3 = DIK_F3,
KEY_F4 = DIK_F4,
KEY_F5 = DIK_F5,
KEY_F6 = DIK_F6,
KEY_F7 = DIK_F7,
KEY_F8 = DIK_F8,
KEY_F9 = DIK_F9,
KEY_F10 = DIK_F10,
KEY_F11 = DIK_F11,
KEY_F12 = DIK_F12,
KEY_F13 = DIK_F13,
KEY_F14 = DIK_F14,
KEY_F15 = DIK_F15,
KEY_G = DIK_G,
KEY_GRAVE = DIK_GRAVE,
KEY_H = DIK_H,
KEY_HOME = DIK_HOME,
KEY_I = DIK_I,
KEY_INSERT = DIK_INSERT,
KEY_J = DIK_J,
KEY_K = DIK_K,
KEY_KANA = DIK_KANA,
KEY_KANJI = DIK_KANJI,
KEY_L = DIK_L,
KEY_LBRACKET = DIK_LBRACKET,
KEY_LCONTROL = DIK_LCONTROL,
KEY_LEFT = DIK_LEFT,
KEY_LMENU = DIK_LMENU,
KEY_LSHIFT = DIK_LSHIFT,
KEY_LMETA = DIK_LWIN,
KEY_M = DIK_M,
KEY_MAIL = DIK_MAIL,
KEY_MEDIASELECT = DIK_MEDIASELECT,
KEY_MEDIASTOP = DIK_MEDIASTOP,
KEY_MINUS = DIK_MINUS,
KEY_MULTIPLY = DIK_MULTIPLY,
KEY_MUTE = DIK_MUTE,
KEY_MYCOMPUTER = DIK_MYCOMPUTER,
KEY_N = DIK_N,
KEY_NEXT = DIK_NEXT,
KEY_NEXTTRACK = DIK_NEXTTRACK,
KEY_NOCONVERT = DIK_NOCONVERT,
KEY_NUMLOCK = DIK_NUMLOCK,
KEY_NUMPAD0 = DIK_NUMPAD0,
KEY_NUMPAD1 = DIK_NUMPAD1,
KEY_NUMPAD2 = DIK_NUMPAD2,
KEY_NUMPAD3 = DIK_NUMPAD3,
KEY_NUMPAD4 = DIK_NUMPAD4,
KEY_NUMPAD5 = DIK_NUMPAD5,
KEY_NUMPAD6 = DIK_NUMPAD6,
KEY_NUMPAD7 = DIK_NUMPAD7,
KEY_NUMPAD8 = DIK_NUMPAD8,
KEY_NUMPAD9 = DIK_NUMPAD9,
KEY_NUMPADCOMMA = DIK_NUMPADCOMMA,
KEY_NUMPADENTER = DIK_NUMPADENTER,
KEY_NUMPADEQUALS = DIK_NUMPADEQUALS,
KEY_O = DIK_O,
KEY_OEM_102 = DIK_OEM_102,
KEY_P = DIK_P,
KEY_PAUSE = DIK_PAUSE,
KEY_PERIOD = DIK_PERIOD,
KEY_PLAYPAUSE = DIK_PLAYPAUSE,
KEY_POWER = DIK_POWER,
KEY_PREVTRACK = DIK_PREVTRACK,
KEY_PRIOR = DIK_PRIOR,
KEY_Q = DIK_Q,
KEY_R = DIK_R,
KEY_RBRACKET = DIK_RBRACKET,
KEY_RCONTROL = DIK_RCONTROL,
KEY_RETURN = DIK_RETURN,
KEY_RIGHT = DIK_RIGHT,
KEY_RMENU = DIK_RMENU,
KEY_RSHIFT = DIK_RSHIFT,
KEY_RMETA = DIK_RWIN,
KEY_S = DIK_S,
KEY_SCROLL = DIK_SCROLL,
KEY_SEMICOLON = DIK_SEMICOLON,
KEY_SLASH = DIK_SLASH,
KEY_SLEEP = DIK_SLEEP,
KEY_SPACE = DIK_SPACE,
KEY_STOP = DIK_STOP,
KEY_SUBTRACT = DIK_SUBTRACT,
KEY_SYSRQ = DIK_SYSRQ,
KEY_T = DIK_T,
KEY_TAB = DIK_TAB,
KEY_U = DIK_U,
KEY_UNDERLINE = DIK_UNDERLINE,
KEY_UNLABELED = DIK_UNLABELED,
KEY_UP = DIK_UP,
KEY_V = DIK_V,
KEY_VOLUMEDOWN = DIK_VOLUMEDOWN,
KEY_VOLUMEUP = DIK_VOLUMEUP,
KEY_W = DIK_W,
KEY_WAKE = DIK_WAKE,
KEY_WEBBACK = DIK_WEBBACK,
KEY_WEBFAVORITES = DIK_WEBFAVORITES,
KEY_WEBFORWARD = DIK_WEBFORWARD,
KEY_WEBHOME = DIK_WEBHOME,
KEY_WEBREFRESH = DIK_WEBREFRESH,
KEY_WEBSEARCH = DIK_WEBSEARCH,
KEY_WEBSTOP = DIK_WEBSTOP,
KEY_X = DIK_X,
KEY_Y = DIK_Y,
KEY_YEN = DIK_YEN,
KEY_Z = DIK_Z,
KEY_ANYKEY = 4059,
KEY_MAXARRAY = 256
};
#elif defined(BBGE_BUILD_SDL)
enum GameKeys
{
// replace with GLFW equivalent
/*
KEY_DOWNARROW = GLFW_KEY_DOWN,
KEY_RIGHTARROW = GLFW_KEY_RIGHT,
KEY_UPARROW = GLFW_KEY_UP,
KEY_LEFTARROW = GLFW_KEY_LEFT,
*/
KEY_LSUPER,
KEY_RSUPER,
@ -290,8 +104,8 @@ enum GameKeys
KEY_BACKSPACE,
KEY_PRINTSCREEN,
//KEY_CAPSLOCK,
//KEY_CIRCUMFLEX,
KEY_LALT,
KEY_RALT,
KEY_LSHIFT,
@ -310,7 +124,7 @@ enum GameKeys
KEY_SEMICOLON,
KEY_LBRACKET,
KEY_RBRACKET,
//KEY_RALT,
KEY_TILDE,
KEY_0,
KEY_1,
@ -393,353 +207,6 @@ enum GameKeys
KEY_ANYKEY,
KEY_MAXARRAY
};
#elif defined(BBGE_BUILD_XINPUT)
enum GameKeys
{
KEY_LSUPER = 0,
KEY_RSUPER = 0,
KEY_LMETA = 0,
KEY_RMETA = 0,
KEY_BACKSPACE = 0,
KEY_PRINTSCREEN = 0,
KEY_LALT = 0,
KEY_RALT = 0,
KEY_LSHIFT = 0,
KEY_RSHIFT = 0,
KEY_LCONTROL = 0,
KEY_RCONTROL = 0,
KEY_NUMPADMINUS = 0,
KEY_NUMPADPERIOD = 0,
KEY_NUMPADPLUS = 0,
KEY_NUMPADSLASH = 0,
KEY_NUMPADSTAR = 0,
KEY_PGDN = 0,
KEY_PGUP = 0,
KEY_TILDE = 0,
KEY_0 = 0,
KEY_1 = 0,
KEY_2 = 0,
KEY_3 = 0,
KEY_4 = 0,
KEY_5 = 0,
KEY_6 = 0,
KEY_7 = 0,
KEY_8 = 0,
KEY_9 = 0,
KEY_A = 0,
KEY_B = 0,
KEY_C = 0,
KEY_D = 0,
KEY_E = 0,
KEY_F = 0,
KEY_G = 0,
KEY_H = 0,
KEY_I = 0,
KEY_J = 0,
KEY_K = 0,
KEY_L = 0,
KEY_M = 0,
KEY_N = 0,
KEY_O = 0,
KEY_P = 0,
KEY_Q = 0,
KEY_R = 0,
KEY_S = 0,
KEY_T = 0,
KEY_U = 0,
KEY_V = 0,
KEY_W = 0,
KEY_X = 0,
KEY_Y = 0,
KEY_Z = 0,
KEY_LEFT = 0,
KEY_RIGHT = 0,
KEY_UP = 0,
KEY_DOWN = 0,
KEY_NUMPAD1 = 0,
KEY_NUMPAD2 = 0,
KEY_NUMPAD3 = 0,
KEY_NUMPAD4 = 0,
KEY_NUMPAD5 = 0,
KEY_NUMPAD6 = 0,
KEY_NUMPAD7 = 0,
KEY_NUMPAD8 = 0,
KEY_NUMPAD9 = 0,
KEY_NUMPAD0 = 0,
KEY_DELETE = 0,
KEY_SPACE = 0,
KEY_RETURN = 0,
KEY_PERIOD = 0,
KEY_MINUS = 0,
KEY_CAPSLOCK = 0,
KEY_SYSRQ = 0,
KEY_TAB = 0,
KEY_HOME = 0,
KEY_END = 0,
KEY_COMMA = 0,
KEY_SLASH = 0,
KEY_F1 = 0,
KEY_F2 = 0,
KEY_F3 = 0,
KEY_F4 = 0,
KEY_F5 = 0,
KEY_F6 = 0,
KEY_F7 = 0,
KEY_F8 = 0,
KEY_F9 = 0,
KEY_F10 = 0,
KEY_F11 = 0,
KEY_F12 = 0,
KEY_F13 = 0,
KEY_F14 = 0,
KEY_F15 = 0,
KEY_ESCAPE = 0,
KEY_ANYKEY = 4059,
KEY_MAXARRAY = 256
};
#elif defined(BBGE_BUILD_GLFW)
enum GameKeys
{
// replace with GLFW equivalent
/*
KEY_DOWNARROW = GLFW_KEY_DOWN,
KEY_RIGHTARROW = GLFW_KEY_RIGHT,
KEY_UPARROW = GLFW_KEY_UP,
KEY_LEFTARROW = GLFW_KEY_LEFT,
*/
KEY_BACKSPACE = GLFW_KEY_BACKSPACE,
//KEY_CAPSLOCK = DIK_CAPSLOCK,
//KEY_CIRCUMFLEX = DIK_CIRCUMFLEX,
KEY_LALT = GLFW_KEY_LALT,
KEY_RALT = GLFW_KEY_RALT,
KEY_LSHIFT = GLFW_KEY_LSHIFT,
KEY_RSHIFT = GLFW_KEY_RSHIFT,
KEY_LCONTROL = GLFW_KEY_LCTRL,
KEY_RCONTROL = GLFW_KEY_RCTRL,
KEY_NUMPADMINUS = GLFW_KEY_KP_SUBTRACT,
KEY_NUMPADPERIOD = GLFW_KEY_KP_DECIMAL,
KEY_NUMPADPLUS = GLFW_KEY_KP_ADD,
KEY_NUMPADSLASH = GLFW_KEY_KP_DIVIDE,
KEY_NUMPADSTAR = GLFW_KEY_KP_MULTIPLY,
KEY_PGDN = GLFW_KEY_PAGEDOWN,
KEY_PGUP = GLFW_KEY_PAGEUP,
//KEY_RALT = GLFW_KEY_RALT,
KEY_TILDE = '`',
KEY_0 = '0',
KEY_1 = '1',
KEY_2 = '2',
KEY_3 = '3',
KEY_4 = '4',
KEY_5 = '5',
KEY_6 = '6',
KEY_7 = '7',
KEY_8 = '8',
KEY_9 = '9',
KEY_A = 'A',
KEY_B = 'B',
KEY_C = 'C',
KEY_D = 'D',
KEY_E = 'E',
KEY_F = 'F',
KEY_G = 'G',
KEY_H = 'H',
KEY_I = 'I',
KEY_J = 'J',
KEY_K = 'K',
KEY_L = 'L',
KEY_M = 'M',
KEY_N = 'N',
KEY_O = 'O',
KEY_P = 'P',
KEY_Q = 'Q',
KEY_R = 'R',
KEY_S = 'S',
KEY_T = 'T',
KEY_U = 'U',
KEY_V = 'V',
KEY_W = 'W',
KEY_X = 'X',
KEY_Y = 'Y',
KEY_Z = 'Z',
KEY_LEFT = GLFW_KEY_LEFT,
KEY_RIGHT = GLFW_KEY_RIGHT,
KEY_UP = GLFW_KEY_UP,
KEY_DOWN = GLFW_KEY_DOWN,
KEY_NUMPAD1 = GLFW_KEY_KP_1,
KEY_NUMPAD2 = GLFW_KEY_KP_2,
KEY_NUMPAD3 = GLFW_KEY_KP_3,
KEY_NUMPAD4 = GLFW_KEY_KP_4,
KEY_NUMPAD5 = GLFW_KEY_KP_5,
KEY_NUMPAD6 = GLFW_KEY_KP_6,
KEY_NUMPAD7 = GLFW_KEY_KP_7,
KEY_NUMPAD8 = GLFW_KEY_KP_8,
KEY_NUMPAD9 = GLFW_KEY_KP_9,
KEY_NUMPAD0 = GLFW_KEY_KP_0,
KEY_DELETE = GLFW_KEY_DEL,
KEY_SPACE = GLFW_KEY_SPACE,
// mac os x
KEY_RETURN = 13,
KEY_PERIOD = '.',
KEY_MINUS = '-',
KEY_CAPSLOCK = -1,
KEY_SYSRQ = '`',
KEY_TAB = GLFW_KEY_TAB,
KEY_HOME = GLFW_KEY_HOME,
KEY_END = GLFW_KEY_END,
KEY_COMMA = ',',
KEY_SLASH = '/',
//KEY_ABNT_C1 = DIK_ABNT_C1,
//KEY_ABNT_C2 = DIK_ABNT_C2,
/*
KEY_ADD = DIK_ADD,
KEY_APOSTROPHE = DIK_APOSTROPHE,
KEY_APPS = DIK_APPS,
KEY_AT = DIK_AT,
KEY_AX = DIK_AX,
*/
/*
KEY_B = 'B',
KEY_BACK = DIK_BACK,
KEY_BACKSLASH = DIK_BACKSLASH,
KEY_C = DIK_C,
KEY_CALCULATOR = DIK_CALCULATOR,
KEY_CAPITAL = DIK_CAPITAL,
KEY_COLON = DIK_COLON,
KEY_COMMA = DIK_COMMA,
KEY_CONVERT = DIK_CONVERT,
KEY_D = DIK_D,
KEY_DECIMAL = DIK_DECIMAL,
KEY_DELETE = DIK_DELETE,
KEY_DIVIDE = DIK_DIVIDE,
KEY_DOWN = DIK_DOWN,
KEY_E = DIK_E,
KEY_END = DIK_END,
KEY_EQUALS = DIK_EQUALS,
KEY_ESCAPE = DIK_ESCAPE,
KEY_F = DIK_F,
*/
KEY_F1 = GLFW_KEY_F1,
KEY_F2 = GLFW_KEY_F2,
KEY_F3 = GLFW_KEY_F3,
KEY_F4 = GLFW_KEY_F4,
KEY_F5 = GLFW_KEY_F5,
KEY_F6 = GLFW_KEY_F6,
KEY_F7 = GLFW_KEY_F7,
KEY_F8 = GLFW_KEY_F8,
KEY_F9 = GLFW_KEY_F9,
KEY_F10 = GLFW_KEY_F10,
KEY_F11 = GLFW_KEY_F11,
KEY_F12 = GLFW_KEY_F12,
KEY_F13 = GLFW_KEY_F13,
KEY_F14 = GLFW_KEY_F14,
KEY_F15 = GLFW_KEY_F15,
/*
KEY_G = DIK_G,
KEY_GRAVE = DIK_GRAVE,
KEY_H = DIK_H,
KEY_HOME = DIK_HOME,
KEY_I = DIK_I,
KEY_INSERT = DIK_INSERT,
KEY_J = DIK_J,
KEY_K = DIK_K,
KEY_KANA = DIK_KANA,
KEY_KANJI = DIK_KANJI,
KEY_L = DIK_L,
KEY_LBRACKET = DIK_LBRACKET,
KEY_LCONTROL = DIK_LCONTROL,
KEY_LEFT = DIK_LEFT,
KEY_LMENU = DIK_LMENU,
KEY_LWIN = DIK_LWIN,
KEY_M = DIK_M,
KEY_MAIL = DIK_MAIL,
KEY_MEDIASELECT = DIK_MEDIASELECT,
KEY_MEDIASTOP = DIK_MEDIASTOP,
KEY_MINUS = DIK_MINUS,
KEY_MULTIPLY = DIK_MULTIPLY,
KEY_MUTE = DIK_MUTE,
KEY_MYCOMPUTER = DIK_MYCOMPUTER,
KEY_N = DIK_N,
KEY_NEXT = DIK_NEXT,
KEY_NEXTTRACK = DIK_NEXTTRACK,
KEY_NOCONVERT = DIK_NOCONVERT,
KEY_NUMLOCK = DIK_NUMLOCK,
KEY_NUMPAD0 = DIK_NUMPAD0,
KEY_NUMPAD1 = DIK_NUMPAD1,
KEY_NUMPAD2 = DIK_NUMPAD2,
KEY_NUMPAD3 = DIK_NUMPAD3,
KEY_NUMPAD4 = DIK_NUMPAD4,
KEY_NUMPAD5 = DIK_NUMPAD5,
KEY_NUMPAD6 = DIK_NUMPAD6,
KEY_NUMPAD7 = DIK_NUMPAD7,
KEY_NUMPAD8 = DIK_NUMPAD8,
KEY_NUMPAD9 = DIK_NUMPAD9,
KEY_NUMPADCOMMA = DIK_NUMPADCOMMA,
KEY_NUMPADENTER = DIK_NUMPADENTER,
KEY_NUMPADEQUALS = DIK_NUMPADEQUALS,
KEY_O = DIK_O,
KEY_OEM_102 = DIK_OEM_102,
KEY_P = DIK_P,
KEY_PAUSE = DIK_PAUSE,
KEY_PERIOD = DIK_PERIOD,
KEY_PLAYPAUSE = DIK_PLAYPAUSE,
KEY_POWER = DIK_POWER,
KEY_PREVTRACK = DIK_PREVTRACK,
KEY_PRIOR = DIK_PRIOR,
KEY_Q = DIK_Q,
KEY_R = DIK_R,
KEY_RBRACKET = DIK_RBRACKET,
KEY_RCONTROL = DIK_RCONTROL,
KEY_RETURN = DIK_RETURN,
KEY_RIGHT = DIK_RIGHT,
KEY_RMENU = DIK_RMENU,
KEY_RWIN = DIK_RWIN,
KEY_S = DIK_S,
KEY_SCROLL = DIK_SCROLL,
KEY_SEMICOLON = DIK_SEMICOLON,
KEY_SLASH = DIK_SLASH,
KEY_SLEEP = DIK_SLEEP,
KEY_SPACE = DIK_SPACE,
KEY_STOP = DIK_STOP,
KEY_SUBTRACT = DIK_SUBTRACT,
KEY_SYSRQ = DIK_SYSRQ,
KEY_T = DIK_T,
KEY_TAB = DIK_TAB,
KEY_U = DIK_U,
KEY_UNDERLINE = DIK_UNDERLINE,
KEY_UNLABELED = DIK_UNLABELED,
KEY_UP = DIK_UP,
KEY_V = DIK_V,
KEY_VOLUMEDOWN = DIK_VOLUMEDOWN,
KEY_VOLUMEUP = DIK_VOLUMEUP,
KEY_W = DIK_W,
KEY_WAKE = DIK_WAKE,
KEY_WEBBACK = DIK_WEBBACK,
KEY_WEBFAVORITES = DIK_WEBFAVORITES,
KEY_WEBFORWARD = DIK_WEBFORWARD,
KEY_WEBHOME = DIK_WEBHOME,
KEY_WEBREFRESH = DIK_WEBREFRESH,
KEY_WEBSEARCH = DIK_WEBSEARCH,
KEY_WEBSTOP = DIK_WEBSTOP,
KEY_X = DIK_X,
KEY_Y = DIK_Y,
KEY_YEN = DIK_YEN,
KEY_Z = DIK_Z,
*/
KEY_ESCAPE = GLFW_KEY_ESC,
KEY_ANYKEY = 4059
};
#endif
enum ButtonState { UP = 0, DOWN };
@ -800,13 +267,11 @@ public:
Vector rightStick;
bool inited, xinited;
bool anyButton();
#ifdef BBGE_BUILD_SDL
# ifdef BBGE_BUILD_SDL2
SDL_GameController *sdl_controller;
SDL_Haptic *sdl_haptic;
# endif
SDL_Joystick *sdl_joy;
#endif
#if defined(__LINUX__) && !defined(BBGE_BUILD_SDL2)
int eventfd;
int16_t effectid;
@ -823,10 +288,10 @@ enum FollowCameraLock
FCL_VERT = 2
};
//RenderObject Layer Type (enable only one)
//#define RLT_DYNAMIC // Dynamic list
#define RLT_FIXED // Static array
//#define RLT_MAP // Mapping
#define RLT_FIXED
typedef std::vector <RenderObject*> RenderObjects;
typedef std::list <RenderObject*> RenderObjectList;
@ -849,48 +314,17 @@ public:
inline bool empty()
{
#ifdef RLT_FIXED
return objectCount == 0;
#endif
#ifdef RLT_DYNAMIC
return renderObjectList.empty();
#endif
return false;
}
inline RenderObject *getFirst()
{
#ifdef RLT_DYNAMIC
if (renderObjectList.empty()) return 0;
iter = renderObjectList.begin();
return *iter;
#endif
#ifdef RLT_MAP
if (renderObjectMap.empty()) return 0;
iter = renderObjectMap.begin();
return (*iter).second;
#endif
#ifdef RLT_FIXED
iter = 0;
return getNext();
#endif
}
RenderObject *getNext()
{
#ifdef RLT_DYNAMIC
if (iter == renderObjectList.end()) return 0;
iter++;
if (iter == renderObjectList.end()) return 0;
return *iter;
#endif
#ifdef RLT_MAP
if (iter == renderObjectMap.end()) return 0;
iter++;
if (iter == renderObjectMap.end()) return 0;
return (*iter).second;
#endif
#ifdef RLT_FIXED
const int size = renderObjects.size();
int i;
for (i = iter; i < size; i++)
@ -908,7 +342,6 @@ public:
iter = i;
return 0;
}
#endif
return 0;
}
@ -944,20 +377,10 @@ protected:
};
std::vector<DisplayListElement> displayList;
#ifdef RLT_DYNAMIC
RenderObjectList renderObjectList;
RenderObjectList::iterator iter;
#endif
#ifdef RLT_MAP
RenderObjectMap renderObjectMap;
RenderObjectMap::iterator iter;
#endif
#ifdef RLT_FIXED
RenderObjects renderObjects;
int objectCount;
int firstFreeIdx;
int iter;
#endif
};
class Core : public ActionMapper, public StateManager
@ -974,9 +397,9 @@ public:
void initRenderObjectLayers(int num);
void applyState(const std::string &state);
//bool createGlWindow(char* title, int width, int height, int bits, bool fullscreenflag);
bool createWindow(int width, int height, int bits, bool fullscreen, std::string windowTitle="");
//void setWindowTitle(const std::string &title); // func not yet written
void clearBuffers();
void render(int startLayer=-1, int endLayer=-1, bool useFrameBufferIfAvail=true);
void showBuffer();
@ -1005,7 +428,7 @@ public:
void main(float runTime = -1); // can use main
//void adjustWindowPosition(int x, int y);
// state functions
@ -1023,7 +446,7 @@ public:
void removeTexture(Texture *res);
void clearResources();
CountedPtr<Texture> addTexture(const std::string &texture, TextureLoadResult *pLoadResult = 0);
CountedPtr<Texture> addTexture(const std::string &texture);
PostProcessingFX postProcessingFx;
@ -1052,7 +475,7 @@ public:
void updateCursorFromJoystick(float dt, int spd);
uint32 getTicks();
unsigned getTicks();
float stopWatch(int d);
@ -1062,15 +485,7 @@ public:
void resetGraphics(int w, int h, int fullscreen=-1, int vsync=-1, int bpp=-1);
/*
#ifdef BBGE_BUILD_OPENGL
void getWindowHeight(int *height)
{glfwGetWindowSize(0, height);}
void getWindowWidth(int *width)
{glfwGetWindowSize(width, 0);}
#endif
*/
void setDockIcon(const std::string &ident);
@ -1083,8 +498,6 @@ public:
Vector screenCenter;
void sort();
void sortLayer(int layer);
void print(int x, int y, const char *str, float sz=1);
@ -1100,7 +513,7 @@ public:
RenderObjectLayer *getRenderObjectLayer(int i);
std::vector <int> renderObjectLayerOrder;
//typedef std::list<RenderObject*> RenderObjects;
typedef std::vector<RenderObjectLayer> RenderObjectLayers;
RenderObjectLayers renderObjectLayers;
@ -1133,7 +546,6 @@ public:
ParticleManager *particleManager;
//Scripting::Script script;
void setBaseTextureDirectory(const std::string &baseTextureDirectory)
@ -1180,7 +592,7 @@ public:
void applyMatrixStackToWorld();
void translateMatrixStack(float x, float y, float z=0);
//void translateMatrixStackRelative(float x, float y, float z=0);
void rotateMatrixStack(float x, float y, float z);
void scaleMatrixStack(float x, float y, float z=1);
void rotateMatrixStack(float z);
@ -1188,24 +600,12 @@ public:
void bindTexture(int stage, unsigned int handle);
#ifdef BBGE_BUILD_DIRECTX
void blitD3DVerts(IDirect3DTexture9 *texture, float v1x, float v1y, float v2x, float v2y, float v3x, float v3y, float v4x, float v4y);
void blitD3D (IDirect3DTexture9 *texture, int width, int height);
void blitD3DPreTrans (IDirect3DTexture9 *texture, float x, float y, int absWidth, int absHeight);
void blitD3DEx (IDirect3DTexture9 *texture, int width, int height, float u1=0, float v1=0, float u2=1, float v2=1);
void blitD3DGradient(D3DCOLOR ulc0, D3DCOLOR ulc1, D3DCOLOR ulc2, D3DCOLOR ulc3);
LPDIRECT3DDEVICE9 getD3DDevice();
LPD3DXSPRITE getD3DSprite();
LPD3DXMATRIXSTACK getD3DMatrixStack();
#endif
bool getKeyState(int k);
bool getMouseButtonState(int m);
int currentLayerPass;
int keys[KEY_MAXARRAY];
Flags flags;
virtual void debugLog(const std::string &s);
virtual void errorLog(const std::string &s);
void messageBox(const std::string &title, const std::string &msg);
@ -1226,14 +626,10 @@ public:
int particlesPaused;
//JoystickData joystickData[4];
bool joystickEnabled;
bool joystickOverrideMouse;
/*
int numJoysticks;
DIJOYSTATE2 joystate;
Joystick* joysticks[4];
*/
bool debugLogTextures;
@ -1306,11 +702,6 @@ public:
protected:
std::string fpsDebugString;
TimeUpdateType timeUpdateType;
int fixedFPS;
void updateCullData();
std::string userDataFolder;
@ -1328,7 +719,7 @@ protected:
virtual void onReloadResources();
std::pair<CountedPtr<Texture>, TextureLoadResult> doTextureAdd(const std::string &texture, const std::string &name, std::string internalTextureName);
CountedPtr<Texture> doTextureAdd(const std::string &texture, const std::string &name, std::string internalTextureName);
void deleteRenderObjectMemory(RenderObject *r);
bool _hasFocus;
@ -1358,11 +749,8 @@ protected:
void shutdownSoundLibrary();
int afterEffectManagerLayer;
bool sortEnabled;
Vector cameraOffset;
std::vector<float> avgFPS;
float sortTimer;
bool sortFlag;
virtual void modifyDt(float &dt){}
void setPixelScale(int pixelScaleX, int pixelScaleY);
@ -1374,15 +762,10 @@ protected:
bool clearedGarbageFlag;
int nestedMains;
std::string baseTextureDirectory;
#ifdef BBGE_BUILD_WINDOWS
__int64 lastTime, curTime, freq;
#endif
std::ofstream _logOut;
#ifdef BBGE_BUILD_SDL
int nowTicks, thenTicks;
#endif
int _vsync, _bpp;
bool _fullscreen;
@ -1391,7 +774,6 @@ protected:
CountedPtr<Texture> texError;
//unsigned int windowWidth, windowHeight;
int tgaSaveSeries(char *filename, short int width, short int height, unsigned char pixelDepth, unsigned char *imageData);

Some files were not shown because too many files have changed in this diff Show more