/* * Copyright (c) 2003-onwards Shaven Puppy Ltd * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of 'Shaven Puppy' nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package worm; import java.util.ArrayList; import net.puppygames.applet.effects.EmitterFeature; import net.puppygames.applet.screens.DialogScreen; import org.lwjgl.util.Color; import org.lwjgl.util.ReadableColor; import worm.features.GidrahFeature; import worm.features.LayersFeature; import worm.features.TileSetFeature; import worm.generator.MapTemplate; import worm.tiles.FloorTile; import worm.tiles.SpawnPoint; import com.shavenpuppy.jglib.Resources; import com.shavenpuppy.jglib.interpolators.LinearInterpolator; import com.shavenpuppy.jglib.openal.ALBuffer; import com.shavenpuppy.jglib.openal.ALStream; import com.shavenpuppy.jglib.opengl.GLBaseTexture; import com.shavenpuppy.jglib.resources.Background; import com.shavenpuppy.jglib.resources.ResourceArray; import com.shavenpuppy.jglib.sprites.Animation; import com.shavenpuppy.jglib.sprites.SpriteImage; /** * $Id: Res.java,v 1.66 2010/10/16 02:17:16 foo Exp $ * * @author $Author: foo $ * @version $Revision: 1.66 $ */ public class Res extends net.puppygames.applet.Res { private static final long serialVersionUID = 1L; private static Res instance; /* * Resource data */ public static final ReadableColor GREEN = new Color(125, 255, 0); private String repairEmitter="repair.emitter", repairAllEmitter="repairall.emitter", buildingDamageEmitter = "buildingdamage.emitter", iceShardsSmallEmitter = "iceshards.small.emitter", iceShardsAngryEmitter = "iceshards.angry.emitter", iceShardsBossEmitter = "iceshards.boss.emitter", gidrahPain = "gidrahpain.emitter", deflectEmitter = "deflect.emitter", buildingSmokeEmitter = "fire.smoke.emitter", buildingFlamesEmitter = "ruins.medium.fire.emitter" ; private String range = "range.texture", solid = "solid.texture", dash = "dash.texture", beam = "beam.texture", laserTexture = "laser.texture" ; private String reload = "reload.array", ammo = "ammo.array", reloadLarge = "reload.large.array", ammoLarge = "ammo.large.array", energyAmmo = "energy.array", money = "money.array", bossHitPoints = "bossHitPoints.array" ; private String reloadIndicator = "reload.indicator.animation", reloadLargeIndicator = "reload.large.indicator.animation", iceAnimation = "ice.small.animation", mousePointer = "mousepointer.default.layers", mousePointerOutOfRange = "mousepointer.outofrange.layers", mousePointerCantBuild = "mousepointer.cantbuild.layers", mousePointerOnTarget = "mousepointer.ontarget.layers", mousePointerOffTarget = "mousepointer.offtarget.layers", mousePointerPickup = "mousepointer.pickup.layers", mousePointerReload = "mousepointer.reload.layers", mousePointerBezerkOnTarget = "mousepointer.bezerk.ontarget.layers", mousePointerBezerkOffTarget = "mousepointer.bezerk.offtarget.layers", mousePointerBezerkOutOfRange = "mousepointer.bezerk.outofrange.layers", mousePointerSmartbomb = "mousepointer.smartbomb.layers", mousePointerBlastmine = "mousepointer.blastmine.layers", mousePointerSellOff = "mousepointer.sell.off.layers", mousePointerSellOn = "mousepointer.sell.on.layers", mousePointerGrabOn = "mousepointer.grab.on.layers", buildIndicator = "spriteimage.buildindicator", beamStart = "spriteimage.proximity.start.01", beamEnd = "spriteimage.proximity.end.01" ; private String saucerSound = "saucer.buffer", redAlertSound = "redAlert.buffer", endLevelBonus = "endLevelBonus.buffer", capacitor = "capacitor.buffer", capacitorStart = "capacitorStart.buffer", freezeSound = "freeze.buffer", shieldSound = "shields.buffer", bezerkSound = "bezerk.buffer", repairZapSound = "repairZap.buffer" ; // Smartbomb effect private String explosionTexture = "explosion.texture", smartBombTexture = "smartbomb.texture" ; /** Spawnpoints */ private String northSpawnPoint = "north.spawnpoints", eastSpawnPoint = "east.spawnpoints", southSpawnPoint = "south.spawnpoints", westSpawnPoint = "west.spawnpoints" ; private String slotBackground = "slot.background", slotHoveredBackground = "slot.hovered.background", slotSelectedBackground = "slot.selected.background", beamBackground = "proximity.background" ; private String floorEdgeTransition = "transition.tileset" ; private String arrowNorth = "arrow.north.layers", arrowSouth = "arrow.south.layers", arrowEast = "arrow.east.layers", arrowWest = "arrow.west.layers", arrowNorthWest = "arrow.northwest.layers", arrowNorthEast = "arrow.northeast.layers", arrowSouthWest = "arrow.southwest.layers", arrowSouthEast = "arrow.southeast.layers", arrowMidSpawner = "arrow.midspawner.layers", survivalMapTemplate = "survival.templates", survivalBosses = "survival.bosses.array", xmasBosses = "xmas.bosses.array", xmasGidrahs = "xmas.gidrahs.array", xmasAngryGidrahs = "xmas.angrygidrahs.array" ; private String researchNagDialog = "research-nag.dialog", modeLockedDialog = "mode-locked.dialog", ingameInfoDialog = "ingame.info.dialog"; private String factoryMining = "factoryMining.buffer"; /* * Transient data */ private transient GLBaseTexture smartBombTextureResource, explosionTextureResource, solidTextureResource, dashTextureResource, rangeTextureResource, beamTextureResource, laserTextureResource ; private transient ALBuffer saucerSoundBuffer, redAlertSoundBuffer, endLevelBonusBuffer, factoryMiningBuffer, capacitorBuffer, capacitorStartBuffer, freezeSoundBuffer, bezerkSoundBuffer, shieldSoundBuffer, repairZapSoundBuffer ; private transient EmitterFeature buildingDamageEmitterFeature, gidrahPainEmitterFeature, iceShardsSmallEmitterFeature, iceShardsAngryEmitterFeature, iceShardsBossEmitterFeature, deflectEmitterFeature, buildingSmokeEmitterFeature, buildingFlamesEmitterFeature ; private transient Animation iceAnimationResource, reloadIndicatorResource, reloadLargeIndicatorResource ; private transient SpriteImage beamStartResource, beamEndResource ; private transient LayersFeature mousePointerResource, mousePointerCantBuildResource, mousePointerOffTargetResource, mousePointerOnTargetResource, mousePointerReloadResource, mousePointerPickupResource, mousePointerBezerkOffTargetResource, mousePointerBezerkOnTargetResource, mousePointerBezerkOutOfRangeResource, mousePointerOutOfRangeResource, mousePointerSmartbombResource, mousePointerBlastmineResource, mousePointerSellOnResource, mousePointerSellOffResource, mousePointerGrabOnResource ; private transient LayersFeature arrowNorthLayersFeature, arrowSouthLayersFeature, arrowEastLayersFeature, arrowWestLayersFeature, arrowNorthEastLayersFeature, arrowNorthWestLayersFeature, arrowSouthWestLayersFeature, arrowSouthEastLayersFeature, arrowMidSpawnerLayersFeature ; private transient SpriteImage buildIndicatorResource ; private transient EmitterFeature repairEmitterFeature, repairAllEmitterFeature ; private transient ResourceArray reloadArray, ammoArray, reloadLargeArray, ammoLargeArray, energyAmmoArray, moneyArray, bossHitPointsArray, northSpawnPointResource, eastSpawnPointResource, southSpawnPointResource, westSpawnPointResource, survivalMapTemplateResource, survivalBossesResource, xmasBossesResource, xmasGidrahsResource, xmasAngryGidrahsResource ; private transient ResourceArray[] endlessGidrahsResource, endlessAngryGidrahsResource, survivalGidrahsResource, survivalAngryGidrahsResource ; private transient Background slotBackgroundResource, slotHoveredBackgroundResource, slotSelectedBackgroundResource, beamBackgroundResource ; private transient ALStream[] ambientResource; private transient TileSetFeature floorEdgeTransitionResource; private transient DialogScreen researchNagDialogResource, modeLockedDialogResource, ingameInfoDialogResource; private transient Animation[] quicklaunchCountOff, quicklaunchCountOn, quicklaunchCount10Off, quicklaunchCount10On; /** * C'tor */ public Res() { } @Override protected void doRegister() { super.doRegister(); instance = this; } @Override protected void doDeregister() { instance = null; super.doDeregister(); } @Override protected void doCreate() { super.doCreate(); ambientResource = new ALStream[50]; for (int i = 0; i < 50; i ++) { ambientResource[i] = Resources.get("level"+fmt(i)+".stream"); } endlessGidrahsResource = new ResourceArray[4]; endlessAngryGidrahsResource = new ResourceArray[4]; for (int i = 0; i < 4; i ++) { endlessGidrahsResource[i] = Resources.get("endless.gidrahs."+i); endlessAngryGidrahsResource[i] = Resources.get("endless.angrygidrahs."+i); } survivalGidrahsResource = new ResourceArray[4]; survivalAngryGidrahsResource = new ResourceArray[4]; for (int i = 0; i < 4; i ++) { survivalGidrahsResource[i] = Resources.get("survival.gidrahs."+i); survivalAngryGidrahsResource[i] = Resources.get("survival.angrygidrahs."+i); } quicklaunchCountOn = new Animation[10]; quicklaunchCountOff = new Animation[10]; quicklaunchCount10On = new Animation[10]; quicklaunchCount10Off = new Animation[10]; for (int i = 0; i < 10; i++) { quicklaunchCountOff[i] = Resources.get("quicklaunch.counter."+i+".off.animation"); quicklaunchCountOn[i] = Resources.get("quicklaunch.counter."+i+".on.animation"); quicklaunchCount10Off[i] = Resources.get("quicklaunch.counter.10."+i+".off.animation"); quicklaunchCount10On[i] = Resources.get("quicklaunch.counter.10."+i+".on.animation"); } } public static Animation getQuicklaunchCountOff(int i) { return instance.quicklaunchCountOff[i]; } public static Animation getQuicklaunchCountOn(int i) { return instance.quicklaunchCountOn[i]; } public static Animation getQuicklaunchCount10Off(int i) { return instance.quicklaunchCount10Off[i]; } public static Animation getQuicklaunchCount10On(int i) { return instance.quicklaunchCount10On[i]; } public static GLBaseTexture getSmartBombTexture() { return instance.smartBombTextureResource; } public static ALBuffer getSaucerSound() { return instance.saucerSoundBuffer; } public static EmitterFeature getBuildingDamageEmitter() { return instance.buildingDamageEmitterFeature; } public static LayersFeature getMousePointer() { return instance.mousePointerResource; } public static LayersFeature getMousePointerOnTarget() { return instance.mousePointerOnTargetResource; } public static LayersFeature getMousePointerOffTarget() { return instance.mousePointerOffTargetResource; } public static LayersFeature getMousePointerBezerkOnTarget() { return instance.mousePointerBezerkOnTargetResource; } public static LayersFeature getMousePointerBezerkOffTarget() { return instance.mousePointerBezerkOffTargetResource; } public static LayersFeature getMousePointerCantBuild() { return instance.mousePointerCantBuildResource; } public static LayersFeature getMousePointerSmartbomb() { return instance.mousePointerSmartbombResource; } public static LayersFeature getMousePointerBlastmine() { return instance.mousePointerBlastmineResource; } public static LayersFeature getMousePointerPickup() { return instance.mousePointerPickupResource; } public static LayersFeature getMousePointerReload() { return instance.mousePointerReloadResource; } public static LayersFeature getMousePointerSellOff() { return instance.mousePointerSellOffResource; } public static LayersFeature getMousePointerSellOn() { return instance.mousePointerSellOnResource; } public static GLBaseTexture getExplosionTexture() { return instance.explosionTextureResource; } public static EmitterFeature getGidrahPainEmitter() { return instance.gidrahPainEmitterFeature; } public static Animation getReloadIndicator() { return instance.reloadIndicatorResource; } public static Animation getReloadLargeIndicator() { return instance.reloadLargeIndicatorResource; } public static EmitterFeature getBuildingFlamesEmitter() { return instance.buildingFlamesEmitterFeature; } public static EmitterFeature getBuildingSmokeEmitter() { return instance.buildingSmokeEmitterFeature; } public static LayersFeature getMousePointerBezerkOutOfRange() { return instance.mousePointerBezerkOutOfRangeResource; } public static LayersFeature getMousePointerOutOfRange() { return instance.mousePointerOutOfRangeResource; } public static Animation getIceAnimation() { return instance.iceAnimationResource; } public static EmitterFeature getIceShardsSmallEmitter() { return instance.iceShardsSmallEmitterFeature; } public static EmitterFeature getIceShardsAngryEmitter() { return instance.iceShardsAngryEmitterFeature; } public static EmitterFeature getIceShardsBossEmitter() { return instance.iceShardsBossEmitterFeature; } public static EmitterFeature getRepairEmitter() { return instance.repairEmitterFeature; } public static EmitterFeature getRepairAllEmitter() { return instance.repairAllEmitterFeature; } public static SpriteImage getBuildIndicator() { return instance.buildIndicatorResource; } public static EmitterFeature getDeflectEmitter() { return instance.deflectEmitterFeature; } public static SpriteImage getReload(float ratio) { return (SpriteImage) instance.reloadArray.getResource((int) LinearInterpolator.instance.interpolate(instance.reloadArray.getNumResources() - 1, 0, ratio)); } public static SpriteImage getAmmo(int ammo, int maxAmmo) { return (SpriteImage) instance.ammoArray.getResource((int) LinearInterpolator.instance.interpolate(0, instance.ammoArray.getNumResources() - 1, (float) ammo / (float) maxAmmo)); } public static SpriteImage getReloadLarge(float ratio) { return (SpriteImage) instance.reloadLargeArray.getResource((int) LinearInterpolator.instance.interpolate(instance.reloadLargeArray.getNumResources() - 1, 0, ratio)); } public static SpriteImage getAmmoLarge(int ammo, int maxAmmo) { return (SpriteImage) instance.ammoLargeArray.getResource((int) LinearInterpolator.instance.interpolate(0, instance.ammoLargeArray.getNumResources() - 1, (float) ammo / (float) maxAmmo)); } public static SpriteImage getEnergyAmmo(int ammo, int maxAmmo) { return (SpriteImage) instance.energyAmmoArray.getResource((int) LinearInterpolator.instance.interpolate(0, instance.energyAmmoArray.getNumResources() - 1, (float) ammo / (float) maxAmmo)); } public static SpriteImage getMoney(int tick, int productionRate) { if (tick == 0) { return (SpriteImage) instance.moneyArray.getResource(instance.moneyArray.getNumResources() - 1); } else { return (SpriteImage) instance.moneyArray.getResource((int) LinearInterpolator.instance.interpolate(instance.moneyArray.getNumResources(), 0, (float) tick / (float) productionRate)); } } public static SpriteImage getBossHitPoints(float ratio) { return (SpriteImage) instance.bossHitPointsArray.getResource((int) LinearInterpolator.instance.interpolate(0, instance.bossHitPointsArray.getNumResources() - 1, ratio)); } /** * @return the slotBackgroundResource */ public static Background getSlotBackground() { return instance.slotBackgroundResource; } /** * @return the slotHoveredBackgroundResource */ public static Background getSlotHoveredBackground() { return instance.slotHoveredBackgroundResource; } /** * @return the slotSelectedBackgroundResource */ public static Background getSlotSelectedBackground() { return instance.slotSelectedBackgroundResource; } /** * @return */ public static ALBuffer getRedAlertSound() { return instance.redAlertSoundBuffer; } public static Background getBeamBackground() { return instance.beamBackgroundResource; } public static SpriteImage getBeamStart() { return instance.beamStartResource; } public static SpriteImage getBeamEnd() { return instance.beamEndResource; } public static ALBuffer getEndLevelBonusSound() { return instance.endLevelBonusBuffer; } public static SpawnPoint getNorthSpawnPoint(int difficulty) { return (SpawnPoint) instance.northSpawnPointResource.getResource(difficulty); } public static SpawnPoint getEastSpawnPoint(int difficulty) { return (SpawnPoint) instance.eastSpawnPointResource.getResource(difficulty); } public static SpawnPoint getSouthSpawnPoint(int difficulty) { return (SpawnPoint) instance.southSpawnPointResource.getResource(difficulty); } public static SpawnPoint getWestSpawnPoint(int difficulty) { return (SpawnPoint) instance.westSpawnPointResource.getResource(difficulty); } public static GLBaseTexture getRangeTexture() { return instance.rangeTextureResource; } /** * @param level * @return */ public static ALStream getAmbient(int level) { return instance.ambientResource[level % instance.ambientResource.length]; } private String fmt(int i) { if (i < 10) { return "0"+String.valueOf(i); } else { return String.valueOf(i); } } /** * @return a tile with a gradient for them nice edges */ public static FloorTile getFloorEdgeTransition(boolean n, boolean ne, boolean e, boolean se, boolean s, boolean sw, boolean w, boolean nw) { ArrayList<Tile> a = instance.floorEdgeTransitionResource.getTiles(); int idx = (n ? 1 : 0) + (ne ? 2 : 0) + (e ? 4 : 0) + (se ? 8 : 0) + (s ? 16 : 0) + (sw ? 32 : 0) + (w ? 64 : 0) + (nw ? 128 : 0); return (FloorTile) a.get( idx-1 ); } public static LayersFeature getNorthArrow() { return instance.arrowNorthLayersFeature; } public static LayersFeature getSouthArrow() { return instance.arrowSouthLayersFeature; } public static LayersFeature getEastArrow() { return instance.arrowEastLayersFeature; } public static LayersFeature getWestArrow() { return instance.arrowWestLayersFeature; } public static LayersFeature getNorthWestArrow() { return instance.arrowNorthWestLayersFeature; } public static LayersFeature getSouthEastArrow() { return instance.arrowSouthEastLayersFeature; } public static LayersFeature getNorthEastArrow() { return instance.arrowNorthEastLayersFeature; } public static LayersFeature getSouthWestArrow() { return instance.arrowSouthWestLayersFeature; } public static LayersFeature getMidSpawnerArrow() { return instance.arrowMidSpawnerLayersFeature; } public static DialogScreen getResearchNagDialog() { return instance.researchNagDialogResource; } public static DialogScreen getModeLockedDialog() { return instance.modeLockedDialogResource; } public static DialogScreen getIngameInfoDialog() { return instance.ingameInfoDialogResource; } public static ALBuffer getFactoryMiningBuffer() { return instance.factoryMiningBuffer; } public static ALBuffer getCapacitorBuffer() { return instance.capacitorBuffer; } public static ALBuffer getCapacitorStartBuffer() { return instance.capacitorStartBuffer; } public static ResourceArray getEndlessGidrahs(int type) { return instance.endlessGidrahsResource[type]; } public static ResourceArray getEndlessAngryGidrahs(int type) { return instance.endlessAngryGidrahsResource[type]; } public static ResourceArray getSurvivalGidrahs(int type) { return instance.survivalGidrahsResource[type]; } public static ResourceArray getSurvivalAngryGidrahs(int type) { return instance.survivalAngryGidrahsResource[type]; } public static ResourceArray getXmasGidrahs() { return instance.xmasGidrahsResource; } public static ResourceArray getXmasAngryGidrahs() { return instance.xmasAngryGidrahsResource; } public static MapTemplate getSurvivalMapTemplate(int worldIndex, int templateIndex) { ResourceArray templates = (ResourceArray) instance.survivalMapTemplateResource.getResource(worldIndex); return (MapTemplate) templates.getResource(templateIndex); } public static GidrahFeature getSurvivalBoss(int n) { return (GidrahFeature) instance.survivalBossesResource.getResource(n); } public static GidrahFeature getXmasBoss(int n) { return (GidrahFeature) instance.xmasBossesResource.getResource(n); } public static int getNumSurvivalBosses() { return instance.survivalBossesResource.getNumResources(); } public static int getNumXmasBosses() { return instance.xmasBossesResource.getNumResources(); } public static MapTemplate getSandboxMapTemplate(int worldIndex, int templateIndex) { ResourceArray templates = (ResourceArray) instance.survivalMapTemplateResource.getResource(worldIndex); return (MapTemplate) templates.getResource(0); } public static ALBuffer getFreezeSound() { return instance.freezeSoundBuffer; } public static ALBuffer getBezerkSound() { return instance.bezerkSoundBuffer; } public static ALBuffer getShieldSound() { return instance.shieldSoundBuffer; } public static ALBuffer getRepairZapSound() { return instance.repairZapSoundBuffer; } public static GLBaseTexture getLaserTexture() { return instance.laserTextureResource; } public static LayersFeature getMousePointerGrab() { return instance.mousePointerGrabOnResource; } public static GLBaseTexture getSolidTexture() { return instance.solidTextureResource; } public static GLBaseTexture getDashTexture() { return instance.dashTextureResource; } public static GLBaseTexture getBeamTexture() { return instance.beamTextureResource; } }