Files
shattered-pixel-dungeon-web…/src/com/shatteredpixel/shatteredpixeldungeon/actors/blobs/WaterOfTransmutation.java
T
2015-02-06 09:56:04 -05:00

242 lines
6.0 KiB
Java

/*
* Pixel Dungeon
* Copyright (C) 2012-2014 Oleg Dolya
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package com.shatteredpixel.shatteredpixeldungeon.actors.blobs;
import com.shatteredpixel.shatteredpixeldungeon.Journal;
import com.shatteredpixel.shatteredpixeldungeon.Journal.Feature;
import com.shatteredpixel.shatteredpixeldungeon.effects.BlobEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator.Category;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMight;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfWeaponUpgrade;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.*;
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
public class WaterOfTransmutation extends WellWater {
@Override
protected Item affectItem( Item item ) {
if (item instanceof MeleeWeapon) {
item = changeWeapon( (MeleeWeapon)item );
} else if (item instanceof Scroll) {
item = changeScroll( (Scroll)item );
} else if (item instanceof Potion) {
item = changePotion( (Potion)item );
} else if (item instanceof Ring) {
item = changeRing( (Ring)item );
} else if (item instanceof Wand) {
item = changeWand( (Wand)item );
} else if (item instanceof Plant.Seed) {
item = changeSeed( (Plant.Seed)item );
} else if (item instanceof Artifact) {
item = changeArtifact( (Artifact)item );
} else {
item = null;
}
if (item != null) {
Journal.remove( Feature.WELL_OF_TRANSMUTATION );
}
return item;
}
@Override
public void use( BlobEmitter emitter ) {
super.use( emitter );
emitter.start( Speck.factory( Speck.CHANGE ), 0.2f, 0 );
}
private MeleeWeapon changeWeapon( MeleeWeapon w ) {
MeleeWeapon n = null;
if (w instanceof Knuckles) {
n = new Dagger();
} else if (w instanceof Dagger) {
n = new Knuckles();
}
else if (w instanceof Spear) {
n = new Quarterstaff();
} else if (w instanceof Quarterstaff) {
n = new Spear();
}
else if (w instanceof Sword) {
n = new Mace();
} else if (w instanceof Mace) {
n = new Sword();
}
else if (w instanceof Longsword) {
n = new BattleAxe();
} else if (w instanceof BattleAxe) {
n = new Longsword();
}
else if (w instanceof Glaive) {
n = new WarHammer();
} else if (w instanceof WarHammer) {
n = new Glaive();
}
if (n != null) {
int level = w.level;
if (level > 0) {
n.upgrade( level );
} else if (level < 0) {
n.degrade( -level );
}
//FIXME enchantment should be preserved.
/*if (w.isEnchanted()) {
n.enchant();
}*/
n.levelKnown = w.levelKnown;
n.cursedKnown = w.cursedKnown;
n.cursed = w.cursed;
return n;
} else {
return null;
}
}
private Ring changeRing( Ring r ) {
Ring n;
do {
n = (Ring)Generator.random( Category.RING );
} while (n.getClass() == r.getClass());
n.level = 0;
int level = r.level;
if (level > 0) {
n.upgrade( level );
} else if (level < 0) {
n.degrade( -level );
}
n.levelKnown = r.levelKnown;
n.cursedKnown = r.cursedKnown;
n.cursed = r.cursed;
return n;
}
private Artifact changeArtifact( Artifact a ) {
Artifact n = Generator.randomArtifact();
if (n != null){
n.cursedKnown = a.cursedKnown;
n.cursed = a.cursed;
n.levelKnown = a.levelKnown;
n.transferUpgrade(a.visiblyUpgraded());
}
return n;
}
private Wand changeWand( Wand w ) {
Wand n;
do {
n = (Wand)Generator.random( Category.WAND );
} while (n.getClass() == w.getClass());
n.level = 0;
n.upgrade( w.level );
n.levelKnown = w.levelKnown;
n.cursedKnown = w.cursedKnown;
n.cursed = w.cursed;
return n;
}
private Plant.Seed changeSeed( Plant.Seed s ) {
Plant.Seed n;
do {
n = (Plant.Seed)Generator.random( Category.SEED );
} while (n.getClass() == s.getClass());
return n;
}
private Scroll changeScroll( Scroll s ) {
if (s instanceof ScrollOfUpgrade) {
return new ScrollOfWeaponUpgrade();
} else if (s instanceof ScrollOfWeaponUpgrade) {
return new ScrollOfUpgrade();
} else {
Scroll n;
do {
n = (Scroll)Generator.random( Category.SCROLL );
} while (n.getClass() == s.getClass());
return n;
}
}
private Potion changePotion( Potion p ) {
if (p instanceof PotionOfStrength) {
return new PotionOfMight();
} else if (p instanceof PotionOfMight) {
return new PotionOfStrength();
} else {
Potion n;
do {
n = (Potion)Generator.random( Category.POTION );
} while (n.getClass() == p.getClass());
return n;
}
}
@Override
public String tileDesc() {
return
"Power of change radiates from the water of this well. " +
"Throw an item into the well to turn it into something else.";
}
}