38
elif event.type == pygame.MOUSEBUTTONDOWN:
#get the mouse clicking coordinates
mouse_x, mouse_y = event.pos
#check if clicking is on the same position as the npc
for npc_key, npc in npcs.items():
npc_screen_x = (npc["pos"][0] - (player_pos[0] -
field_of_view_x // 2)) * tile_size
npc_screen_y = (npc["pos"][1] - (player_pos[1] –
field_of_view_y // 2)) * tile_size
if (npc_screen_x <= mouse_x <= npc_screen_x +
tile_size) and (npc_screen_y <= mouse_y <=
npc_screen_y + tile_size):
#activate and deactivate chat on npc clicking
chat_active = not chat_active
#set the current npcs information
current_npc_name = npc["name"]
knowledge_topic = npc["topic"]
set_knowledge_topic(knowledge_topic)
print("The knowledge topic:", knowledge_topic)
if not chat_active:
restart_chat()
Μόλις ενεργοποιηθεί αυτή η επιφάνεια το level.py λαμβάνει όλα τα δεδομένα από το
chat.py. Έτσι ο παίκτης έχει πλέον τη δυνατότητα να αλληλεπιδράσει με τους NPCs και να
συνομιλήσει μαζί του σχετικά με τα αντικείμενα γνώσης τους.
if chat_active:
active = True
chat_surface.fill((0, 0, 0, 0))
input_text,
active,
run_chat.scroll_messages,
run_chat.scroll_input,
done
=
run_chat(chat_surface, events, input_text, active, done, current_npc_name, knowledge_topic)
screen.blit(chat_surface, (screen_width - 400, screen_height - 600))
# print("Received knowledge topic:", knowledge_topic)
else:
restart_chat()
Κίνηση Παίκτη
Ο παίκτης μπορεί να κινείται ελεύθερα μέσα στα όρια του επιπέδου, εκτός αν η
συνομιλία είναι ενεργή. Όταν η συνομιλία είναι ενεργοποιημένη, η κίνηση του παίκτη παγώνει,
ώστε να διατηρηθεί η στην αλληλεπίδραση.
if not chat_active:
if keys[pygame.K_UP] and player_pos[1] > 0:
player_pos[1] -= 1
if keys[pygame.K_DOWN] and player_pos[1] < map_size - 1:
player_pos[1] += 1
if keys[pygame.K_LEFT] and player_pos[0] > 0:
player_pos[0] -= 1
if keys[pygame.K_RIGHT] and player_pos[0] < map_size - 1:
player_pos[0] += 1