~ubuntu-branches/ubuntu/vivid/imaze/vivid

« back to all changes in this revision

Viewing changes to source/X_daten.c

  • Committer: Bazaar Package Importer
  • Author(s): Hans Freitag
  • Date: 2002-11-28 13:24:12 UTC
  • Revision ID: james.westby@ubuntu.com-20021128132412-lw82xl9oq1j36g8b
Tags: upstream-1.4
ImportĀ upstreamĀ versionĀ 1.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
** - - -  iMaze  - - -
 
3
**
 
4
** Copyright (c) 1993-2001 by Hans-Ulrich Kiel & Joerg Czeranski
 
5
** All rights reserved.
 
6
**
 
7
** Redistribution and use in source and binary forms, with or without
 
8
** modification, are permitted provided that the following conditions are
 
9
** met:
 
10
**
 
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
 
18
**    permission.
 
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.
 
21
**
 
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.
 
33
**
 
34
**
 
35
** Datei: X_daten.c
 
36
**
 
37
** Kommentar:
 
38
**  Verwaltung der Objektlisten
 
39
*/
 
40
 
 
41
 
 
42
#include <stdio.h>
 
43
#include <string.h>
 
44
 
 
45
#include "global.h"
 
46
#include "speicher.h"
 
47
#include "grafik.h"
 
48
#include "X_daten.h"
 
49
 
 
50
static char sccsid[] = "@(#)X_daten.c   3.3 12/3/01";
 
51
 
 
52
 
 
53
/*
 
54
** objekte_kopieren
 
55
**  kopiert Liste, in der die Grafikobbjekte fuer die 3D-Darstellung
 
56
**  zwischengespeichert werden
 
57
**
 
58
** Parameter:
 
59
**  objekte: Liste, Ziel
 
60
**  objekte_neu: Liste, Quelle
 
61
**
 
62
** Seiteneffekte:
 
63
**  objekte_neu wird gesetzt
 
64
*/
 
65
void objekte_kopieren(struct objektdaten *objekte,
 
66
        struct objektdaten *objekte_neu)
 
67
{
 
68
        int i; /* Index fuer die Kugeln */
 
69
 
 
70
        objekte->hintergrund_zeichnen = objekte_neu->hintergrund_zeichnen;
 
71
 
 
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));
 
77
 
 
78
        /* in Liste mit Kugeln jeweils Unterliste mit Sichtbarkeitsbereichen
 
79
           freigeben */
 
80
        for (i = 0; i < objekte->anzkugeln; i++)
 
81
                liste_freigeben(&objekte->kugeln[i].sichtanz,
 
82
                        (void **)&objekte->kugeln[i].sichtbar);
 
83
 
 
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));
 
89
 
 
90
        /* in Liste mit Kugeln jeweils Unterliste mit Sichtbarkeitsbereichen
 
91
           neu kopieren */
 
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));
 
98
 
 
99
        /* alten Spruch des Gegners freigeben */
 
100
        if (objekte->text != NULL)
 
101
                speicher_freigeben((void **)&objekte->text);
 
102
 
 
103
        /* Spruch des Gegners kopieren */
 
104
        if (objekte_neu->text == NULL)
 
105
                objekte->text = NULL;
 
106
        else
 
107
        {
 
108
                speicher_belegen((void **)&objekte->text,
 
109
                        strlen(objekte_neu->text) + 1);
 
110
                strcpy(objekte->text, objekte_neu->text);
 
111
        }
 
112
}
 
113
 
 
114
 
 
115
/*
 
116
** objekt_listen_init
 
117
**  initialisiert Liste, in der die Grafikobbjekte fuer die 3D-Darstellung
 
118
**  zwischengespeichert werden
 
119
**
 
120
** Parameter:
 
121
**  objekte: Liste, die initialisiert werden soll
 
122
**
 
123
** Seiteneffekte:
 
124
**  *objekte wird gesetzt
 
125
*/
 
126
void objekt_listen_init(struct objektdaten *objekte)
 
127
{
 
128
        /* zu Anfang ist das Bild leer */
 
129
        objekte->hintergrund_zeichnen = 0;
 
130
 
 
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);
 
134
 
 
135
        /* kein Gegner-Spruch */
 
136
        objekte->text = NULL;
 
137
}