Gridarta Editor
CrossfireAnimationObjectsReader.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2025 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.var.crossfire.model.io;
21 
22 import java.io.BufferedReader;
23 import java.io.IOException;
32 import org.jetbrains.annotations.NotNull;
33 
39 
43  @NotNull
44  private static final String FACE = "face";
45 
49  @NotNull
50  private static final String FACE_SPACE = FACE + " ";
51 
55  @NotNull
56  private static final String SMOOTHFACE = "smoothface";
57 
61  @NotNull
62  private static final String SMOOTHFACE_SPACE = SMOOTHFACE + " ";
63 
67  @NotNull
68  private final SmoothFaces smoothFaces;
69 
75  this.smoothFaces = smoothFaces;
76  }
77 
78  @Override
79  protected int parseLine(@NotNull final String line, final int startLineNumber, @NotNull final BufferedReader in, @NotNull final ErrorViewCollector errorViewCollector) throws AnimationParseException, IOException {
80  //noinspection SimplifiableIfStatement
81  if (line.startsWith(FACE_SPACE)) {
82  return processFace(line.substring(FACE_SPACE.length()), startLineNumber, in, errorViewCollector);
83  }
84 
85  return -1;
86  }
87 
99  private int processFace(@NotNull final String faceName, final int startLineNumber, @NotNull final BufferedReader in, @NotNull final ErrorViewCollector errorViewCollector) throws AnimationParseException, IOException {
100  int lineNumber = startLineNumber;
101  while (true) {
102  lineNumber++;
103  final String untrimmedLine = in.readLine();
104  if (untrimmedLine == null) {
105  throw new AnimationParseException("end", "<end of file>", lineNumber);
106  }
107  final String line = untrimmedLine.trim();
108  //noinspection StatementWithEmptyBody
109  if (line.startsWith("#") || line.isEmpty()) {
110  // ignore comment line
111  } else if (line.startsWith("face ")) {
112  throw new AnimationParseException("end", line, lineNumber);
113  } else if (line.equals("end")) {
114  break;
115  }
116  //noinspection StatementWithEmptyBody
117  if (line.startsWith(SMOOTHFACE_SPACE)) {
118  //noinspection TooBroadScope
119  final String smoothFaceName = line.substring(SMOOTHFACE_SPACE.length());
120  try {
121  smoothFaces.add(new SmoothFace(faceName, smoothFaceName));
122  } catch (final DuplicateSmoothFaceException ex) {
123  errorViewCollector.addWarning(ErrorViewCategory.ARCHETYPE_INVALID, faceName + ": duplicate " + SMOOTHFACE + " '" + ex.getMessage() + "': " + line);
124  }
125  } else {
126  // XXX: actually process this information
127  }
128  }
129  return lineNumber - startLineNumber;
130  }
131 
132 }
net.sf.gridarta.model.smoothface.SmoothFace
Smoothing information for one face name.
Definition: SmoothFace.java:28
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.model.anim.AnimationObjects
AnimationObjects is a container for AnimationObjects.
Definition: AnimationObjects.java:30
net.sf
net.sf.gridarta.model.io.AbstractAnimationObjectsReader
Utility class for reading AnimationObjects from files.
Definition: AbstractAnimationObjectsReader.java:44
net.sf.gridarta.model.smoothface
Definition: DuplicateSmoothFaceException.java:20
net.sf.gridarta.var.crossfire.model.io.CrossfireAnimationObjectsReader.parseLine
int parseLine(@NotNull final String line, final int startLineNumber, @NotNull final BufferedReader in, @NotNull final ErrorViewCollector errorViewCollector)
Parses a line.
Definition: CrossfireAnimationObjectsReader.java:79
net
net.sf.gridarta.model.errorview
Definition: ErrorView.java:20
net.sf.gridarta.model.smoothface.SmoothFaces.add
void add(@NotNull final SmoothFace smoothFace)
Adds a SmoothFace instance.
Definition: SmoothFaces.java:64
net.sf.gridarta.model.errorview.ErrorViewCollector
Convenience class for adding messages to a ErrorView instance using a fixed category name.
Definition: ErrorViewCollector.java:31
net.sf.gridarta.var.crossfire.model.io.CrossfireAnimationObjectsReader.processFace
int processFace(@NotNull final String faceName, final int startLineNumber, @NotNull final BufferedReader in, @NotNull final ErrorViewCollector errorViewCollector)
Processes a face..end block.
Definition: CrossfireAnimationObjectsReader.java:99
net.sf.gridarta.model.anim.AnimationParseException
This exception is thrown when parsing an animation definition file (.
Definition: AnimationParseException.java:31
net.sf.gridarta.model.errorview.ErrorViewCategory
Defines possible error categories for ErrorView instances.
Definition: ErrorViewCategory.java:28
net.sf.gridarta.model.smoothface.DuplicateSmoothFaceException
Thrown to indicate that a SmoothFace instance is not unique.
Definition: DuplicateSmoothFaceException.java:28
net.sf.gridarta.model.errorview.ErrorViewCategory.ARCHETYPE_INVALID
ARCHETYPE_INVALID
Definition: ErrorViewCategory.java:50
net.sf.gridarta.var.crossfire.model.io.CrossfireAnimationObjectsReader.SMOOTHFACE
static final String SMOOTHFACE
The tag for smoothing information.
Definition: CrossfireAnimationObjectsReader.java:56
net.sf.gridarta.var.crossfire.model.io.CrossfireAnimationObjectsReader.smoothFaces
final SmoothFaces smoothFaces
The SmoothFaces instance to update.
Definition: CrossfireAnimationObjectsReader.java:68
net.sf.gridarta.model.io
Reading and writing of maps, handling of paths.
Definition: AbstractAnimationObjectsReader.java:20
net.sf.gridarta.model
net.sf.gridarta.model.smoothface.SmoothFaces
Collection of all smoothing information.
Definition: SmoothFaces.java:37
net.sf.gridarta.model.anim
Gridarta can handle frame information of animations and allow the selection of an animation using a t...
Definition: AbstractAnimationObjects.java:20
net.sf.gridarta.var.crossfire.model.io.CrossfireAnimationObjectsReader
Reads Crossfire AnimationObjects from files.
Definition: CrossfireAnimationObjectsReader.java:38
net.sf.gridarta.var.crossfire.model.io.CrossfireAnimationObjectsReader.CrossfireAnimationObjectsReader
CrossfireAnimationObjectsReader(@NotNull final SmoothFaces smoothFaces)
Creates a new instance.
Definition: CrossfireAnimationObjectsReader.java:74
net.sf.gridarta.var.crossfire.model.io.CrossfireAnimationObjectsReader.FACE
static final String FACE
The start tag for face blocks.
Definition: CrossfireAnimationObjectsReader.java:44
net.sf.gridarta.var.crossfire.model.io.CrossfireAnimationObjectsReader.FACE_SPACE
static final String FACE_SPACE
The start tag for face blocks, including a trailing space.
Definition: CrossfireAnimationObjectsReader.java:50
net.sf.gridarta.var.crossfire.model.io.CrossfireAnimationObjectsReader.SMOOTHFACE_SPACE
static final String SMOOTHFACE_SPACE
The tag for smoothing information, including a trailing space.
Definition: CrossfireAnimationObjectsReader.java:62