001package com.fs.starfarer.api.impl.campaign.eventide; 002 003import java.io.IOException; 004import java.util.LinkedHashMap; 005import java.util.Map; 006 007import com.fs.starfarer.api.Global; 008 009public class Actions { 010 011 //public static String TEX = "/photoshop stuff/starfarer/out/pop_anim.png"; 012 public static String TEX = "graphics/misc/characterSheet00.png"; 013 014 public static String SOUND_CLOTH = "soe_cloth"; 015 public static String SOUND_FALL = "soe_fall"; 016 public static String SOUND_RIP = "soe_rip"; 017 public static String SOUND_CLASH = "soe_clash"; 018 public static String SOUND_STEP = "soe_step"; 019 public static String SOUND_SWISH = "soe_swish"; 020 021 public static final String IDLE = "IDLE"; 022 public static final String IDLE_HIGH = "IDLE_HIGH"; 023 public static final String BLOCK = "BLOCK"; 024 public static final String ATTACK = "ATTACK"; 025 public static final String RIPOSTE = "RIPOSTE"; 026 public static final String BLOCK_LOW = "BLOCK_LOW"; 027 public static final String ATTACK_HIGH = "ATTACK_HIGH"; 028 public static final String RIPOSTE_HIGH = "RIPOSTE_HIGH"; 029 public static final String ATTACK_RECOVERY = "ATTACK_RECOVERY"; 030 public static final String ATTACK_HIGH_RECOVERY = "ATTACK_HIGH_RECOVERY"; 031 public static final String MOVE_BACK = "MOVE_BACK"; 032 public static final String MOVE_BACK_HIGH = "MOVE_BACK_HIGH"; 033 public static final String MOVE_FORWARD = "MOVE_FORWARD"; 034 public static final String MOVE_FORWARD_HIGH = "MOVE_FORWARD_HIGH"; 035 public static final String GOT_HIT = "GOT_HIT"; 036 public static final String FALL = "FALL"; 037 038 039 public static Map<String, CharAnim> ANIMATIONS = new LinkedHashMap<String, CharAnim>(); 040 041 042 public static void initActions() { 043 try { 044 045// SOUND_CLOTH = ""; 046// SOUND_STEP = ""; 047// SOUND_CLOTH = "soe_cloth"; 048// SOUND_STEP = "soe_step"; 049// SOUND_STEP = "mine_ping"; 050// SOUND_CLOTH = ""; 051// Global.getSettings().profilerSetEnabled(true); 052// Global.getSettings().profilerReset(); 053// 054// for (int i = 0; i < 1; i++) { 055// Global.getSettings().profilerBegin("loading sheet"); 056 Global.getSettings().unloadTexture(TEX); 057 Global.getSettings().forceMipmapsFor(TEX, true); 058 Global.getSettings().loadTexture(TEX); 059// Global.getSettings().profilerEnd(); 060 //Global.getSettings().loadTextureConvertBlackToAlpha(TEX); 061 062// Global.getSettings().profilerBegin("loading sprites"); 063// File down = new File("/Users/Alex/Downloads/Tiles"); 064// for (File curr : down.listFiles()) { 065// if (curr.isFile() && curr.getName().endsWith("png")) { 066// String path = curr.getAbsolutePath(); 067// Global.getSettings().unloadTexture(path); 068// Global.getSettings().loadTexture(path); 069// } 070// } 071// Global.getSettings().profilerEnd(); 072// } 073// Global.getSettings().profilerPrintResultsTree(); 074// Global.getSettings().profilerRestore(); 075// Global.getSettings().profilerSetEnabled(false); 076 077 078 } catch (IOException e) { 079 throw new RuntimeException("Error loading texture", e); 080 } 081 082 //float sheetHeight = 2048; 083 float sheetHeight = 1536; 084 085 float frameHeight = 207f; //202.5f; 086 float frameDur = 1f / 7f; 087 frameDur = 1f / 10f; 088 //float scale = 3f; 089 float scale = 1f; 090 //scale = 0.75f; 091 //scale = 0.5f; 092 // frameDur *= 3f; 093 float textureScale = 1f; 094 CharAnim curr; 095 096 float bodyW = 38; 097 098 float y; 099 100 //frameDur *= 3f; 101 //y = 752; 102 y = sheetHeight - frameHeight; 103 curr = new CharAnim(TEX, IDLE, frameHeight); 104 curr.interruptableBy(MOVE_BACK, MOVE_FORWARD, 105 ATTACK, RIPOSTE, BLOCK, ATTACK_HIGH, RIPOSTE_HIGH, BLOCK_LOW, GOT_HIT, FALL); 106 curr.scale = scale; 107 curr.skip(2); 108 curr.addFrame(y, 168, frameDur * 2f); 109 curr.last.setHittable(-60, bodyW); 110 curr.addFrame(y, 167, frameDur * 2f); 111 curr.last.setHittable(-60, bodyW); 112 curr.addFrame(y, 166, frameDur * 2f); 113 curr.last.setHittable(-60, bodyW); 114 curr.skip(-166f + -167); // this goes back! 115 curr.addFrame(y, 166, frameDur * 2f); 116 curr.last.setHittable(-60, bodyW); 117 addAnim(curr, textureScale); 118 119 120 //frameDur *= 3f; 121 y = sheetHeight - frameHeight; 122 curr = new CharAnim(TEX, IDLE_HIGH, frameHeight); 123 curr.interruptableBy(MOVE_BACK, MOVE_FORWARD, 124 ATTACK, RIPOSTE, BLOCK, ATTACK_HIGH, RIPOSTE_HIGH, BLOCK_LOW, GOT_HIT, FALL); 125 curr.scale = scale; 126 curr.skip(505); 127 curr.addFrame(y, 170, frameDur * 2f); 128 curr.last.setHittable(-60, bodyW); 129 curr.addFrame(y, 171, frameDur * 2f); 130 curr.last.setHittable(-60, bodyW); 131 curr.addFrame(y, 169, frameDur * 2f); 132 curr.last.setHittable(-60, bodyW); 133 curr.skip(-171 -169); // * 2f);// - 1f); 134 curr.addFrame(y, 171, frameDur * 2f); 135 curr.last.setHittable(-60, bodyW); 136 addAnim(curr, textureScale); 137 138 139 //frameDur *= 3f; 140 y = 296; 141 y = sheetHeight - frameHeight; 142 curr = new CharAnim(TEX, GOT_HIT, frameHeight); 143 curr.interruptableBy(FALL); 144 curr.scale = scale; 145 curr.initialRelativeOffset = 0f; 146 curr.skip(1015); 147 // moveback ~54 total 148 curr.addFrame(y, 148, frameDur * 2f); 149 curr.last.setHittable(-50, bodyW); 150 curr.last.soundIds.add(SOUND_RIP); 151 //curr.last.move.x -= 14f; 152 curr.addFrame(y, 144, frameDur * 1f); 153 curr.last.setHittable(-40, bodyW); 154 //curr.last.move.x -= 28f; 155 curr.last.move.x -= 15f; 156 curr.last.soundIds.add(SOUND_CLOTH); 157 curr.addFrame(y, 159, frameDur * 1f); 158 curr.last.setHittable(-30 - 14f, bodyW); 159 curr.last.move.x += 14f; 160 curr.moveToIdle.x -= 10f; 161 addAnim(curr, textureScale); 162 //frameDur /= 3f; 163 164 165 //y = 752; 166 //frameDur *= 3; 167 y = sheetHeight - frameHeight * 2f; 168 curr = new CharAnim(TEX, MOVE_FORWARD, frameHeight); 169 curr.interruptableBy(ATTACK, RIPOSTE, BLOCK, ATTACK_HIGH, RIPOSTE_HIGH, BLOCK_LOW, GOT_HIT, FALL); 170 curr.scale = scale; 171 // total move should be >= 21 (which is MOVE_BACK's dist) 172 curr.addFrame(y, 166, frameDur); 173 curr.last.setHittable(-60, bodyW); 174 curr.last.move.x += 5f; 175 curr.last.soundIds.add(SOUND_CLOTH); 176 curr.addFrame(y, 167, frameDur); 177 curr.last.setHittable(-54, bodyW); 178 curr.last.move.x += 7f; 179 curr.last.soundIds.add(SOUND_STEP); 180 curr.addFrame(y, 164, frameDur); 181 curr.last.move.x += 8f; 182 curr.last.setHittable(-60, bodyW); 183 curr.moveToIdle.x += 3f; 184 addAnim(curr, textureScale); 185 186 y = sheetHeight - frameHeight * 7f; 187 curr = new CharAnim(TEX, MOVE_FORWARD_HIGH, frameHeight); 188 curr.interruptableBy(ATTACK, RIPOSTE, BLOCK, ATTACK_HIGH, RIPOSTE_HIGH, BLOCK_LOW, GOT_HIT, FALL); 189 curr.scale = scale; 190 191 curr.addFrame(y, 175, frameDur); 192 curr.last.setHittable(-60, bodyW); 193 curr.last.move.x += 5f; 194 curr.last.soundIds.add(SOUND_CLOTH); 195 curr.addFrame(y, 171, frameDur); 196 curr.last.setHittable(-54, bodyW); 197 curr.last.move.x += 7f; 198 curr.last.soundIds.add(SOUND_STEP); 199 curr.addFrame(y, 165, frameDur); 200 curr.last.move.x += 8f; 201 202 curr.last.setHittable(-60, bodyW); 203 curr.moveToIdle.x += 3f; 204 addAnim(curr, textureScale); 205 206 207 //frameDur *= 3; 208 y = sheetHeight - frameHeight * 2f; 209 curr = new CharAnim(TEX, MOVE_BACK, frameHeight); 210 curr.interruptableBy(ATTACK, RIPOSTE, BLOCK, ATTACK_HIGH, RIPOSTE_HIGH, BLOCK_LOW, GOT_HIT, FALL); 211 curr.scale = scale; 212 curr.skip(507); 213 curr.addFrame(y, 181, frameDur); 214 curr.last.setHittable(-60, bodyW); 215 curr.last.move.x -= 11f; 216 curr.last.soundIds.add(SOUND_CLOTH); 217 curr.addFrame(y, 177, frameDur); 218 curr.last.setHittable(-60, bodyW); 219 curr.last.move.x -= 4f; 220 curr.last.soundIds.add(SOUND_STEP); 221 curr.addFrame(y, 172, frameDur); 222 curr.last.move.x -= 3f; 223 curr.last.setHittable(-60, bodyW); 224 curr.moveToIdle.x -= 1f; 225 226// curr.skip(30); 227// curr.addFrame(y, 38, frameDur); 228// curr.last.setHittable(-12, 12); 229// curr.last.move.x -= 5f; 230// curr.skip(-(30 + 38)); 231// curr.addFrame(y, 30, frameDur); 232// curr.last.setHittable(-12, 12); 233 addAnim(curr, textureScale); 234 235 236 237 // move back ~- 21 total 238 y = sheetHeight - frameHeight * 7f; 239 curr = new CharAnim(TEX, MOVE_BACK_HIGH, frameHeight); 240 curr.interruptableBy(ATTACK, RIPOSTE, BLOCK, ATTACK_HIGH, RIPOSTE_HIGH, BLOCK_LOW, GOT_HIT, FALL); 241 curr.scale = scale; 242 curr.skip(513); 243 244 curr.addFrame(y, 184, frameDur); 245 curr.last.setHittable(-60, bodyW); 246 curr.last.move.x -= 11f; 247 curr.last.soundIds.add(SOUND_CLOTH); 248 curr.addFrame(y, 179, frameDur); 249 curr.last.setHittable(-60, bodyW); 250 curr.last.move.x -= 4f; 251 curr.last.soundIds.add(SOUND_STEP); 252 curr.addFrame(y, 171, frameDur); 253 curr.last.move.x -= 3f; 254 curr.last.setHittable(-60, bodyW); 255 curr.moveToIdle.x -= 1f; 256 257 addAnim(curr, textureScale); 258 259 260 261 // Block high 262 //y = 752; 263 //frameDur *= 5f; 264 y = sheetHeight - frameHeight * 6f; 265 curr = new CharAnim(TEX, BLOCK, frameHeight); 266 curr.interruptableBy(GOT_HIT, FALL); 267 curr.scale = scale; 268 269 // need +26 movement 270 //frameDur *= 3f; 271 curr.addFrame(y, 165 , frameDur);// 40f/60f 272 curr.last.setHittable(-50, bodyW); 273 curr.last.setBlock(-30, 50); 274 curr.last.move.x -= 10f; 275 curr.last.soundIds.add(SOUND_CLOTH); 276 277 curr.addFrame(y, 165, frameDur); // * 80f/60f 278 curr.last.setHittable(-50, bodyW); 279 curr.last.setBlock(-30, 50); 280 curr.last.move.x -= 2f; 281 282 283 curr.addFrame(y, 165, frameDur); // * 70f/60f 284 curr.last.setHittable(-50, bodyW); 285 curr.last.setBlock(-30, 50); 286 curr.last.move.x += 5f; 287 288 curr.addFrame(y, 165, frameDur); // * 50f/60f 289 curr.last.setHittable(-50, bodyW); 290 //curr.last.setBlock(-30, 70); 291 curr.last.move.x += 12f; 292 293 curr.moveToIdle.x += 15f; 294 addAnim(curr, textureScale); 295 296 297 // Block mid 298 // total movement: +24px 299 y = 709; 300 y = sheetHeight - frameHeight * 6f; 301 //frameDur *= 5f; 302 curr = new CharAnim(TEX, BLOCK_LOW, frameHeight); 303 curr.interruptableBy(GOT_HIT, FALL); 304 curr.scale = scale; 305 curr.skip(165*4); 306 307 curr.addFrame(y, 165, frameDur); // 40f/60f); 308 curr.last.setHittable(-50, bodyW); 309 curr.last.setBlock(-30, 50); 310 curr.last.move.x -= 4f; 311 curr.last.soundIds.add(SOUND_CLOTH); 312 //curr.last.move.x -= 5f; 313 314 curr.addFrame(y, 165, frameDur); // 50f/60f); 315 curr.last.setHittable(-55, bodyW); 316 curr.last.setBlock(-30, 50); 317 curr.last.move.x += 4f; 318 319 curr.addFrame(y, 165, frameDur); // 100f/60f); 320 curr.last.setHittable(-60, bodyW); 321 curr.last.setBlock(-30, 50); 322 curr.last.move.x += 7f; 323 //curr.last.move.x -= 1f; 324 325 curr.addFrame(y, 165, frameDur); // 50f/60f); 326 curr.last.setHittable(-55, bodyW); 327 //curr.last.setBlock(-30, 90); 328 curr.last.move.x += 5f; 329 curr.moveToIdle.x += 12f; 330 addAnim(curr, textureScale); 331 332 333 y = 804; 334 y = sheetHeight - frameHeight * 3f; 335 //frameDur *= 5f; 336 // Total movement: 0px. 337 curr = new CharAnim(TEX, ATTACK, frameHeight); 338 curr.interruptableBy(GOT_HIT, FALL); 339 curr.scale = scale; 340 341 curr.addFrame(y, 118, frameDur); 342 curr.last.setHittable(-40, bodyW); 343 curr.last.move.x -= 20f; 344 curr.last.soundIds.add(SOUND_CLOTH); 345 346 curr.addFrame(y, 95, frameDur); 347 curr.last.setHittable(-25, bodyW); 348 curr.last.move.x -= 20f; 349 350 curr.addFrame(y, 98, frameDur); 351 curr.last.setHittable(-25, bodyW); 352 curr.last.move.x += 10f; 353 354 curr.addFrame(y, 113, frameDur); 355 curr.last.setHittable(-30, bodyW); 356 curr.last.move.x += 4f; 357 curr.last.soundIds.add(SOUND_SWISH); 358 curr.last.soundIds.add(SOUND_CLOTH); 359 360 curr.addFrame(y, 176, frameDur); 361 curr.last.setHittable(-40, bodyW); 362 //curr.last.setAttack(8, 15); 363 curr.last.move.x += 33f; 364 365 curr.addFrame(y, 237, frameDur * 2f); 366 curr.last.setHittable(-45, bodyW); 367 //curr.last.setAttack(18, 15); 368 curr.last.setAttack(35, 83); 369 curr.last.move.x += 40f; 370 curr.last.soundIds.add(SOUND_STEP); 371 372 curr.addFrame(y, 200, frameDur); 373 curr.last.setHittable(-30, bodyW); 374 curr.last.move.x -= 25f; 375 curr.last.soundIds.add(SOUND_CLOTH); 376 377 curr.addFrame(y, 170, frameDur); 378 curr.last.setHittable(-35, bodyW); 379 curr.last.move.x -= 15f; 380 381 curr.moveToIdle.x -= 7f; 382 addAnim(curr, textureScale); 383 384 y = 804; 385 y = sheetHeight - frameHeight * 4f; 386 387 //frameDur *= 5f; 388 389 curr = new CharAnim(TEX, ATTACK_HIGH, frameHeight); 390 curr.interruptableBy(GOT_HIT, FALL); 391 curr.scale = scale; 392 //curr.skip(2); 393 //frameDur *= 3f; 394 curr.addFrame(y, 124, frameDur); 395 curr.last.setHittable(-40, bodyW); 396 curr.last.move.x -= 20f; 397 curr.last.soundIds.add(SOUND_CLOTH); 398 399 curr.addFrame(y, 98, frameDur); 400 curr.last.setHittable(-25, bodyW); 401 curr.last.move.x -= 20f; 402 403 curr.addFrame(y, 98, frameDur); 404 curr.last.setHittable(-25, bodyW); 405 curr.last.move.x += 10f; 406 407 curr.addFrame(y, 121, frameDur); 408 curr.last.setHittable(-30, bodyW); 409 curr.last.move.x += 4f; 410 curr.last.soundIds.add(SOUND_SWISH); 411 curr.last.soundIds.add(SOUND_CLOTH); 412 413 curr.addFrame(y, 161, frameDur); 414 curr.last.setHittable(-40, bodyW); 415 curr.last.move.x += 33f; 416 417 curr.addFrame(y, 238, frameDur * 2f); 418 curr.last.setHittable(-45, bodyW); 419 //curr.last.setAttack(18, 15); 420 curr.last.setAttack(35, 83); 421 curr.last.move.x += 40f; 422 curr.last.soundIds.add(SOUND_STEP); 423 424 curr.addFrame(y, 210, frameDur); 425 curr.last.setHittable(-30, bodyW); 426 curr.last.move.x -= 25f; 427 curr.last.soundIds.add(SOUND_CLOTH); 428 429 curr.addFrame(y, 172, frameDur); 430 curr.last.setHittable(-35, bodyW); 431 curr.last.move.x -= 15f; 432 curr.moveToIdle.x -= 7f; 433 addAnim(curr, textureScale); 434 435 436 curr = ANIMATIONS.get(ATTACK).clone(); 437 curr.action = RIPOSTE; 438 curr.removeFirstFrame(); 439 curr.removeFirstFrame(); 440 curr.frames.get(0).move.x -= 28; 441 curr.frames.get(curr.frames.size() - 1).move.x += 5; 442 addAnim(curr, textureScale); 443 444 curr = ANIMATIONS.get(ATTACK_HIGH).clone(); 445 curr.action = RIPOSTE_HIGH; 446 curr.removeFirstFrame(); 447 curr.removeFirstFrame(); 448 //curr.frames.get(0).move.x -= 40; 449 addAnim(curr, textureScale); 450 451 // will need to be adjusted per frame; this is just for testing, split evenly between 452 // the last 2 frames of recovery -am 453 float recoveryMoveBack = 62f; 454 // ah, right! attack recovery *needs* to be this much to counter the back movement of the last part of 455 // the attack that got interrupted by the recovery 456 //recoveryMoveBack = 30f; 457 recoveryMoveBack = 23; 458 459 // Attack recovery ... high? 460 y = 752; 461 y = sheetHeight - frameHeight * 5f; 462 //frameDur *= 5f; 463 curr = new CharAnim(TEX, ATTACK_HIGH_RECOVERY, frameHeight); 464 curr.interruptableBy(GOT_HIT, FALL); 465 curr.scale = scale; 466 467 curr.addFrame(y, 192, frameDur); 468 curr.last.setHittable(-45, bodyW); 469 curr.last.move.x += 8f; 470 curr.last.soundIds.add(SOUND_CLASH); 471 472 curr.addFrame(y, 192, frameDur); // +16 473 curr.last.setHittable(-45, bodyW); 474 curr.last.move.x += -22f;// +8f; 475 curr.last.soundIds.add(SOUND_CLOTH); 476 477 curr.addFrame(y, 168, frameDur); // +8 478 curr.last.setHittable(-35, bodyW); 479 curr.last.move.x += -14f;// +4f; 480 curr.last.soundIds.add(SOUND_STEP); 481 482 curr.moveToIdle.x += -6f; 483 addAnim(curr, textureScale); 484 485 486 // Attack recovery mid? 487 // total movement: -16 488 489 y = 752; 490 //y = sheetHeight - frameHeight * 7f; 491 y = sheetHeight - frameHeight * 2f; 492 //frameDur *= 5f; 493 curr = new CharAnim(TEX, ATTACK_RECOVERY, frameHeight); 494 curr.interruptableBy(GOT_HIT, FALL); 495 curr.scale = scale; 496 497 curr.skip(1038); 498 curr.addFrame(y, 190, frameDur); 499 curr.last.setHittable(-45, bodyW); 500 curr.last.move.x += 8f; 501 curr.last.soundIds.add(SOUND_CLASH); 502 503 curr.addFrame(y, 176, frameDur); 504 curr.last.setHittable(-35, bodyW); 505 curr.last.move.x += -22f; 506 curr.last.soundIds.add(SOUND_CLOTH); 507 508 y = sheetHeight - frameHeight * 3f; 509 curr.widthSoFar = 1210; 510 curr.addFrame(y, 168, frameDur); 511 curr.last.setHittable(-11, bodyW); 512 curr.last.move.x += -14f; 513 curr.last.soundIds.add(SOUND_STEP); 514 515 curr.moveToIdle.x += -6f; 516 517 518 addAnim(curr, textureScale); 519 520 521 //frameDur *= 5f; 522 y = 296; 523 y = sheetHeight - frameHeight * 5f; 524 //frameDur *= 5f; 525 curr = new CharAnim(TEX, FALL, frameHeight); 526 //curr.interruptableBy(GOT_HIT, FALL); 527 curr.scale = scale; 528 curr.skip(574); 529 //curr.skip(172); 530 curr.addFrame(y, 158, frameDur * 1f); 531 curr.last.setHittable(-40, bodyW); 532 curr.last.move.x -= 0f; 533 curr.last.soundIds.add(SOUND_RIP); 534 curr.addFrame(y, 144, frameDur * 1f); 535 curr.last.setHittable(-40, bodyW); 536 curr.last.move.x -= 45f; 537 curr.last.soundIds.add(SOUND_CLOTH); 538 curr.addFrame(y, 128, frameDur * 1f); 539 curr.last.setHittable(-40, bodyW); 540 curr.last.move.x -= 19f; 541 curr.addFrame(y, 137, frameDur * 1f); 542 curr.last.setHittable(-40, bodyW); 543 curr.last.move.x -= 40f; 544 curr.addFrame(y, 175, frameDur * 1f); 545 curr.last.setHittable(-40, bodyW); 546 curr.last.move.x -= 12f; 547 curr.last.soundIds.add(SOUND_FALL); 548 curr.addFrame(y, 174, frameDur * 1f); 549 curr.last.setHittable(-40, bodyW); 550 curr.last.move.x += 8f; 551 552 curr.widthSoFar = 1049; 553 554 y = sheetHeight - frameHeight * 7f; 555 curr.addFrame(y, 178, 100000f); 556 //curr.last.setHittable(-40, bodyW); non-hittable - no shadow, but otherwise you could still, ah, hit them 557 curr.last.move.x += 2f; 558 curr.last.move.y += 1f; 559 560// curr.addFrame(y, 34, 100000f); 561 //curr.last.move.x -= 8f; 562 curr.moveToIdle.x += 10f; 563 addAnim(curr, textureScale); 564 } 565 566 public static void addAnim(CharAnim anim, float textureScale) { 567 anim.updateTextureScale(textureScale); 568 ANIMATIONS.put(anim.action, anim); 569 } 570} 571