-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHelm.py
More file actions
131 lines (96 loc) · 4.13 KB
/
Helm.py
File metadata and controls
131 lines (96 loc) · 4.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Local Imports
import ThreadedClient
import UserInterface
import messages
import Util
import pickle
import pyglet
from pyglet.gl import *
glEnable(GL_TEXTURE_2D)
glEnable(GL_DEPTH_TEST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
hostname = input("Enter Server IP: ")
window = pyglet.window.Window(1280, 720, resizable=True)
helm_ui = UserInterface.PyTrekUserInterface(window)
def onclick_mapBtn(x, y):
msg = pickle.dumps(messages.ViewChangeMessage(1))
helm_client.sendMessage(msg)
def onclick_visualBtn(x, y):
msg = pickle.dumps(messages.ViewChangeMessage(0))
helm_client.sendMessage(msg)
# UI Components for the helm
# Navigation Element
shipImg = pyglet.resource.image("resources/ship_fighter.png")
shipImg.anchor_x = shipImg.width/2
shipImg.anchor_y = shipImg.height/2
pt_ui_initialZoom = 2
pt_ui_navElement = UserInterface.UINavElement("navigation", 20, 15, 70, 70, True, shipImg, pt_ui_initialZoom)
# Buttons
pt_ui_mapBtn = UserInterface.UIButton("mapBtn", "Map", 100-16, 100-9)
pt_ui_visBtn = UserInterface.UIButton("mapBtn", "Visual", 100-32, 100-9)
pt_ui_engBtn = UserInterface.UIButton("mapBtn", "Engineering", 100-48, 100-9)
pt_ui_mapBtn.setClickHandler(onclick_mapBtn)
pt_ui_visBtn.setClickHandler(onclick_visualBtn)
# Sliders
pt_ui_sliderGroupImage = pyglet.resource.image("resources/helm_UI/background.png")
pt_ui_sliderGroup = UserInterface.UIImageElement("sliderGroup", 0, 0, 20, 50, pt_ui_sliderGroupImage)
pt_ui_warpSlider = UserInterface.UISlider("warpSlider", 3.3, 182, 5, 0, 4, True)
pt_ui_impulseSlider = UserInterface.UISlider("impulseSlider", 12.8, 240, 4, 0, 10, True)
pt_ui_zoomSlider = UserInterface.UISlider("zoomSlider", 92, 0, 3, pt_ui_initialZoom, 50, False)
# Labels for sliders
pt_ui_warpLabel = UserInterface.UILabel("warpLabel", "0", 5.4, 7.4, 16)
pt_ui_impulseLabel = UserInterface.UILabel("impulseLabel", "0", 15, 10, 8)
pt_ui_impulseLabel.setSuffix("%")
# Handlers for various things, sending messages to the big server
def sendHeadingChange(newHeading):
msg = pickle.dumps(messages.HeadingChangedMessage(newHeading))
helm_client.sendMessage(msg)
def sendSpeedChange():
msg = pickle.dumps(messages.SpeedChangedMessage(pt_ui_warpSlider.getCurrentValue(), pt_ui_impulseSlider.getCurrentValue()))
pt_ui_navElement.setSpeed(Util.getSpeedFromWarpImpulse(pt_ui_warpSlider.getCurrentValue(), pt_ui_impulseSlider.getCurrentValue()))
helm_client.sendMessage(msg)
def onslidechange_warpSlider(val):
pt_ui_warpLabel.setText(str(val))
sendSpeedChange()
def onslidechange_impulseSlider(val):
pt_ui_impulseLabel.setText(str(val*10))
sendSpeedChange()
pt_ui_navElement.setHeadingChangedHandler(sendHeadingChange)
pt_ui_warpSlider.setValueChangeHandler(onslidechange_warpSlider)
pt_ui_impulseSlider.setValueChangeHandler(onslidechange_impulseSlider)
def onslidechange_zoomSlider(val):
pt_ui_navElement.setZoomLevel(val)
pt_ui_zoomSlider.setValueChangeHandler(onslidechange_zoomSlider)
# Buttons
helm_ui.addComponent(pt_ui_mapBtn)
helm_ui.addComponent(pt_ui_visBtn)
helm_ui.addComponent(pt_ui_engBtn)
# Sliders
helm_ui.addComponent(pt_ui_sliderGroup)
helm_ui.addComponent(pt_ui_warpSlider)
helm_ui.addComponent(pt_ui_impulseSlider)
helm_ui.addComponent(pt_ui_zoomSlider)
helm_ui.addComponent(pt_ui_warpLabel)
helm_ui.addComponent(pt_ui_impulseLabel)
# Navigation Element
helm_ui.addNavElement(pt_ui_navElement)
# Pyglet code, send messages to server somewhere in here
# Client (helm) has recieved a message from the server
def messageRecieved(msg):
message = pickle.loads(msg)
print(message)
if isinstance(message, messages.MapMessage):
pt_ui_navElement.setMap(message.map)
helm_client.sendMessage(pickle.dumps(messages.Message())) # Send a blank message as acknowledgement
print("Map updated and loaded.")
helm_client = ThreadedClient.PyTrekClient(hostname)
helm_client.setMessageRecievedCallback(messageRecieved)
helm_client.start()
@window.event
def on_draw():
pyglet.gl.glClear(pyglet.gl.GL_COLOR_BUFFER_BIT)
pyglet.gl.glClearColor(0.0, 0.1, 0.3, 1.0)
helm_ui.render()
pyglet.app.run()
if hostname:
helm_client.close()