1
/* -*- Mode: JavaScript; coding: utf-8; tab-width: 3; indent-tabs-mode: tab; c-basic-offset: 3 -*-
2
*******************************************************************************
4
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6
* Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011.
8
* All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
10
* The copyright notice above does not evidence any actual of intended
11
* publication of such source code, and is an unpublished work by create3000.
12
* This material contains CONFIDENTIAL INFORMATION that is the property of
15
* No permission is granted to copy, distribute, or create derivative works from
16
* the contents of this software, in whole or in part, without the prior written
17
* permission of create3000.
19
* NON-MILITARY USE ONLY
21
* All create3000 software are effectively free software with a non-military use
22
* restriction. It is free. Well commented source is provided. You may reuse the
23
* source in any way you please with the exception anything that uses it must be
24
* marked to indicate is contains 'non-military use only' components.
26
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
28
* Copyright 2015, 2016 Holger Seelig <holger.seelig@yahoo.de>.
30
* This file is part of the Cobweb Project.
32
* Cobweb is free software: you can redistribute it and/or modify it under the
33
* terms of the GNU General Public License version 3 only, as published by the
34
* Free Software Foundation.
36
* Cobweb is distributed in the hope that it will be useful, but WITHOUT ANY
37
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
38
* A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
39
* details (a copy is included in the LICENSE file that accompanied this code).
41
* You should have received a copy of the GNU General Public License version 3
42
* along with Cobweb. If not, see <http://www.gnu.org/licenses/gpl.html> for a
43
* copy of the GPLv3 License.
45
* For Silvio, Joy and Adi.
47
******************************************************************************/
52
"cobweb/Components/Followers/X3DFollowerNode",
53
"cobweb/Bits/X3DConstants",
54
"standard/Math/Algorithm",
63
function X3DDamperNode (executionContext)
65
X3DFollowerNode .call (this, executionContext);
67
this .addType (X3DConstants .X3DDamperNode);
70
X3DDamperNode .prototype = $.extend (Object .create (X3DFollowerNode .prototype),
72
constructor: X3DDamperNode,
73
initialize: function ()
75
X3DFollowerNode .prototype .initialize .call (this);
77
this .order_ .addInterest ("set_order__", this);
78
this .set_value_ .addInterest ("set_value__", this);
79
this .set_destination_ .addInterest ("set_destination__", this);
82
buffer = this .getBuffer (),
83
initialValue = this .getInitialValue (),
84
initialDestination = this .getInitialDestination ();
86
buffer [0] = this .duplicate (initialDestination);
88
for (var i = 1, length = this .getOrder () + 1; i < length; ++ i)
89
buffer [i] = this .duplicate (initialValue);
91
if (this .equals (initialDestination, initialValue, this .getTolerance ()))
92
this .setValue (initialDestination);
95
this .set_active (true);
99
return Algorithm .clamp (this .order_ .getValue (), 0, 5);
101
getTolerance: function ()
103
if (this .tolerance_ .getValue () < 0)
106
return this .tolerance_ .getValue ();
108
prepareEvents: function ()
111
buffer = this .getBuffer (),
112
order = buffer .length - 1;
114
if (this .tau_ .getValue ())
117
delta = 1 / this .getBrowser () .currentFrameRate,
118
alpha = Math .exp (-delta / this .tau_ .getValue ());
120
for (var i = 0; i < order; ++ i)
124
this .assign (buffer, i + 1, this .interpolate (buffer [i], buffer [i + 1], alpha));
130
this .setValue (buffer [order]);
132
if (! this .equals (buffer [order], buffer [0], this .getTolerance ()))
137
this .setValue (buffer [0]);
142
for (var i = 1, length = buffer .length; i < length; ++ i)
143
this .assign (buffer, i, buffer [order]);
145
this .set_active (false);
147
set_value__: function ()
150
buffer = this .getBuffer (),
151
value = this .getValue ();
153
for (var i = 1, length = buffer .length; i < length; ++ i)
154
this .assign (buffer, i, value);
156
this .setValue (value);
158
this .set_active (true);
160
set_destination__: function ()
162
this .assign (this .getBuffer (), 0, this .getDestination ());
164
this .set_active (true);
166
set_order__: function ()
169
buffer = this .getBuffer (),
170
value = buffer [buffer .length - 1];
172
for (var i = buffer .length, length = this .getOrder () + 1; i < length; ++ i)
173
buffer [i] = this .duplicate (value);
175
buffer .length = length;
179
return X3DDamperNode;