|
- import proto.MessageType_pb2 as MessageType
- import proto.Message2Server_pb2 as Message2Server
- import proto.Message2Clients_pb2 as Message2Clients
- import PyAPI.structures as THUAI6
- from typing import Final, List
-
- numOfGridPerCell: Final[int] = 1000
-
- # 起到NameSpace的作用
-
-
- class NoInstance:
- def __call__(self):
- raise TypeError("This class cannot be instantiated.")
-
-
- class AssistFunction(NoInstance):
-
- @staticmethod
- def CellToGrid(cell: int) -> int:
- return cell * numOfGridPerCell + numOfGridPerCell // 2
-
- @staticmethod
- def GridToCell(grid: int) -> int:
- return grid // numOfGridPerCell
-
- @staticmethod
- def HaveView(viewRange: int, x: int, y: int, newX: int, newY: int, map: List[List[THUAI6.PlaceType]]) -> bool:
- deltaX: int = newX - x
- deltaY: int = newY - y
- if deltaX * deltaX + deltaY * deltaY <= viewRange * viewRange:
- divide: int = max(abs(deltaX), abs(deltaY)) // 100
- dx: float = deltaX / divide
- dy: float = deltaY / divide
- selfX: float = float(x)
- selfY: float = float(y)
- for i in range(divide):
- selfX += dx
- selfY += dy
- if map[AssistFunction.GridToCell(int(selfX))][AssistFunction.GridToCell(int(selfY))] != THUAI6.PlaceType.Land:
- return False
- else:
- return True
- else:
- return False
-
-
- class Proto2THUAI6(NoInstance):
- placeTypeDict: Final[dict] = {
- MessageType.NULL_PLACE_TYPE: THUAI6.PlaceType.NullPlaceType,
- MessageType.WALL: THUAI6.PlaceType.Wall,
- MessageType.LAND: THUAI6.PlaceType.Land,
- MessageType.GRASS: THUAI6.PlaceType.Grass,
- MessageType.CLASSROOM: THUAI6.PlaceType.ClassRoom,
- MessageType.BLACKROOM: THUAI6.PlaceType.BlackRoom,
- MessageType.GATE: THUAI6.PlaceType.Gate,
- MessageType.HIDDEN_GATE: THUAI6.PlaceType.HiddenGate}
-
- shapeTypeDict: Final[dict] = {
- MessageType.NULL_SHAPE_TYPE: THUAI6.ShapeType.NullShapeType,
- MessageType.SQUARE: THUAI6.ShapeType.Square,
- MessageType.CIRCLE: THUAI6.ShapeType.Circle}
-
- propTypeDict: Final[dict] = {
- MessageType.NULL_PROP_TYPE: THUAI6.PropType.NullPropType,
- MessageType.PTYPE1: THUAI6.PropType.PropType1, }
-
- playerTypeDict: Final[dict] = {
- MessageType.NULL_PLAYER_TYPE: THUAI6.PlayerType.NullPlayerType,
- MessageType.STUDENT_PLAYER: THUAI6.PlayerType.StudentPlayer,
- MessageType.TRICKER_PLAYER: THUAI6.PlayerType.TrickerPlayer, }
-
- studentTypeDict: Final[dict] = {
- MessageType.NULL_STUDENT_TYPE: THUAI6.StudentType.NullStudentType,
- MessageType.STUDENTTYPE1: THUAI6.StudentType.StudentType1, }
-
- trickerTypeDict: Final[dict] = {
- MessageType.NULL_TRICKER_TYPE: THUAI6.TrickerType.NullTrickerType,
- MessageType.TRICKERTYPE1: THUAI6.TrickerType.TrickerType1, }
-
- studentBuffTypeDict: Final[dict] = {
- MessageType.NULL_SBUFF_TYPE: THUAI6.StudentBuffType.NullStudentBuffType,
- MessageType.SBUFFTYPE1: THUAI6.StudentBuffType.StudentBuffType1, }
-
- trickerBuffTypeDict: Final[dict] = {
- MessageType.NULL_TBUFF_TYPE: THUAI6.TrickerBuffType.NullTrickerBuffType,
- MessageType.TBUFFTYPE1: THUAI6.TrickerBuffType.TrickerBuffType1, }
-
- studentStateDict: Final[dict] = {
- MessageType.NULL_STATUS: THUAI6.StudentState.NullStudentState,
- MessageType.IDLE: THUAI6.StudentState.Idle,
- MessageType.LEARNING: THUAI6.StudentState.Learning,
- MessageType.FAIL: THUAI6.StudentState.Fail,
- MessageType.EMOTIONAL: THUAI6.StudentState.Emotional,
- MessageType.QUIT: THUAI6.StudentState.Quit,
- MessageType.GRADUATED: THUAI6.StudentState.Graduated}
-
- gameStateDict: Final[dict] = {
- MessageType.NULL_GAME_STATE: THUAI6.GameState.NullGameState,
- MessageType.GAME_START: THUAI6.GameState.GameStart,
- MessageType.GAME_RUNNING: THUAI6.GameState.GameRunning,
- MessageType.GAME_END: THUAI6.GameState.GameEnd}
-
- # 用于将Proto的对象转为THUAI6的对象
- @staticmethod
- def Protobuf2THUAI6Tricker(trickerMsg: Message2Clients.MessageOfTricker) -> THUAI6.Tricker:
- tricker = THUAI6.Tricker()
- tricker.x = trickerMsg.x
- tricker.y = trickerMsg.y
- tricker.speed = trickerMsg.speed
- tricker.damage = trickerMsg.damage
- tricker.timeUntilSkillAvailable = trickerMsg.time_until_skill_available
- tricker.place = Proto2THUAI6.placeTypeDict[trickerMsg.place]
- tricker.prop = Proto2THUAI6.propTypeDict[trickerMsg.prop]
- tricker.trickerType = Proto2THUAI6.trickerTypeDict[trickerMsg.tricker_type]
- tricker.guid = trickerMsg.guid
- tricker.movable = trickerMsg.movable
- tricker.playerID = trickerMsg.player_id
- tricker.viewRange = trickerMsg.view_range
- tricker.radius = trickerMsg.radius
- tricker.buff.clear()
- for buff in trickerMsg.buff:
- tricker.buff.append(Proto2THUAI6.trickerBuffTypeDict[buff])
- return tricker
-
- @staticmethod
- def Protobuf2THUAI6Student(studentMsg: Message2Clients.MessageOfStudent) -> THUAI6.Student:
- student = THUAI6.Student()
- student.x = studentMsg.x
- student.y = studentMsg.y
- student.speed = studentMsg.speed
- student.determination = studentMsg.determination
- student.failNum = studentMsg.fail_num
- student.failTime = studentMsg.fail_time
- student.emoTime = studentMsg.emo_time
- student.timeUntilSkillAvailable = studentMsg.time_until_skill_available
- student.place = Proto2THUAI6.placeTypeDict[studentMsg.place]
- student.prop = Proto2THUAI6.propTypeDict[studentMsg.prop]
- student.studentType = Proto2THUAI6.studentTypeDict[studentMsg.student_type]
- student.guid = studentMsg.guid
- student.state = Proto2THUAI6.studentStateDict[studentMsg.state]
- student.playerID = studentMsg.player_id
- student.viewRange = studentMsg.view_range
- student.radius = studentMsg.radius
- student.buff.clear()
- for buff in studentMsg.buff:
- student.buff.append(Proto2THUAI6.studentBuffTypeDict[buff])
- return student
-
- @staticmethod
- def Protobuf2THUAI6Prop(propMsg: Message2Clients.MessageOfProp) -> THUAI6.Prop:
- prop = THUAI6.Prop()
- prop.x = propMsg.x
- prop.y = propMsg.y
- prop.type = Proto2THUAI6.propTypeDict[propMsg.type]
- prop.guid = propMsg.guid
- prop.size = propMsg.size
- prop.facingDirection = propMsg.facing_direction
- prop.isMoving = propMsg.is_moving
- return prop
-
- @staticmethod
- def Protobuf2THUAI6Map(mapMsg: Message2Clients.MessageOfMap) -> List[List[THUAI6.PlaceType]]:
- map = []
- for row in mapMsg.row:
- newRow = []
- for place in row.col:
- newRow.append(Proto2THUAI6.placeTypeDict[place])
- map.append(newRow)
- return map
-
-
- class THUAI62Proto(NoInstance):
- placeTypeDict: Final[dict] = {
- THUAI6.PlaceType.NullPlaceType: MessageType.NULL_PLACE_TYPE,
- THUAI6.PlaceType.Wall: MessageType.WALL,
- THUAI6.PlaceType.Land: MessageType.LAND,
- THUAI6.PlaceType.Grass: MessageType.GRASS,
- THUAI6.PlaceType.ClassRoom: MessageType.CLASSROOM,
- THUAI6.PlaceType.BlackRoom: MessageType.BLACKROOM,
- THUAI6.PlaceType.Gate: MessageType.GATE,
- THUAI6.PlaceType.HiddenGate: MessageType.HIDDEN_GATE}
-
- shapeTypeDict: Final[dict] = {
- THUAI6.ShapeType.NullShapeType: MessageType.NULL_SHAPE_TYPE,
- THUAI6.ShapeType.Square: MessageType.SQUARE,
- THUAI6.ShapeType.Circle: MessageType.CIRCLE}
-
- propTypeDict: Final[dict] = {
- THUAI6.PropType.NullPropType: MessageType.NULL_PROP_TYPE,
- THUAI6.PropType.PropType1: MessageType.PTYPE1, }
-
- playerTypeDict: Final[dict] = {
- THUAI6.PlayerType.NullPlayerType: MessageType.NULL_PLAYER_TYPE,
- THUAI6.PlayerType.StudentPlayer: MessageType.STUDENT_PLAYER,
- THUAI6.PlayerType.TrickerPlayer: MessageType.TRICKER_PLAYER}
-
- studentTypeDict: Final[dict] = {
- THUAI6.StudentType.NullStudentType: MessageType.NULL_STUDENT_TYPE,
- THUAI6.StudentType.StudentType1: MessageType.STUDENTTYPE1, }
-
- trickerTypeDict: Final[dict] = {
- THUAI6.TrickerType.NullTrickerType: MessageType.NULL_TRICKER_TYPE,
- THUAI6.TrickerType.TrickerType1: MessageType.TRICKERTYPE1, }
-
- studentBuffTypeDict: Final[dict] = {
- THUAI6.StudentBuffType.NullStudentBuffType: MessageType.NULL_SBUFF_TYPE,
- THUAI6.StudentBuffType.StudentBuffType1: MessageType.SBUFFTYPE1, }
-
- trickerBuffTypeDict: Final[dict] = {
- THUAI6.TrickerBuffType.NullTrickerBuffType: MessageType.NULL_TBUFF_TYPE,
- THUAI6.TrickerBuffType.TrickerBuffType1: MessageType.TBUFFTYPE1, }
-
- studentStateDict: Final[dict] = {
- THUAI6.StudentState.NullStudentState: MessageType.NULL_STATUS,
- THUAI6.StudentState.Idle: MessageType.IDLE,
- THUAI6.StudentState.Learning: MessageType.LEARNING,
- THUAI6.StudentState.Fail: MessageType.FAIL,
- THUAI6.StudentState.Emotional: MessageType.EMOTIONAL,
- THUAI6.StudentState.Quit: MessageType.QUIT,
- THUAI6.StudentState.Graduated: MessageType.GRADUATED, }
-
- gameStateDict: Final[dict] = {
- THUAI6.GameState.NullGameState: MessageType.NULL_GAME_STATE,
- THUAI6.GameState.GameStart: MessageType.GAME_START,
- THUAI6.GameState.GameRunning: MessageType.GAME_RUNNING,
- THUAI6.GameState.GameEnd: MessageType.GAME_END}
-
- # 用于将THUAI6的对象转为Proto的对象
- @staticmethod
- def THUAI62ProtobufPlayer(playerID: int, playerType: THUAI6.PlayerType, studentType: THUAI6.StudentType, trickerType: THUAI6.TrickerType) -> Message2Server.PlayerMsg:
- return Message2Server.PlayerMsg(player_id=playerID, player_type=THUAI62Proto.playerTypeDict[playerType], student_type=THUAI62Proto.studentTypeDict[studentType], tricker_type=THUAI62Proto.trickerTypeDict[trickerType])
-
- @staticmethod
- def THUAI62ProtobufID(playerID: int) -> Message2Server.IDMsg:
- return Message2Server.IDMsg(player_id=playerID)
-
- @staticmethod
- def THUAI62ProtobufMove(time: int, angle: float, id: int) -> Message2Server.MoveMsg:
- return Message2Server.MoveMsg(player_id=id, angle=angle, time_in_milliseconds=time)
-
- @staticmethod
- def THUAI62ProtobufPick(prop: THUAI6.PropType, id: int) -> Message2Server.PickMsg:
- return Message2Server.PickMsg(player_id=id, prop_type=THUAI62Proto.propTypeDict[prop])
-
- @staticmethod
- def THUAI62ProtobufSend(msg: str, toID: int, id: int) -> Message2Server.SendMsg:
- return Message2Server.SendMsg(player_id=id, to_player_id=toID, message=msg)
-
- @staticmethod
- def THUAI62ProtobufTrick(angle: float, id: int) -> Message2Server.TrickMsg:
- return Message2Server.TrickMsg(player_id=id, angle=angle)
|