4
** Copyright (c) 1993-2001 by Hans-Ulrich Kiel & Joerg Czeranski
5
** All rights reserved.
7
** Redistribution and use in source and binary forms, with or without
8
** modification, are permitted provided that the following conditions are
11
** 1. Redistributions of source code must retain the above copyright
12
** notice, this list of conditions and the following disclaimer.
13
** 2. Redistributions in binary form must reproduce the above copyright
14
** notice, this list of conditions and the following disclaimer in the
15
** documentation and/or other materials provided with the distribution.
16
** 3. The name of the authors may not be used to endorse or promote
17
** products derived from this software without specific prior written
19
** 4. The name ``iMaze'' may not be used for products derived from this
20
** software unless a prefix or a suffix is added to the name.
22
** THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
23
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25
** DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT,
26
** INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
27
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
30
** STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
31
** IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
** POSSIBILITY OF SUCH DAMAGE.
38
** Verwaltung der Objektlisten
50
static char sccsid[] = "@(#)X_daten.c 3.3 12/3/01";
55
** kopiert Liste, in der die Grafikobbjekte fuer die 3D-Darstellung
56
** zwischengespeichert werden
59
** objekte: Liste, Ziel
60
** objekte_neu: Liste, Quelle
63
** objekte_neu wird gesetzt
65
void objekte_kopieren(struct objektdaten *objekte,
66
struct objektdaten *objekte_neu)
68
int i; /* Index fuer die Kugeln */
70
objekte->hintergrund_zeichnen = objekte_neu->hintergrund_zeichnen;
72
/* Liste der Waende freigeben und dann neue Kopie erstellen */
73
liste_freigeben(&objekte->anzwaende, (void **)&objekte->waende);
74
liste_kopieren(&objekte->anzwaende, (void **)&objekte->waende,
75
&objekte_neu->anzwaende, (void **)&objekte_neu->waende,
76
sizeof(struct flaeche));
78
/* in Liste mit Kugeln jeweils Unterliste mit Sichtbarkeitsbereichen
80
for (i = 0; i < objekte->anzkugeln; i++)
81
liste_freigeben(&objekte->kugeln[i].sichtanz,
82
(void **)&objekte->kugeln[i].sichtbar);
84
/* Liste mit Kugeln freigeben und dann neu kopieren */
85
liste_freigeben(&objekte->anzkugeln, (void **)&objekte->kugeln);
86
liste_kopieren(&objekte->anzkugeln, (void **)&objekte->kugeln,
87
&objekte_neu->anzkugeln, (void **)&objekte_neu->kugeln,
88
sizeof(struct kugel));
90
/* in Liste mit Kugeln jeweils Unterliste mit Sichtbarkeitsbereichen
92
for (i = 0; i < objekte->anzkugeln; i++)
93
liste_kopieren(&objekte->kugeln[i].sichtanz,
94
(void **)&objekte->kugeln[i].sichtbar,
95
&objekte_neu->kugeln[i].sichtanz,
96
(void **)&objekte_neu->kugeln[i].sichtbar,
97
sizeof(struct ausschnitt));
99
/* alten Spruch des Gegners freigeben */
100
if (objekte->text != NULL)
101
speicher_freigeben((void **)&objekte->text);
103
/* Spruch des Gegners kopieren */
104
if (objekte_neu->text == NULL)
105
objekte->text = NULL;
108
speicher_belegen((void **)&objekte->text,
109
strlen(objekte_neu->text) + 1);
110
strcpy(objekte->text, objekte_neu->text);
116
** objekt_listen_init
117
** initialisiert Liste, in der die Grafikobbjekte fuer die 3D-Darstellung
118
** zwischengespeichert werden
121
** objekte: Liste, die initialisiert werden soll
124
** *objekte wird gesetzt
126
void objekt_listen_init(struct objektdaten *objekte)
128
/* zu Anfang ist das Bild leer */
129
objekte->hintergrund_zeichnen = 0;
131
/* objekte enthaelt ihrerseits eine Liste von Waenden und Kugeln */
132
liste_initialisieren(&objekte->anzwaende, (void **)&objekte->waende);
133
liste_initialisieren(&objekte->anzkugeln, (void **)&objekte->kugeln);
135
/* kein Gegner-Spruch */
136
objekte->text = NULL;