historical/toontown-classic.git/panda/include/cInterval.I
2024-01-16 11:20:27 -06:00

226 lines
6 KiB
Text

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file cInterval.I
* @author drose
* @date 2002-08-27
*/
/**
* Returns the interval's name.
*/
INLINE const std::string &CInterval::
get_name() const {
return _name;
}
/**
* Returns the duration of the interval in seconds.
*/
INLINE double CInterval::
get_duration() const {
recompute();
return _duration;
}
/**
* Returns the state of the "open_ended" flag. This is primarily intended for
* instantaneous intervals like FunctionIntervals; it indicates true if the
* interval has some lasting effect that should be applied even if the
* interval doesn't get started until after its finish time, or false if the
* interval is a transitive thing that doesn't need to be called late.
*/
INLINE bool CInterval::
get_open_ended() const {
return _open_ended;
}
/**
* Indicates the state the interval believes it is in: whether it has been
* started, is currently in the middle, or has been finalized.
*/
INLINE CInterval::State CInterval::
get_state() const {
return _state;
}
/**
* Returns true if the interval is in either its initial or final states (but
* not in a running or paused state).
*/
INLINE bool CInterval::
is_stopped() const {
return (_state == S_initial || _state == S_final);
}
/**
* Sets the event that is generated whenever the interval reaches its final
* state, whether it is explicitly finished or whether it gets there on its
* own.
*/
INLINE void CInterval::
set_done_event(const std::string &event) {
_done_event = event;
}
/**
* Returns the event that is generated whenever the interval reaches its final
* state, whether it is explicitly finished or whether it gets there on its
* own.
*/
INLINE const std::string &CInterval::
get_done_event() const {
return _done_event;
}
/**
* Returns the current time of the interval: the last value of t passed to
* priv_initialize(), priv_step(), or priv_finalize().
*/
INLINE double CInterval::
get_t() const {
return _curr_t;
}
/**
* Changes the state of the 'auto_pause' flag. If this is true, the interval
* may be arbitrarily interrupted when the system needs to reset due to some
* external event by calling CIntervalManager::interrupt(). If this is false
* (the default), the interval must always be explicitly finished or paused.
*/
INLINE void CInterval::
set_auto_pause(bool auto_pause) {
_auto_pause = auto_pause;
}
/**
* Returns the state of the 'auto_pause' flag. See set_auto_pause().
*/
INLINE bool CInterval::
get_auto_pause() const {
return _auto_pause;
}
/**
* Changes the state of the 'auto_finish' flag. If this is true, the interval
* may be arbitrarily finished when the system needs to reset due to some
* external event by calling CIntervalManager::interrupt(). If this is false
* (the default), the interval must always be explicitly finished or paused.
*/
INLINE void CInterval::
set_auto_finish(bool auto_finish) {
_auto_finish = auto_finish;
}
/**
* Returns the state of the 'auto_finish' flag. See set_auto_finish().
*/
INLINE bool CInterval::
get_auto_finish() const {
return _auto_finish;
}
/**
* Changes the state of the 'wants_t_callback' flag. If this is true, the
* interval will be returned by CIntervalManager::get_event() each time the
* interval's time value has been changed, regardless of whether it has any
* external events.
*/
INLINE void CInterval::
set_wants_t_callback(bool wants_t_callback) {
_wants_t_callback = wants_t_callback;
_last_t_callback = -1.0;
}
/**
* Returns the state of the 'wants_t_callback' flag. See
* set_wants_t_callback().
*/
INLINE bool CInterval::
get_wants_t_callback() const {
return _wants_t_callback;
}
/**
* Indicates the CIntervalManager object which will be responsible for playing
* this interval. This defaults to the global CIntervalManager; you should
* need to change this only if you have special requirements for playing this
* interval.
*/
INLINE void CInterval::
set_manager(CIntervalManager *manager) {
_manager = manager;
}
/**
* Returns the CIntervalManager object which will be responsible for playing
* this interval. Note that this can only return a C++ object; if the
* particular CIntervalManager object has been extended in the scripting
* language, this will return the encapsulated C++ object, not the full
* extended object.
*/
INLINE CIntervalManager *CInterval::
get_manager() const {
return _manager;
}
/**
* Returns true if the wants_t_callback() flag is true and the interval's t
* value has changed since the last call to check_t_callback(), false
* otherwise.
*/
INLINE bool CInterval::
check_t_callback() {
if (get_wants_t_callback() && get_t() != _last_t_callback) {
_last_t_callback = get_t();
return true;
}
return false;
}
/**
* Calls do_recompute() if the dirty flag has been set.
*/
INLINE void CInterval::
recompute() const {
if (_dirty) {
((CInterval *)this)->do_recompute();
}
}
/**
* Issues a warning if our internal state is not in one of the stopped states.
*/
INLINE void CInterval::
check_stopped(TypeHandle type, const char *method_name) const {
if (_state == S_started) {
interval_cat.warning()
<< type.get_name() << "::" << method_name << "() called for "
<< get_name() << " in state " << _state << ".\n";
nassertv(!verify_intervals);
}
}
/**
* Issues a warning if our internal state is not in one of the started states.
*/
INLINE void CInterval::
check_started(TypeHandle type, const char *method_name) const {
if (_state != S_started && _state != S_paused) {
interval_cat.warning()
<< type.get_name() << "::" << method_name << "() called for "
<< get_name() << " in state " << _state << ".\n";
nassertv(!verify_intervals);
}
}
INLINE std::ostream &
operator << (std::ostream &out, const CInterval &ival) {
ival.output(out);
return out;
}