package com.weem.epicinventor.actor.monster;
import com.weem.epicinventor.*;
import com.weem.epicinventor.actor.*;
import com.weem.epicinventor.ai.*;
import com.weem.epicinventor.drop.*;
import com.weem.epicinventor.network.*;
import com.weem.epicinventor.utility.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
import java.io.*;
public class BlueThorn extends Monster {
private static final long serialVersionUID = 10000L;
private String finalImageName = "";
public BlueThorn(MonsterManager mm, Registry rg, String im, String st, int x, int y, int minDist, int maxDist) {
super(mm, rg, im, st, x, y, minDist, maxDist, false);
name = "BlueThorn";
displayName = "Blue Thorn";
hideDisplayName = true;
finalImageName = "BlueThorn" + Rand.getRange(1, 3);
monsterManager = mm;
difficultyFactor = 0.50f;
adjustHPForLevel();
disregardKnockBack = true;
topOffset = 0;
baseOffset = 6;
baseWidth = 5;
startJumpSize = 20;
jumpSize = 8;
fallSize = 0;
updateImage();
xMoveSize = 0;
mapX = x;
mapY = y;
//sometimes these are spawning slightly in the air...
for (int i = 0; i < 32; i++) {
if (!monsterManager.doesRectContainBlocks(mapX + baseOffset, mapY - 1, baseWidth, 16)) {
mapY--;
} else {
break;
}
}
if (monsterManager.doesRectContainBlocks(mapX, mapY, width, height)) {
isDirty = true;
}
adjustTouchDamageForLevel();
ai = new AI(registry, this);
ai.clearGoals();
}
@Override
public Damage getMonsterTouchDamage(Rectangle r, int x) {
if (hitPoints > 0) {
if (spriteRect != null && r != null) {
if (spriteRect.intersects(r)) {
playerDamage += touchDamage;
if (x > getCenterPoint().x) {
return new Damage(this, touchDamage, 7, 7);
} else {
return new Damage(this, touchDamage, -7, 7);
}
}
}
}
return null;
}
@Override
public void update() {
lastMapY = mapY;
spriteRect = null;
int offsetX = -1 * spriteRectOffestX;
if (facing == Facing.RIGHT) {
offsetX = spriteRectOffestX;
}
spriteRect = new Rectangle(mapX + baseOffset + offsetX, mapY - topOffset + spriteRectOffestY, baseWidth, height - topOffset);
if (spriteRect.intersects(manager.getPanelRect())) {
shouldRender = true;
} else {
shouldRender = false;
}
if (isActive && isAnimating) {
if (animationFrameUpdateTime <= registry.currentTime) {
currentAnimationFrame++;
if (currentAnimationFrame >= numAnimationFrames) {
currentAnimationFrame = 0;
}
animationFrameUpdateTime = registry.currentTime + animationFrameDuration;
}
}
if (hitPoints > 0) {
} else {
if (registry.getGameController().multiplayerMode == registry.getGameController().multiplayerMode.SERVER && registry.getNetworkThread() != null) {
if (registry.getNetworkThread().readyForUpdates()) {
UpdateMonster um = new UpdateMonster(this.getId());
um.mapX = this.getMapX();
um.mapY = this.getMapY();
um.action = "Die";
registry.getNetworkThread().sendData(um);
}
}
SoundClip cl = new SoundClip(registry, "Monster/Die" + name, getCenterPoint());
isDead = true;
ai.terminate();
if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.CLIENT) {
ArrayList<Drop> drops = dropChances.generateDrops();
if (drops.size() > 0) {
monsterManager.dropLoot(this, mapX + (width / 2), mapY + 32, drops);
}
}
BufferedImage im = registry.getImageLoader().getImage(image);
if (facing == Facing.LEFT) {
AffineTransform tx = AffineTransform.getScaleInstance(1, -1);
tx = AffineTransform.getScaleInstance(-1, 1);
tx.translate(-width, 0);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
BufferedImage imLeft = op.filter(im, null);
if (imLeft != null) {
registry.getPixelizeManager().pixelize(imLeft, mapX, mapY);
}
} else {
registry.getPixelizeManager().pixelize(im, mapX, mapY);
}
}
if (spriteRect.intersects(manager.getPanelRect())) {
isInPanel = true;
} else {
isInPanel = false;
}
updateImage();
}
@Override
public void updateLong() {
if (registry.getClosestPlayer(getCenterPoint(), MonsterManager.mobSpawnRangeMin * 2) == null) {
Point p = getCenterPoint();
if (p.x > 0 && p.y > 0) {
if (!registry.getPlaceableManager().isPlaceableWithin(getCenterPoint(), MonsterManager.mobSpawnRangeMin * 2)) {
isDirty = true;
}
}
}
}
@Override
protected void updateImage() {
setImage("Monsters/" + name + "/" + finalImageName);
}
}