this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

do not change texture filenames + update check

clover 2d338bed 4e3628fc

+188 -184
+14
.settings/org.eclipse.jdt.core.prefs
··· 112 112 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore 113 113 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning 114 114 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning 115 + org.eclipse.jdt.core.formatter.align_arrows_in_switch_on_columns=false 115 116 org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false 116 117 org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 118 + org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false 117 119 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false 118 120 org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false 119 121 org.eclipse.jdt.core.formatter.align_with_spaces=false ··· 141 143 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 142 144 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 143 145 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 146 + org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow=0 147 + org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon=0 144 148 org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 145 149 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 146 150 org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 ··· 149 153 org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 150 154 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 151 155 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 156 + org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration=16 152 157 org.eclipse.jdt.core.formatter.alignment_for_record_components=16 153 158 org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 154 159 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 ··· 159 164 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 160 165 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16 161 166 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 167 + org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow=0 162 168 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 163 169 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 164 170 org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0 ··· 184 190 org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line 185 191 org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line 186 192 org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line 193 + org.eclipse.jdt.core.formatter.brace_position_for_block_in_case_after_arrow=end_of_line 187 194 org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line 188 195 org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line 189 196 org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line ··· 210 217 org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert 211 218 org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert 212 219 org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert 220 + org.eclipse.jdt.core.formatter.comment.javadoc_do_not_separate_block_tags=false 213 221 org.eclipse.jdt.core.formatter.comment.line_length=150 214 222 org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true 215 223 org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true ··· 282 290 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert 283 291 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert 284 292 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert 293 + org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types=insert 285 294 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert 286 295 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert 287 296 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert ··· 373 382 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert 374 383 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert 375 384 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert 385 + org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types=do not insert 376 386 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert 377 387 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert 378 388 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert ··· 436 446 org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert 437 447 org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert 438 448 org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert 449 + org.eclipse.jdt.core.formatter.join_line_comments=false 439 450 org.eclipse.jdt.core.formatter.join_lines_in_comments=true 440 451 org.eclipse.jdt.core.formatter.join_wrapped_lines=false 441 452 org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_if_empty ··· 456 467 org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false 457 468 org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=true 458 469 org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false 470 + org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line=one_line_never 471 + org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line=one_line_never 459 472 org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false 460 473 org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_if_empty 461 474 org.eclipse.jdt.core.formatter.lineSplit=160 ··· 496 509 org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true 497 510 org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true 498 511 org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true 512 + org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator=false 499 513 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true 500 514 org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
+1 -1
.settings/org.eclipse.jdt.ui.prefs
··· 1 1 eclipse.preferences.version=1 2 2 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true 3 3 formatter_profile=_StarRod 4 - formatter_settings_version=21 4 + formatter_settings_version=23 5 5 org.eclipse.jdt.ui.exception.name=e 6 6 org.eclipse.jdt.ui.gettersetter.use.is=true 7 7 org.eclipse.jdt.ui.keywordthis=false
+16 -2
.vscode/eclipse-format.xml
··· 1 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 - <profiles version="21"> 3 - <profile kind="CodeFormatterProfile" name="StarRod" version="21"> 2 + <profiles version="23"> 3 + <profile kind="CodeFormatterProfile" name="StarRod" version="23"> 4 4 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/> 5 5 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/> 6 6 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/> ··· 79 79 <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/> 80 80 <setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/> 81 81 <setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/> 82 + <setting id="org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator" value="false"/> 82 83 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/> 83 84 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/> 84 85 <setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false"/> ··· 104 105 <setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/> 105 106 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/> 106 107 <setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/> 108 + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types" value="do not insert"/> 107 109 <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/> 108 110 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/> 109 111 <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/> ··· 156 158 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/> 157 159 <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/> 158 160 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/> 161 + <setting id="org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration" value="16"/> 159 162 <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/> 160 163 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/> 161 164 <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/> 162 165 <setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/> 163 166 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/> 164 167 <setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/> 168 + <setting id="org.eclipse.jdt.core.formatter.comment.javadoc_do_not_separate_block_tags" value="false"/> 165 169 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/> 166 170 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/> 167 171 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/> ··· 196 200 <setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/> 197 201 <setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="true"/> 198 202 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/> 203 + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case_after_arrow" value="end_of_line"/> 199 204 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/> 200 205 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/> 201 206 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/> ··· 227 232 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/> 228 233 <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/> 229 234 <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/> 235 + <setting id="org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line" value="one_line_never"/> 230 236 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/> 231 237 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/> 232 238 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/> ··· 238 244 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/> 239 245 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/> 240 246 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/> 247 + <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow" value="0"/> 241 248 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/> 242 249 <setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/> 243 250 <setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="150"/> ··· 274 281 <setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/> 275 282 <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/> 276 283 <setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/> 284 + <setting id="org.eclipse.jdt.core.formatter.align_arrows_in_switch_on_columns" value="false"/> 277 285 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/> 278 286 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/> 279 287 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/> 280 288 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/> 281 289 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/> 282 290 <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/> 291 + <setting id="org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line" value="false"/> 283 292 <setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="next_line"/> 284 293 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/> 294 + <setting id="org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line" value="one_line_never"/> 295 + <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon" value="0"/> 285 296 <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="0"/> 286 297 <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/> 287 298 <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/> ··· 301 312 <setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/> 302 313 <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/> 303 314 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/> 315 + <setting id="org.eclipse.jdt.core.formatter.join_line_comments" value="false"/> 304 316 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/> 305 317 <setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/> 306 318 <setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/> ··· 324 336 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/> 325 337 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/> 326 338 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/> 339 + <setting id="org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow" value="0"/> 327 340 <setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_if_empty"/> 328 341 <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="49"/> 329 342 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/> ··· 361 374 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/> 362 375 <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/> 363 376 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/> 377 + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types" value="insert"/> 364 378 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/> 365 379 <setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_if_empty"/> 366 380 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+1 -1
app.properties
··· 1 - version=0.9.0 1 + version=0.9.1
+14
database/star_rod_macros.h
··· 1 + #ifndef _STAR_ROD_MACROS_H_ 2 + #define _STAR_ROD_MACROS_H_ 3 + // macros used by Star Rod's script generation 4 + 5 + #define EVT_MAKE_ITEM_ENTITY(args...) \ 6 + Call(MakeItemEntity, args) 7 + 8 + #define EVT_MAKE_ENTITY(type, args...) \ 9 + Call(MakeEntity, Ref(Entity_##type), args, MAKE_ENTITY_END) 10 + 11 + #define GEN_FLOWER_SPAWN_REGION(args...) \ 12 + EVT_FLOWER_SPAWN_REGION(args) 13 + 14 + #endif
+46 -2
src/main/java/app/Environment.java
··· 4 4 import java.io.File; 5 5 import java.io.FileInputStream; 6 6 import java.io.IOException; 7 + import java.io.InputStreamReader; 8 + import java.net.HttpURLConnection; 9 + import java.net.URI; 7 10 import java.net.URISyntaxException; 11 + import java.net.URL; 8 12 import java.nio.ByteBuffer; 9 13 import java.security.CodeSource; 10 14 import java.util.ArrayList; ··· 24 28 import org.apache.commons.io.FileUtils; 25 29 import org.apache.commons.lang3.SystemUtils; 26 30 import org.yaml.snakeyaml.Yaml; 31 + 32 + import com.google.gson.JsonObject; 33 + import com.google.gson.JsonParser; 27 34 28 35 import app.Resource.ResourceType; 29 36 import app.config.Config; ··· 203 210 // UIManager.put("TabbedPane.tabSeparatorsFullHeight", true); 204 211 } 205 212 206 - SplashScreen.show("Loading Project"); 213 + if (fromJar && mainConfig.getBoolean(Options.CheckForUpdates)) 214 + checkForUpdate(); 215 + 216 + LoadingBar.show("Loading Project", true); 207 217 boolean validProject = loadProject(projDir); 208 218 if (!validProject) 209 219 exit(); ··· 212 222 StarRodMain.handleEarlyCrash(t); 213 223 } 214 224 finally { 215 - SplashScreen.dismiss(); 225 + LoadingBar.dismiss(); 216 226 } 217 227 218 228 initialized = true; ··· 248 258 public static File getProjectFile(String relativePath) 249 259 { 250 260 return new File(projectDirectory, relativePath); 261 + } 262 + 263 + public static void checkForUpdate() 264 + { 265 + try { 266 + URL url = new URI("https://api.github.com/repos/z64a/star-rod/releases/latest").toURL(); 267 + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 268 + connection.setRequestMethod("GET"); 269 + connection.setConnectTimeout(1000); 270 + connection.setReadTimeout(1000); 271 + 272 + int responseCode = connection.getResponseCode(); 273 + if (responseCode == HttpURLConnection.HTTP_OK) { 274 + InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream()); 275 + JsonObject jsonObject = JsonParser.parseReader(inputStreamReader).getAsJsonObject(); 276 + String latestVersion = jsonObject.get("tag_name").getAsString(); 277 + 278 + if (!latestVersion.equals("v" + versionString)) { 279 + Logger.log("Detected newer remote version: " + latestVersion); 280 + SwingUtils.showFramedMessageDialog(null, 281 + "A newer version is available!\n" + 282 + "Please visit the GitHub repo to download it.", 283 + "Update Available", 284 + JOptionPane.WARNING_MESSAGE); 285 + } 286 + } 287 + else { 288 + Logger.logError("Update check failed (response code: " + responseCode + ")"); 289 + } 290 + } 291 + catch (Exception e) { 292 + Logger.logError("IOException while checking for updates: " + e.getMessage()); 293 + Logger.printStackTrace(e); 294 + } 251 295 } 252 296 253 297 private static final void checkForDependencies() throws IOException
+76 -11
src/main/java/app/LoadingBar.java
··· 1 1 package app; 2 2 3 3 import java.awt.Dimension; 4 + import java.awt.Graphics2D; 5 + import java.awt.RenderingHints; 6 + import java.awt.image.BufferedImage; 7 + import java.io.IOException; 8 + import java.util.concurrent.ThreadLocalRandom; 4 9 10 + import javax.imageio.ImageIO; 5 11 import javax.swing.JFrame; 6 12 import javax.swing.JLabel; 7 13 import javax.swing.JProgressBar; 8 14 15 + import app.Resource.ResourceType; 9 16 import net.miginfocom.swing.MigLayout; 10 17 import util.Logger; 11 18 import util.Logger.Listener; 12 19 import util.Logger.Message; 13 20 import util.Priority; 21 + import util.ui.ImagePanel; 14 22 15 23 public class LoadingBar 16 24 { 17 25 public static void show(String title) 18 26 { 19 - show(title, Priority.STANDARD); 27 + show(title, Priority.STANDARD, false); 20 28 } 21 29 22 30 public static void show(String title, Priority priority) 23 31 { 32 + show(title, priority, false); 33 + } 34 + 35 + public static void show(String title, boolean useImage) 36 + { 37 + show(title, Priority.STANDARD, useImage); 38 + } 39 + 40 + public static void show(String title, Priority priority, boolean useImage) 41 + { 24 42 if (Environment.isCommandLine()) 25 43 return; 26 44 27 - if (instance != null) { 28 - instance.dispose(); 29 - instance = null; 45 + if (instance == null) { 46 + instance = new LoadingBarWindow(title, useImage); 47 + } 48 + else { 49 + instance.setTitle(title); 50 + instance.titleLabel.setText(title); 51 + Logger.removeListener(instance); 30 52 } 31 53 32 - if (instance == null) { 33 - instance = new LoadingBarWindow(title, priority); 34 - } 54 + Logger.addListener(instance, priority); 35 55 } 36 56 37 57 public static void dismiss() ··· 48 68 { 49 69 private final JProgressBar progressBar; 50 70 private final JLabel titleLabel; 71 + private final ImagePanel imagePanel; 51 72 52 - private LoadingBarWindow(String title, Priority priority) 73 + private LoadingBarWindow(String title, boolean useImage) 53 74 { 54 75 super(); 55 - setTitle(title); 76 + 77 + setTitle("Initializing"); 56 78 setIconImage(Environment.getDefaultIconImage()); 57 79 58 80 setMinimumSize(new Dimension(320, 64)); ··· 60 82 setUndecorated(true); 61 83 progressBar = new JProgressBar(); 62 84 85 + imagePanel = new ImagePanel(); 86 + if (useImage) { 87 + try { 88 + BufferedImage bimg = null; 89 + if (Environment.isDeluxe()) { 90 + bimg = ImageIO.read(Resource.getStream(ResourceType.Deluxe, "splash.jpg")); 91 + } 92 + else { 93 + String[] splashNames = Resource.getResourceNames(ResourceType.Splash); 94 + 95 + if (splashNames.length > 0) { 96 + int randomNum = ThreadLocalRandom.current().nextInt(0, splashNames.length); 97 + bimg = ImageIO.read(Resource.getStream(ResourceType.Splash, splashNames[randomNum])); 98 + } 99 + } 100 + 101 + if (bimg != null) { 102 + if (bimg.getHeight() > 512) // do not resize classic splash screen 103 + bimg = resizeImage(bimg, 512); 104 + imagePanel.setImage(bimg); 105 + imagePanel.setPreferredSize(new Dimension(bimg.getWidth(), bimg.getHeight())); 106 + } 107 + } 108 + catch (IOException e) { 109 + Logger.logWarning("Couldn't load splash screen: " + e.getMessage()); 110 + } 111 + } 112 + 63 113 progressBar.setIndeterminate(true); 64 114 progressBar.setStringPainted(true); 65 115 progressBar.setString("Loading..."); ··· 67 117 titleLabel = SwingUtils.getCenteredLabel(title, 14); 68 118 69 119 setLayout(new MigLayout("fill")); 120 + 121 + if (useImage && imagePanel.hasImage()) 122 + add(imagePanel, "grow, wrap"); 70 123 add(titleLabel, "grow, wrap"); 71 124 add(progressBar, "grow, pushy"); 72 125 pack(); 126 + setLocationRelativeTo(null); 73 127 setVisible(true); 74 - 75 - Logger.addListener(this, priority); 76 128 } 77 129 78 130 @Override ··· 87 139 { 88 140 progressBar.setString(msg.text); 89 141 } 142 + } 143 + 144 + private static BufferedImage resizeImage(BufferedImage src, int targetHeight) 145 + { 146 + float ratio = ((float) src.getHeight() / (float) src.getWidth()); 147 + int targetWidth = Math.round(targetHeight / ratio); 148 + 149 + BufferedImage bi = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB); 150 + Graphics2D g2d = bi.createGraphics(); 151 + g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 152 + g2d.drawImage(src, 0, 0, targetWidth, targetHeight, null); 153 + g2d.dispose(); 154 + return bi; 90 155 } 91 156 }
-138
src/main/java/app/SplashScreen.java
··· 1 - package app; 2 - 3 - import java.awt.Dimension; 4 - import java.awt.Graphics2D; 5 - import java.awt.RenderingHints; 6 - import java.awt.image.BufferedImage; 7 - import java.io.IOException; 8 - import java.util.concurrent.ThreadLocalRandom; 9 - 10 - import javax.imageio.ImageIO; 11 - import javax.swing.JFrame; 12 - import javax.swing.JLabel; 13 - import javax.swing.JProgressBar; 14 - 15 - import app.Resource.ResourceType; 16 - import net.miginfocom.swing.MigLayout; 17 - import util.Logger; 18 - import util.Logger.Listener; 19 - import util.Logger.Message; 20 - import util.ui.ImagePanel; 21 - 22 - public class SplashScreen 23 - { 24 - public static void show(String title) 25 - { 26 - if (Environment.isCommandLine()) 27 - return; 28 - 29 - if (instance != null) { 30 - instance.dispose(); 31 - instance = null; 32 - } 33 - 34 - if (instance == null) { 35 - instance = new LoadingBarWindow(title); 36 - } 37 - } 38 - 39 - public static void dismiss() 40 - { 41 - if (instance != null) { 42 - instance.dispose(); 43 - instance = null; 44 - } 45 - } 46 - 47 - private static LoadingBarWindow instance; 48 - 49 - private static class LoadingBarWindow extends JFrame implements Listener 50 - { 51 - private final JProgressBar progressBar; 52 - private final JLabel titleLabel; 53 - private final ImagePanel imagePanel; 54 - 55 - private LoadingBarWindow(String title) 56 - { 57 - super(); 58 - 59 - setTitle("Initializing"); 60 - setIconImage(Environment.getDefaultIconImage()); 61 - 62 - setMinimumSize(new Dimension(320, 64)); 63 - setLocationRelativeTo(null); 64 - setUndecorated(true); 65 - progressBar = new JProgressBar(); 66 - 67 - imagePanel = new ImagePanel(); 68 - try { 69 - BufferedImage bimg = null; 70 - if (Environment.isDeluxe()) { 71 - bimg = ImageIO.read(Resource.getStream(ResourceType.Deluxe, "splash.jpg")); 72 - } 73 - else { 74 - String[] splashNames = Resource.getResourceNames(ResourceType.Splash); 75 - 76 - if (splashNames.length > 0) { 77 - int randomNum = ThreadLocalRandom.current().nextInt(0, splashNames.length); 78 - bimg = ImageIO.read(Resource.getStream(ResourceType.Splash, splashNames[randomNum])); 79 - } 80 - } 81 - 82 - if (bimg != null) { 83 - if (bimg.getHeight() > 512) // do not resize classic splash screen 84 - bimg = resizeImage(bimg, 512); 85 - imagePanel.setImage(bimg); 86 - imagePanel.setPreferredSize(new Dimension(bimg.getWidth(), bimg.getHeight())); 87 - } 88 - } 89 - catch (IOException e) { 90 - Logger.logWarning("Couldn't load splash screen: " + e.getMessage()); 91 - } 92 - 93 - progressBar.setIndeterminate(true); 94 - progressBar.setStringPainted(true); 95 - progressBar.setString("Loading..."); 96 - 97 - titleLabel = SwingUtils.getCenteredLabel(title, 14); 98 - 99 - setLayout(new MigLayout("fill")); 100 - 101 - if (imagePanel.hasImage()) 102 - add(imagePanel, "grow, wrap"); 103 - add(titleLabel, "grow, wrap"); 104 - add(progressBar, "grow, pushy"); 105 - pack(); 106 - setLocationRelativeTo(null); 107 - setVisible(true); 108 - 109 - Logger.addListener(this); 110 - } 111 - 112 - @Override 113 - public void dispose() 114 - { 115 - super.dispose(); 116 - Logger.removeListener(this); 117 - } 118 - 119 - @Override 120 - public void post(Message msg) 121 - { 122 - progressBar.setString(msg.text); 123 - } 124 - } 125 - 126 - private static BufferedImage resizeImage(BufferedImage src, int targetHeight) 127 - { 128 - float ratio = ((float) src.getHeight() / (float) src.getWidth()); 129 - int targetWidth = Math.round(targetHeight / ratio); 130 - 131 - BufferedImage bi = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB); 132 - Graphics2D g2d = bi.createGraphics(); 133 - g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 134 - g2d.drawImage(src, 0, 0, targetWidth, targetHeight, null); 135 - g2d.dispose(); 136 - return bi; 137 - } 138 - }
+1 -2
src/main/java/app/config/Options.java
··· 23 23 LogDetails (true, Scope.Main, Type.Boolean, "LogDetails", "false"), 24 24 Theme (true, Scope.Main, Type.String, "Theme", "FlatLight"), 25 25 ExitToMenu (true, Scope.Main, Type.Boolean, "ExitToMenu", "true"), 26 + CheckForUpdates (true, Scope.Main, Type.Boolean, "CheckForUpdates", "true"), 26 27 27 - FixupTextureNames (true, Scope.Project, Type.Boolean, "FixupTextureNames", "true"), 28 - WriteLegacyTexNames (true, Scope.Project, Type.Boolean, "WriteLegacyTexNames", "true"), 29 28 ExtractedMapData (true, Scope.Project, Type.Boolean, "ExtractedMapData", "false"), 30 29 31 30 // options for dumping assets
+2 -2
src/main/java/assets/AssetExtractor.java
··· 101 101 Logger.log("Generating map source: " + template.name); 102 102 Map map = generateMap(template); 103 103 try { 104 - map.saveMapAs(new File(subdir, map.getName() + Directories.EXT_MAP)); 104 + map.saveMapWithoutHeader(new File(subdir, map.getName() + Directories.EXT_MAP)); 105 105 } 106 106 catch (Exception e) { 107 107 StarRodMain.displayStackTrace(e); ··· 124 124 } 125 125 126 126 try { 127 - map.saveMapAs(new File(subdir, map.getName() + Directories.EXT_MAP)); 127 + map.saveMapWithoutHeader(new File(subdir, map.getName() + Directories.EXT_MAP)); 128 128 } 129 129 catch (Exception e) { 130 130 StarRodMain.displayStackTrace(e);
+16 -7
src/main/java/game/map/Map.java
··· 833 833 return name; 834 834 } 835 835 836 + public void saveMapWithoutHeader(File file) throws Exception 837 + { 838 + this.editorData = null; 839 + saveMapAs_impl(file, false); 840 + } 841 + 836 842 public void saveMap() throws Exception 837 843 { 838 844 this.editorData = null; 839 - saveMapAs_impl(AssetManager.getSaveMapFile(name)); 845 + saveMapAs_impl(AssetManager.getSaveMapFile(name), true); 840 846 } 841 847 842 848 public void saveMap(MapEditorMetadata editorData) throws Exception 843 849 { 844 850 this.editorData = editorData; 845 - saveMapAs_impl(AssetManager.getSaveMapFile(name)); 851 + saveMapAs_impl(AssetManager.getSaveMapFile(name), true); 846 852 } 847 853 848 854 public void saveMapAs(File file) throws Exception 849 855 { 850 856 this.editorData = null; 851 - saveMapAs_impl(file); 857 + saveMapAs_impl(file, true); 852 858 } 853 859 854 860 public void saveMapAs(File file, MapEditorMetadata editorData) throws Exception 855 861 { 856 862 this.editorData = editorData; 857 - saveMapAs_impl(file); 863 + saveMapAs_impl(file, true); 858 864 } 859 865 860 - private void saveMapAs_impl(File file) throws Exception 866 + private void saveMapAs_impl(File file, boolean generateHeader) throws Exception 861 867 { 862 868 FileUtils.touch(file); 863 869 File tempFile = new File(file.getAbsolutePath() + ".temp"); ··· 885 891 lastModified = file.lastModified(); 886 892 modified = false; 887 893 888 - tryInjectHeader(); 889 - writeHeader(); 894 + if (generateHeader) { 895 + tryInjectHeader(); 896 + writeHeader(); 897 + } 890 898 } 891 899 892 900 /** ··· 1596 1604 private void writeHeader() throws IOException 1597 1605 { 1598 1606 File genHeader = new File(projDir, "generated.h"); 1607 + FileUtils.touch(genHeader); 1599 1608 1600 1609 try (PrintWriter pw = IOUtils.getBufferedPrintWriter(genHeader)) { 1601 1610 pw.println("/* auto-generated, do not edit */");
+1 -10
src/main/java/game/map/compiler/GeometryCompiler.java
··· 15 15 import org.apache.commons.io.FileUtils; 16 16 17 17 import app.Directories; 18 - import app.Environment; 19 - import app.config.Options; 20 18 import app.input.IOUtils; 21 19 import assets.AssetManager; 22 20 import game.map.BoundingBox; ··· 96 94 if (!textureNameMap.containsKey(m.textureName) && !m.textureName.isEmpty()) { 97 95 textureNameMap.put(m.textureName, (int) raf.getFilePointer()); 98 96 99 - String textureName = m.textureName; 100 - if (Environment.projectConfig.getBoolean(Options.WriteLegacyTexNames)) { 101 - if (!textureName.endsWith("tif")) { 102 - textureName = map.texName.substring(0, 4) + textureName + "tif"; 103 - } 104 - } 105 - 106 - raf.write(textureName.getBytes()); 97 + raf.write(m.textureName.getBytes()); 107 98 raf.write((byte) 0); 108 99 raf.seek(((int) raf.getFilePointer() + 3) & 0xFFFFFFFC); 109 100 }
-8
src/main/java/game/map/mesh/TexturedMesh.java
··· 15 15 import org.w3c.dom.Node; 16 16 import org.w3c.dom.NodeList; 17 17 18 - import app.Environment; 19 - import app.config.Options; 20 18 import game.map.editor.MapEditor.EditorMode; 21 19 import game.map.editor.render.RenderingOptions; 22 20 import game.map.editor.render.TextureManager; ··· 61 59 62 60 xmr.hasAttribute(meshElem, ATTR_TEXTURE_NAME); 63 61 textureName = xmr.getAttribute(meshElem, ATTR_TEXTURE_NAME); 64 - 65 - if (Environment.projectConfig.getBoolean(Options.FixupTextureNames)) { 66 - if (textureName.matches("\\w{3}_\\w*tif")) { 67 - textureName = textureName.substring(4, textureName.length() - 3); 68 - } 69 - } 70 62 71 63 Element displayListElement = xmr.getUniqueRequiredTag(meshElem, TAG_DISPLAY_LIST); 72 64 NodeList children = displayListElement.getChildNodes();