Compare commits

...

1 Commits

Author SHA1 Message Date
Marianne Gagnon
abb3465429 First attempt at animating the sun, doesn't work yet 2015-12-17 19:15:46 -05:00
4 changed files with 37 additions and 2 deletions

View File

@ -16,6 +16,7 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "scriptengine/property_animator.hpp"
#include "graphics/irr_driver.hpp"
#include "tracks/track.hpp"
#include "tracks/track_object_presentation.hpp"
#include "utils/log.hpp"
@ -84,6 +85,15 @@ bool AnimatedProperty::update(double dt)
break;
}
case AnimatablePropery::SUN_COLOR:
{
Track* track = (Track*)m_data;
video::SColor color(255, (int)m_new_values[0], (int)m_new_values[1], (int)m_new_values[2]);
track->setSunColor(color);
irr_driver->setSunColor(color);
break;
}
default:
Log::error("PropertyAnimator", "Unknown properry %i", (int)m_property);
break;

View File

@ -26,7 +26,8 @@ enum AnimatablePropery
AP_LIGHT_ENERGY,
FOG_RANGE,
FOG_MAX,
FOG_COLOR
FOG_COLOR,
SUN_COLOR
};
class AnimatedProperty : NoCopy

View File

@ -166,6 +166,27 @@ namespace Scripting
duration, track)
);
}
void setSunColor(int r, int g, int b, float duration)
{
PropertyAnimator* animator = PropertyAnimator::get();
::Track* track = World::getWorld()->getTrack();
video::SColor color = track->getSunColor();
animator->add(
new AnimatedProperty(SUN_COLOR, 3,
new double[3] {
(double)color.getRed(),
(double)color.getGreen(),
(double)color.getBlue()
},
new double[3] {
(double)r,
(double)g,
(double)b
},
duration, track)
);
}
}
/** \cond DOXYGEN_IGNORE */
@ -365,7 +386,8 @@ namespace Scripting
r = engine->RegisterGlobalFunction("void exitRace()", asFUNCTION(exitRace), asCALL_CDECL); assert(r >= 0);
r = engine->RegisterGlobalFunction("void pauseRace()", asFUNCTION(pauseRace), asCALL_CDECL); assert(r >= 0);
r = engine->RegisterGlobalFunction("void setFog(float maxDensity, float start, float end, int r, int g, int b, float duration)", asFUNCTION(setFog), asCALL_CDECL); assert(r >= 0);
r = engine->RegisterGlobalFunction("void setSunColor(int r, int g, int b, float duration)", asFUNCTION(setSunColor), asCALL_CDECL); assert(r >= 0);
// TrackObject
r = engine->RegisterObjectMethod("TrackObject", "void setEnabled(bool status)", asMETHOD(::TrackObject, setEnabled), asCALL_THISCALL); assert(r >= 0);
r = engine->RegisterObjectMethod("TrackObject", "SoundEmitter@ getSoundEmitter()", asMETHOD(::TrackObject, getSoundEmitter), asCALL_THISCALL); assert(r >= 0);

View File

@ -577,6 +577,8 @@ public:
// ------------------------------------------------------------------------
video::SColor getSunColor() const { return m_sun_diffuse_color; }
// ------------------------------------------------------------------------
void setSunColor(video::SColor color) { m_sun_diffuse_color = color; }
// ------------------------------------------------------------------------
/** Whether this is an "internal" track. If so it won't be offered
* in the track selection screen. */
bool isInternal() const { return m_internal; }