xchess
Version:
Chess Engine
61 lines (44 loc) • 894 B
JavaScript
export {PromotionState}
import {ProxyState} from './proxy-state.js'
import {Transitional} from './transitional-state.js'
import {PromotionEvent, MoveEvent} from './events.js'
import {PROMOTION_REQUIRED} from './errors.js'
class PromotionState extends Transitional(ProxyState) {
#move;
constructor(move, target, prev){
super(target, prev);
this.#move = move;
}
get lastMove(){
return this.#move;
}
// Stat
get status(){
return 'promotion';
}
get isMovement(){
return true;
}
get isPromotion(){
return true;
}
// Log Event
undo(){
this.#move.undo(this.context);
}
redo(){
this.#move.redo(this.context);
}
trigger(){
this.dispatch(new PromotionEvent('promotion', this.#move));
}
// Game Events
move(move){
throw PROMOTION_REQUIRED();
}
promote(piece){
const move = this.#move.respond(piece);
this.target.do(move);
return true;
}
}