historical/toontown-classic.git/panda/include/cIntervalManager.h

101 lines
2.4 KiB
C
Raw Normal View History

2024-01-16 11:20:27 -06:00
/**
* 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 cIntervalManager.h
* @author drose
* @date 2002-09-10
*/
#ifndef CINTERVALMANAGER_H
#define CINTERVALMANAGER_H
#include "directbase.h"
#include "cInterval.h"
#include "pointerTo.h"
#include "pvector.h"
#include "pmap.h"
#include "vector_int.h"
#include "pmutex.h"
class EventQueue;
/**
* This object holds a number of currently-playing intervals and is
* responsible for advancing them each frame as needed.
*
* There is normally only one IntervalManager object in the world, and it is
* the responsibility of the scripting language to call step() on this object
* once each frame, and to then process the events indicated by
* get_next_event().
*
* It is also possible to create multiple IntervalManager objects for special
* needs.
*/
class EXPCL_DIRECT_INTERVAL CIntervalManager {
PUBLISHED:
CIntervalManager();
~CIntervalManager();
INLINE void set_event_queue(EventQueue *event_queue);
INLINE EventQueue *get_event_queue() const;
int add_c_interval(CInterval *interval, bool external);
int find_c_interval(const std::string &name) const;
CInterval *get_c_interval(int index) const;
void remove_c_interval(int index);
int interrupt();
int get_num_intervals() const;
int get_max_index() const;
void step();
int get_next_event();
int get_next_removal();
void output(std::ostream &out) const;
void write(std::ostream &out) const;
static CIntervalManager *get_global_ptr();
private:
void finish_interval(CInterval *interval);
void remove_index(int index);
enum Flags {
F_external = 0x0001,
F_meta_interval = 0x0002,
};
class IntervalDef {
public:
PT(CInterval) _interval;
int _flags;
int _next_slot;
};
typedef pvector<IntervalDef> Intervals;
Intervals _intervals;
typedef pmap<std::string, int> NameIndex;
NameIndex _name_index;
typedef vector_int Removed;
Removed _removed;
EventQueue *_event_queue;
int _first_slot;
int _next_event_index;
Mutex _lock;
static CIntervalManager *_global_ptr;
};
INLINE std::ostream &operator << (std::ostream &out, const CInterval &ival_mgr);
#include "cIntervalManager.I"
#endif