2 This file is part of 3dengfx demosystem.
4 Copyright (c) 2004, 2005 John Tsiombikas <nuclear@siggraph.org>
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 /* demosystem script controlled commands
23 * Author: John Tsiombikas 2005
32 #include "common/err_msg.h"
37 // command handler prototypes
38 static bool start_part(const char *pname, const char **args);
39 static bool end_part(const char *pname, const char **args);
40 static bool rename_part(const char *pname, const char **args);
41 static bool set_render_target(const char *pname, const char **args);
42 static bool set_clear(const char *pname, const char **args);
43 static bool end(const char *unused, const char **args);
44 static bool effect(const char *fxname, const char **args);
46 static bool (*ftbl[64])(const char*, const char**);
48 void cmd::register_commands() {
49 ftbl[CMD_START_PART] = start_part;
50 ftbl[CMD_END_PART] = end_part;
51 ftbl[CMD_RENAME_PART] = rename_part;
52 ftbl[CMD_SET_RTARGET] = set_render_target;
53 ftbl[CMD_SET_CLEAR] = set_clear;
55 ftbl[CMD_FX] = effect;
58 bool cmd::command(CommandType cmd_id, const char *pname, const char **args) {
61 return ftbl[cmd_id](pname, args);
64 static bool start_part(const char *pname, const char **args) {
65 Part *part = get_part(pname);
67 info("start_part(%s)", pname);
74 static bool end_part(const char *pname, const char **args) {
75 Part *part = get_part(pname);
77 info("end_part(%s)", pname);
84 static bool rename_part(const char *pname, const char **args) {
85 Part *part = get_part(pname);
87 info("rename_part(%s, %s)", pname, args[0]);
89 part->set_name(args[0]);
96 static bool set_render_target(const char *pname, const char **args) {
97 Part *part = get_part(pname);
101 // check for valid render target specifier (fb, t0, t1, t2, t3)
102 if(!strcmp(args[0], "fb")) {
105 if(args[0][0] != 't' || !isdigit(args[0][1]) || args[0][2] ||
106 (tnum = atoi(args[0]+1)) < 0 || tnum > 3) {
111 info("set_rtarg(%s, %s)", pname, args[0]);
112 part->set_target((RenderTarget)tnum);
118 static bool set_clear(const char *pname, const char **args) {
119 Part *part = get_part(pname);
120 if(part && args[0]) {
122 if(!strcmp(args[0], "true")) {
124 } else if(!strcmp(args[0], "false")) {
130 info("set_clear(%s, %s)", pname, enable ? "true" : "false");
131 part->set_clear(enable);
137 static bool end(const char *unused, const char **args) {
138 if(unused && *unused) return false;
145 static bool effect(const char *fxname, const char **args) {
148 if(!strcmp(fxname, "neg")) {
150 } else if(!strcmp(fxname, "flash")) {
152 } else if(!strcmp(fxname, "overlay")) {
154 } else if(!strcmp(fxname, "fade")) {
157 error("unknown effect: %s, ignoring", fxname);
161 if(!fx->parse_script_args(args)) {
162 error("fx(%s): invalid syntax", fxname);
167 info("fx(%s)", fxname);