fix: remove unused imports from GolemancyTab and fix build error
Some checks failed
Build and Publish Mana Loop Docker Image / build-and-publish (push) Has been cancelled
Some checks failed
Build and Publish Mana Loop Docker Image / build-and-publish (push) Has been cancelled
This commit is contained in:
@@ -1,18 +1,15 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
||||||
import { Button } from '@/components/ui/button';
|
|
||||||
import { Badge } from '@/components/ui/badge';
|
import { Badge } from '@/components/ui/badge';
|
||||||
import { ScrollArea } from '@/components/ui/scroll-area';
|
import { ScrollArea } from '@/components/ui/scroll-area';
|
||||||
import { Separator } from '@/components/ui/separator';
|
import { Separator } from '@/components/ui/separator';
|
||||||
import {
|
import {
|
||||||
Golem, Zap, Clock, Swords, Shield, Target, Sparkles, Lock, Check, X
|
Mountain, Zap, Clock, Swords, Target, Sparkles, Lock, Check, X
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
import { GOLEMS_DEF, getGolemSlots, isGolemUnlocked, getGolemDamage, getGolemAttackSpeed, getGolemFloorDuration } from '@/lib/game/data/golems';
|
import { GOLEMS_DEF, getGolemSlots, isGolemUnlocked, getGolemDamage, getGolemAttackSpeed, getGolemFloorDuration } from '@/lib/game/data/golems';
|
||||||
import { ELEMENTS } from '@/lib/game/constants';
|
import { ELEMENTS } from '@/lib/game/constants';
|
||||||
import { fmt } from '@/lib/game/store';
|
|
||||||
import type { GameStore } from '@/lib/game/store';
|
import type { GameStore } from '@/lib/game/store';
|
||||||
import type { GolemancyState, AttunementState, ElementState } from '@/lib/game/types';
|
|
||||||
|
|
||||||
export interface GolemancyTabProps {
|
export interface GolemancyTabProps {
|
||||||
store: GameStore;
|
store: GameStore;
|
||||||
@@ -108,7 +105,7 @@ export function GolemancyTab({ store }: GolemancyTabProps) {
|
|||||||
<CardHeader className="pb-2">
|
<CardHeader className="pb-2">
|
||||||
<CardTitle className="text-sm flex items-center justify-between">
|
<CardTitle className="text-sm flex items-center justify-between">
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<Golem className="w-4 h-4" style={{ color: elementColor }} />
|
<Mountain className="w-4 h-4" style={{ color: elementColor }} />
|
||||||
<span style={{ color: elementColor }}>{golem.name}</span>
|
<span style={{ color: elementColor }}>{golem.name}</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-1">
|
<div className="flex items-center gap-1">
|
||||||
@@ -215,7 +212,7 @@ export function GolemancyTab({ store }: GolemancyTabProps) {
|
|||||||
<Card className="bg-gray-900/80 border-gray-700">
|
<Card className="bg-gray-900/80 border-gray-700">
|
||||||
<CardHeader className="pb-2">
|
<CardHeader className="pb-2">
|
||||||
<CardTitle className="text-lg flex items-center gap-2">
|
<CardTitle className="text-lg flex items-center gap-2">
|
||||||
<Golem className="w-5 h-5 text-amber-500" />
|
<Mountain className="w-5 h-5 text-amber-500" />
|
||||||
Golemancy
|
Golemancy
|
||||||
</CardTitle>
|
</CardTitle>
|
||||||
</CardHeader>
|
</CardHeader>
|
||||||
@@ -278,7 +275,7 @@ export function GolemancyTab({ store }: GolemancyTabProps) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Badge key={sg.golemId} variant="outline" className="text-sm py-1 px-2">
|
<Badge key={sg.golemId} variant="outline" className="text-sm py-1 px-2">
|
||||||
<Golem className="w-3 h-3 mr-1" style={{ color: elem?.color }} />
|
<Mountain className="w-3 h-3 mr-1" style={{ color: elem?.color }} />
|
||||||
{golem?.name}
|
{golem?.name}
|
||||||
</Badge>
|
</Badge>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -356,3 +356,116 @@ export function getGolemAttackSpeed(
|
|||||||
export function getGolemFloorDuration(skills: Record<string, number>): number {
|
export function getGolemFloorDuration(skills: Record<string, number>): number {
|
||||||
return 1 + (skills.golemLongevity || 0);
|
return 1 + (skills.golemLongevity || 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get maintenance cost multiplier (Golem Siphon reduces by 10% per level)
|
||||||
|
export function getGolemMaintenanceMultiplier(skills: Record<string, number>): number {
|
||||||
|
return 1 - (skills.golemSiphon || 0) * 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if player can afford golem summon cost
|
||||||
|
export function canAffordGolemSummon(
|
||||||
|
golemId: string,
|
||||||
|
rawMana: number,
|
||||||
|
elements: Record<string, { current: number; max: number; unlocked: boolean }>
|
||||||
|
): boolean {
|
||||||
|
const golem = GOLEMS_DEF[golemId];
|
||||||
|
if (!golem) return false;
|
||||||
|
|
||||||
|
for (const cost of golem.summonCost) {
|
||||||
|
if (cost.type === 'raw') {
|
||||||
|
if (rawMana < cost.amount) return false;
|
||||||
|
} else if (cost.element) {
|
||||||
|
const elem = elements[cost.element];
|
||||||
|
if (!elem || !elem.unlocked || elem.current < cost.amount) return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deduct golem summon cost from mana pools
|
||||||
|
export function deductGolemSummonCost(
|
||||||
|
golemId: string,
|
||||||
|
rawMana: number,
|
||||||
|
elements: Record<string, { current: number; max: number; unlocked: boolean }>
|
||||||
|
): { rawMana: number; elements: Record<string, { current: number; max: number; unlocked: boolean }> } {
|
||||||
|
const golem = GOLEMS_DEF[golemId];
|
||||||
|
if (!golem) return { rawMana, elements };
|
||||||
|
|
||||||
|
let newRawMana = rawMana;
|
||||||
|
let newElements = { ...elements };
|
||||||
|
|
||||||
|
for (const cost of golem.summonCost) {
|
||||||
|
if (cost.type === 'raw') {
|
||||||
|
newRawMana -= cost.amount;
|
||||||
|
} else if (cost.element && newElements[cost.element]) {
|
||||||
|
newElements = {
|
||||||
|
...newElements,
|
||||||
|
[cost.element]: {
|
||||||
|
...newElements[cost.element],
|
||||||
|
current: newElements[cost.element].current - cost.amount,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { rawMana: newRawMana, elements: newElements };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if player can afford golem maintenance for one tick
|
||||||
|
export function canAffordGolemMaintenance(
|
||||||
|
golemId: string,
|
||||||
|
rawMana: number,
|
||||||
|
elements: Record<string, { current: number; max: number; unlocked: boolean }>,
|
||||||
|
skills: Record<string, number>
|
||||||
|
): boolean {
|
||||||
|
const golem = GOLEMS_DEF[golemId];
|
||||||
|
if (!golem) return false;
|
||||||
|
|
||||||
|
const maintenanceMult = getGolemMaintenanceMultiplier(skills);
|
||||||
|
|
||||||
|
for (const cost of golem.maintenanceCost) {
|
||||||
|
const adjustedAmount = cost.amount * maintenanceMult;
|
||||||
|
if (cost.type === 'raw') {
|
||||||
|
if (rawMana < adjustedAmount) return false;
|
||||||
|
} else if (cost.element) {
|
||||||
|
const elem = elements[cost.element];
|
||||||
|
if (!elem || !elem.unlocked || elem.current < adjustedAmount) return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deduct golem maintenance cost for one tick
|
||||||
|
export function deductGolemMaintenance(
|
||||||
|
golemId: string,
|
||||||
|
rawMana: number,
|
||||||
|
elements: Record<string, { current: number; max: number; unlocked: boolean }>,
|
||||||
|
skills: Record<string, number>
|
||||||
|
): { rawMana: number; elements: Record<string, { current: number; max: number; unlocked: boolean }> } {
|
||||||
|
const golem = GOLEMS_DEF[golemId];
|
||||||
|
if (!golem) return { rawMana, elements };
|
||||||
|
|
||||||
|
const maintenanceMult = getGolemMaintenanceMultiplier(skills);
|
||||||
|
|
||||||
|
let newRawMana = rawMana;
|
||||||
|
let newElements = { ...elements };
|
||||||
|
|
||||||
|
for (const cost of golem.maintenanceCost) {
|
||||||
|
const adjustedAmount = cost.amount * maintenanceMult;
|
||||||
|
if (cost.type === 'raw') {
|
||||||
|
newRawMana -= adjustedAmount;
|
||||||
|
} else if (cost.element && newElements[cost.element]) {
|
||||||
|
newElements = {
|
||||||
|
...newElements,
|
||||||
|
[cost.element]: {
|
||||||
|
...newElements[cost.element],
|
||||||
|
current: newElements[cost.element].current - adjustedAmount,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { rawMana: newRawMana, elements: newElements };
|
||||||
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ import {
|
|||||||
import { EQUIPMENT_TYPES } from './data/equipment';
|
import { EQUIPMENT_TYPES } from './data/equipment';
|
||||||
import { ENCHANTMENT_EFFECTS, calculateEffectCapacityCost } from './data/enchantment-effects';
|
import { ENCHANTMENT_EFFECTS, calculateEffectCapacityCost } from './data/enchantment-effects';
|
||||||
import { ATTUNEMENTS_DEF, getTotalAttunementRegen, getAttunementConversionRate, getAttunementXPForLevel, MAX_ATTUNEMENT_LEVEL } from './data/attunements';
|
import { ATTUNEMENTS_DEF, getTotalAttunementRegen, getAttunementConversionRate, getAttunementXPForLevel, MAX_ATTUNEMENT_LEVEL } from './data/attunements';
|
||||||
import { GOLEMS_DEF, getGolemSlots, isGolemUnlocked, getGolemDamage, getGolemAttackSpeed, getGolemFloorDuration } from './data/golems';
|
import { GOLEMS_DEF, getGolemSlots, isGolemUnlocked, getGolemDamage, getGolemAttackSpeed, getGolemFloorDuration, canAffordGolemSummon, deductGolemSummonCost, canAffordGolemMaintenance, deductGolemMaintenance } from './data/golems';
|
||||||
|
|
||||||
// Default empty effects for when effects aren't provided
|
// Default empty effects for when effects aren't provided
|
||||||
const DEFAULT_EFFECTS: ComputedEffects = {
|
const DEFAULT_EFFECTS: ComputedEffects = {
|
||||||
|
|||||||
Reference in New Issue
Block a user