private TurnActionComponent SafeGetAction(DynValue value, string excMsgHeader) { if (value.Type == DataType.UserData) { Mods.Lua.TurnActionComponent luaComp = value.UserData.Object as Mods.Lua.TurnActionComponent; if (luaComp != null) { return(TranslateTurnActionComp(luaComp, excMsgHeader)); } else { throw new BadActionException(excMsgHeader + " UserData cannot be coerced into TurnActionComponent"); } } else { throw new BadActionException(excMsgHeader + " Expected UserData type"); } }
private TurnActionComponent TranslateTurnActionComp(Mods.Lua.TurnActionComponent luaComp, string excMsgHeader) { TurnActionComponent logicComp = new TurnActionComponent(); switch (luaComp.Type.ToUpperInvariant()) { case "MOVE": logicComp.type = TurnActionComponentType.MovePiece; logicComp.actor = ToBoardPosition(luaComp.ActorX, luaComp.ActorY, excMsgHeader, "start"); logicComp.target = ToBoardPosition(luaComp.TargetX, luaComp.TargetY, excMsgHeader, "target"); if (logicComp.actor == logicComp.target) { throw new BadActionException(excMsgHeader + " Start and target positions are equal"); } return(logicComp); case "CAPTURE": logicComp.type = TurnActionComponentType.CapturePiece; logicComp.target = ToBoardPosition(luaComp.TargetX, luaComp.TargetY, excMsgHeader, "target"); return(logicComp); case "PROMOTION": case "PROMOTE": logicComp.type = TurnActionComponentType.PromotePiece; logicComp.actor = ToBoardPosition(luaComp.ActorX, luaComp.ActorY, excMsgHeader, "promoted"); logicComp.promotionIndex = db.PieceNameToIndex(luaComp.PromotionPiece); if (logicComp.promotionIndex < 0) { throw new BadActionException(excMsgHeader + " Nonexistent piece given for promotion"); } return(logicComp); default: throw new BadActionException(string.Format("{0} Invalid action type \"{1}\"", excMsgHeader, luaComp.Type)); } }