File: ucsched.h

package info (click to toggle)
exult 1.2-4
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 9,040 kB
  • ctags: 10,543
  • sloc: cpp: 99,373; sh: 8,333; ansic: 4,659; makefile: 988; yacc: 769; lex: 313; xml: 19
file content (87 lines) | stat: -rw-r--r-- 2,999 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
 *  Copyright (C) 2000-2001  The Exult Team
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef _UCSCHED_H
#define _UCSCHED_H

class Game_object;
class Usecode_value;
class Usecode_internal;

#include "tqueue.h"

/*
 *	A class for executing usecode at a scheduled time:
 */
class Usecode_script : public Time_sensitive
	{
	static int count;		// Total # of these around.
	static Usecode_script *first;// ->chain of all of them.
	Usecode_script *next, *prev;	// Next/prev. in global chain.
	Game_object *obj;		// From objval.
	Usecode_value *code;		// Array of code to execute.
	int cnt;			// Length of arrval.
	int i;				// Current index.
	int frame_index;		// For taking steps.
	bool no_halt;			// 1 to ignore halt().
	bool must_finish;		// 1 to finish before deleting.
	int delay;			// Used for restoring.
					// For restore:
	Usecode_script(Game_object *item, Usecode_value *cd, int findex,
						int nhalt, int del);
public:
	Usecode_script(Game_object *o, Usecode_value *cd = 0);
	~Usecode_script();
	void start(long delay = 1);	// Start after 'delay' msecs.
	long get_delay() const
		{ return delay; }
	void halt();			// Stop executing.
	bool is_no_halt() const		// Is the 'no_halt' flag set?
		{ return no_halt; }
	int is_activated()		// Started already?
		{ return i > 0; }
	void add(int v1);		// Append new instructions:
	void add(int v1, int v2);
	void add(int v1, const char *str);
	void add(int *vals, int cnt);
	Usecode_script& operator<<(int v)
		{ add(v); return *this; }
	inline void activate_egg(Usecode_internal *usecode,  Game_object *e);

	static int get_count()
		{ return count; }
					// Find for given item.
	static Usecode_script *find(Game_object *srch, 
					Usecode_script *last_found = 0);
	static void terminate(Game_object *obj);
	static void clear();		// Delete all.
					// Remove all whose objs. are too far.
	static void purge(Tile_coord pos, int dist);
	virtual void handle_event(unsigned long curtime, long udata);
	int exec(Usecode_internal *usecode, bool finish);
					// Move object in given direction.
	void step(Usecode_internal *usecode, int dir);
					// Save/restore.
	int save(unsigned char *buf, int buflen);
	static Usecode_script *restore(Game_object *item,
					unsigned char *buf, int buflen);
	void print(std::ostream& out);	// Print values.
	};


#endif