Untitled

 avatar
unknown
plain_text
a year ago
4.1 kB
7
Indexable
import paho.mqtt.client as paho
import bpy
import json
import random
import threading 

global RobotMove, playerMove 
 
client_id = f'python-mqtt-{random.randint(0, 1000)}'
client = paho.Client(paho.CallbackAPIVersion.VERSION1,client_id)

# Define the MQTT connection
def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe("PLCupdates")

client.on_connect = on_connect

# Connect to MQTT broker
client.connect("localhost", 1883, 60)


positions = {
        'A1': 'WhiteRook1', 'B1': 'WhiteKnight1', 'C1': 'WhiteBishop1', 'D1': 'WhiteQueen',
        'E1': 'WhiteKing', 'F1': 'WhiteBishop2', 'G1': 'WhiteKnight2', 'H1': 'WhiteRook2',
        'A2': 'WhitePawn1', 'B2': 'WhitePawn2', 'C2': 'WhitePawn3', 'D2': 'WhitePawn4',
        'E2': 'WhitePawn5', 'F2': 'WhitePawn6', 'G2': 'WhitePawn7', 'H2': 'WhitePawn8',
        'A7': 'BlackPawn1', 'B7': 'BlackPawn2', 'C7': 'BlackPawn3', 'D7': 'BlackPawn4',
        'E7': 'BlackPawn5', 'F7': 'BlackPawn6', 'G7': 'BlackPawn7', 'H7': 'BlackPawn8',
        'A8': 'BlackRook1', 'B8': 'BlackKnight1', 'C8': 'BlackBishop1', 'D8': 'BlackQueen',
        'E8': 'BlackKing', 'F8': 'BlackBishop2', 'G8': 'BlackKnight2', 'H8': 'BlackRook2',
} 
for square_name, piece_name in positions.items():
    piece = bpy.data.objects.get(piece_name)
    square = bpy.data.objects.get(square_name)
    if piece and square:
        piece.location.x = square.location.x - 0.01
        piece.location.y = square.location.y + 0.05 


def movement(startPos, endPos):
    #extract the name of the piece on the corresponding start square and end square
     start_piece_name = positions.get(startPos)
     end_piece_name = positions.get(endPos)
     
     #handles captures
     if end_piece_name:
         end_piece = bpy.data.objects.get(end_piece_name)
         end_piece.location.x = 0
         
     if len(endPos) == 2:
         #sets a variable that accesses the object in the layout
         start_piece = bpy.data.objects.get(start_piece_name)
         
         # sets a variable that access the square object where it will be moved
         end_square = bpy.data.objects.get(endPos)   
         
         if start_piece and end_square:
             # Lift the piece up
            start_piece.location.z += 1.0
            
            # Move to the new position while lifted
            start_piece.location.x = end_square.location.x
            start_piece.location.y = end_square.location.y
            
            # Place the piece down
            start_piece.location.z -= 1.0
            
            
            #Update the position dictionary
            positions[endPos] = start_piece_name
            del positions[startPos]


for piece_name in positions.values():
    piece = bpy.data.objects.get(piece_name)
  
# Define the MQTT message callback
def on_message(client, userdata, message):
    try:
        global robotMove, playerMove
         # Decode message payload from binary to a string
        decoded_message = message.payload.decode('utf-8')
        print(decoded_message)
        data = json.loads(decoded_message)

        # accessing variables 
        robotMove = data.get('robotMove')
        playerMove = data.get('playerMove')
        
        #Extracting to and from positions for robotMove
        if len(robotMove) == 4: 
            startPos = robotMove.upper()[:2] 
            endPos = robotMove.upper()[2:]
            movement(startPos, endPos) 
             
        #Extracting to and from positions for playerMove     
        if len(playerMove) == 4:
            startPos = playerMove.upper()[:2]
            endPos = playerMove.upper()[2:]
            movement(startPos, endPos)
    except json.JSONDecodeError as e:
        print("Error decoding JSON: " + str(e))
        
client.on_message = on_message

def run_mqtt_client():
  client.loop_forever()

mqtt_thread = threading.Thread(target=run_mqtt_client)
mqtt_thread.daemon = True 
mqtt_thread.start()
Editor is loading...
Leave a Comment