Exemple #1
0
void Tile::HandleUpdate(StringHash eventType, VariantMap &eventData)
{
    double elapsedTime = masterControl_->world.scene->GetElapsedTime();
    double offsetY = 0.0;

    //Alien Chaos - Disorder = time*1.0525f
    //Talpa - Unusual Chair = time*1.444
    wave_ = 6.0*pow(masterControl_->Sine(Abs(float(centerDistExp_ - elapsedTime) * 0.666f)), 4.0f);

    uint nHexAffectors = tileMaster_->hexAffectors_.Size();
    if (nHexAffectors) {
        for (uint i = 0; i < nHexAffectors; i++) {
            WeakPtr<Node> hexAffector = tileMaster_->hexAffectors_.Keys()[i];
            double hexAffectorMass = tileMaster_->hexAffectors_[hexAffector]->GetMass();

            if (hexAffector->IsEnabled()) {
                double offsetYPart = sqrt(hexAffectorMass) - (0.1* Vector3::Distance(referencePosition_, hexAffector->GetPosition()));
                if (offsetYPart > 0.0) {
                    offsetYPart = pow(offsetYPart, 4);
                    offsetY += offsetYPart;
                }
            }
        }
        offsetY = sqrt(offsetY);
    }
    offsetY += 0.023f * wave_;

    Vector3 lastPos = rootNode_->GetPosition();
    Vector3 newPos = Vector3(lastPos.x_, referencePosition_.y_ - offsetY, lastPos.z_);
    rootNode_->SetPosition(newPos);

    double color = Clamp((0.25f * offsetY) +0.3f, 0.0f, 1.0f);
    model_->GetMaterial(0)->SetShaderParameter("MatDiffColor", Color(color, color, color, color + (0.023 * wave_)));
}