// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
#include "stdafx.h"

#include <stoke/additive_velocity_field.hpp>

namespace stoke {

additive_velocity_field::~additive_velocity_field() {}

float additive_velocity_field::get_velocity_scale() { return m_velocityScale; }

void additive_velocity_field::set_velocity_scale( float newScale ) { m_velocityScale = newScale; }

void additive_velocity_field::update( const time_interface& updateTime ) {
    for( std::vector<field_interface_ptr>::iterator it = m_implFields.begin(), itEnd = m_implFields.end(); it != itEnd;
         ++it )
        ( *it )->update( updateTime );
}

// void additive_velocity_field::reset_simulation(){
//	for( std::vector< field_interface_ptr >::iterator it = m_implFields.begin(), itEnd = m_implFields.end(); it !=
//itEnd; ++it )
//		(*it)->reset_simulation();
// }
//
// void additive_velocity_field::advance_simulation(){
//	for( std::vector< field_interface_ptr >::iterator it = m_implFields.begin(), itEnd = m_implFields.end(); it !=
//itEnd; ++it )
//		(*it)->advance_simulation();
// }

vec3 additive_velocity_field::evaluate_velocity( const vec3& p ) const {
    vec3 result( 0, 0, 0 );

    for( std::vector<field_interface_ptr>::const_iterator it = m_implFields.begin(), itEnd = m_implFields.end();
         it != itEnd; ++it )
        result += ( *it )->evaluate_velocity( p );

    return m_velocityScale * result;
}

} // namespace stoke