1 from cocos import euclid, collision_model
2 from cocos.director import director
3 from cocos.actions import Show, MoveTo, Hide
4 from cocos.layer.base_layers import Layer
5 from cocos.sprite import Sprite
6 from cocos.text import Label
7 from constants import ACTION_BUTTON_WIDTH, MENU_BUTTON_Z, ACTIONMENU_X_OFFSET, \
8 ACTIONMENU_Y_OFFSET, TIMER_X_OFFSET, TIMER_Y_OFFSET, TIMER_SCALE, WINDOW_WIDTH, \
9 WINDOW_HEIGHT, MINMAP_CIRCLE_Z, STATUS_BAR_HEIGHT, SOUND, MUSIC
10 from imageLayer import ImageLayer
11 from maps import MiniMap, MiniMapCircle
12 from constants import *
13 import objects
14 from utils import aabb_to_aa_rect
15 import os
16 import pyglet
17 from music import theme_player
18 import pyglet.window
19 import constants
20 import cocos.rect as rect
21 from cocos.menu import CENTER, Menu, MenuItem, EntryMenuItem
22 from pyglet.resource import media, image
23 from cocos.actions.interval_actions import ScaleTo
24
25
26
27 pyglet.font.add_directory('fonts')
28
29
31 is_event_handler = True
32
40
42 super(StatusMenu,self).on_enter()
43 self.add(Sprite(os.path.join("images","background.png"),scale=2,position=(500,30)),z=-1)
44
45
46 text1 = Label(text="# Units: ",font_name='Rabiohead',anchor_y='center',position=(20,STATUS_BAR_HEIGHT/2),font_size=27,color=(255,255,255,255),multiline=False)
47 self.add(text1)
48 text2 = Label(text="# Idle CPUs: ",font_name='Rabiohead',anchor_y='center',position=(195,STATUS_BAR_HEIGHT/2),font_size=27,color=(255,255,255,255),multiline=False)
49 self.add(text2)
50
51 self.selectedUnitText = ""
52
53 self.selectedUnitLabel = Label(text="Selected Unit: " + self.selectedUnitText,font_name='Rabiohead',anchor_y='center',position=(440,STATUS_BAR_HEIGHT/2),font_size=24,color=(255,255,255,255),multiline=False)
54 self.add(self.selectedUnitLabel)
55
56
57
58
59
60
61
62
63
64
65 self.menuButton = MenuButton(960,10)
66 self.add(self.menuButton,z=1)
67 self.cm.add(self.menuButton)
68 self.musicButton = ToggleMusicButton(885,18)
69 self.add(self.musicButton,z=1)
70 self.cm.add(self.musicButton)
71 self.soundButton = ToggleSoundButton(820,15)
72 self.add(self.soundButton,z=1)
73 self.cm.add(self.soundButton)
74
75 self.oldunitCount = len(self.controller.player.units)
76 self.oldCpuCount = len(self.controller.player.idleCPUs)
77 self.unitCountLabel = Label(text=str(self.oldunitCount),font_name='Rabiohead',anchor_y='center',position=(130,STATUS_BAR_HEIGHT/2),font_size=27,color=(255,255,255,255),multiline=False)
78 self.cpuCountLabel = Label(text=str(self.oldCpuCount),font_name='Rabiohead',anchor_y='center',position=(390,STATUS_BAR_HEIGHT/2),font_size=27,color=(255,255,255,255),multiline=False)
79 self.add(self.unitCountLabel)
80 self.add(self.cpuCountLabel)
81 self.schedule(self.step)
82 self.soundX = Label(text="X",font_name='Rabiohead',anchor_y='center',position=(795,37),font_size=50,bold=True,color=(255,255,255,255),multiline=False)
83 self.musicX = Label(text="X",font_name='Rabiohead',anchor_y='center',position=(867,37),font_size=50,bold=True,color=(255,255,255,255),multiline=False)
84 if self.settingsMenu.settingsMenuOn:
85 self.add(settingsMenu)
86
109
111 from models import Server
112 if len(self.controller.player.units) != self.oldunitCount:
113 self.oldunitCount = len(self.controller.player.units)
114 self.remove(self.unitCountLabel)
115 self.unitCountLabel = Label(text=str(self.oldunitCount),font_name='Rabiohead',anchor_y='center',position=(130,STATUS_BAR_HEIGHT/2),font_size=27,color=(255,255,255,255),multiline=False)
116 self.add(self.unitCountLabel)
117
118 if len(self.controller.player.idleCPUs) != self.oldCpuCount:
119 self.oldCpuCount = len(self.controller.player.idleCPUs)
120 self.remove(self.cpuCountLabel)
121 self.cpuCountLabel = Label(text=str(self.oldCpuCount),font_name='Rabiohead',anchor_y='center',position=(390,STATUS_BAR_HEIGHT/2),font_size=27,color=(255,255,255,255),multiline=False)
122 self.add(self.cpuCountLabel)
123
124 if len(self.controller.selectedUnits) > 0:
125 self.remove(self.selectedUnitLabel)
126 self.selectedUnitText = str(self.controller.selectedUnits[0].__class__.__name__)
127 self.selectedUnitLabel = Label(text="Selected Unit: " + self.selectedUnitText,font_name='Rabiohead',anchor_y='center',position=(440,STATUS_BAR_HEIGHT/2),font_size=24,color=(255,255,255,255),multiline=False)
128 self.add(self.selectedUnitLabel)
129 self.selectedUnitText = ""
130 elif self.selectedUnitText == "":
131 self.remove(self.selectedUnitLabel)
132 self.selectedUnitLabel = Label(text="Selected Unit: " + self.selectedUnitText,font_name='Rabiohead',anchor_y='center',position=(440,STATUS_BAR_HEIGHT/2),font_size=24,color=(255,255,255,255),multiline=False)
133 self.selectedUnitText = "0"
134 self.add(self.selectedUnitLabel)
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
156 super(SettingsMenuSprite, self).__init__(os.path.join("images",
157 "maps", "minimap_bg.png"))
158 self.position = euclid.Vector2(x,y)
159 self.opacity = 255
160 self.scale = 0.6
161 self.cshape = aabb_to_aa_rect(self.get_AABB())
162
163
165 menu.font_title['font_name'] = 'Rabiohead'
166 menu.font_title['font_size'] = 50
167 menu.font_title['color'] = (0, 0, 0, 255)
168
169 menu.font_item['font_name'] = 'Rabiohead'
170 menu.font_item['font_size'] = 18
171 menu.font_item['color'] = (0, 0, 0, 255)
172
173 menu.font_item_selected['font_name'] = 'Rabiohead'
174 menu.font_item_selected['font_size'] = 18
175 menu.font_item_selected['color'] = (0, 0, 0, 255)
176
177 menu.menu_valign = CENTER
178 menu.menu_halign = CENTER
179
181 return ScaleTo(1.2, duration=0.2)
182
183
185 return ScaleTo(1.0, duration=0.2)
186
188 activate_sound = media(
189 os.path.join('sounds', "Menu.wav"), streaming=False)
190 select_sound = media(
191 os.path.join('sounds', "Menu.wav"), streaming=False)
192
210
215
217 director.window.set_fullscreen(not director.window.fullscreen)
218
219
222
223
225 is_event_handler = True
226
233
234
235
236
238
239 if self.settingsMenuOn:
240 self.remove(self.settingsMenu)
241 self.remove(self.settingsMenuSprite)
242
243
244
245
246
247
248
249
250
251
252 else:
253 self.add(self.settingsMenu,z=25)
254
255 self.add(self.settingsMenuSprite,z=20)
256
257
258
259
260
261
262
263
264 self.settingsMenuOn = not self.settingsMenuOn
265
269
287
382
383
384
385
387
389 from models import Troop
390 if issubclass(type(unitParent), Troop):
391 image = os.path.join("images", "menus", "unit_action_menu.png")
392
393
394
395
396 else:
397 image = os.path.join("images", "menus", "building_action_menu.png")
398 super(ActionMenu, self).__init__(image)
399 self.position = euclid.Vector2(x, y)
400 self.actionNames = actions
401 self.cshape = aabb_to_aa_rect(self.get_AABB())
402 self.actionList = []
403 self.unitParent = unitParent
404
405 if issubclass(type(unitParent), Troop):
406 self.slots = [euclid.Vector2(x - 43, y),
407 euclid.Vector2(x + 0, y),
408 euclid.Vector2(x + 43, y)]
409 else:
410 self.slots = [euclid.Vector2(x + 50, y - 0),
411 euclid.Vector2(x - 50, y - 0),
412 euclid.Vector2(x - 0, y - 50),
413 euclid.Vector2(x - 0, y + 50),
414 euclid.Vector2(x + 35.11, y - 35.11),
415 euclid.Vector2(x + 35.11, y + 35.11),
416 euclid.Vector2(x - 35.11, y - 35.11),
417 euclid.Vector2(x - 35.11, y + 35.11)]
418
419
420 self.make_action_buttons()
421
430
434
438
439
441 - def __init__(self, sec, pos, opacity=1):
449
451 x, y = self.position
452 y = y + 40
453 theLocation = euclid.Vector2(x, y)
454 if action == None:
455 moveAction = Show()
456 else:
457 moveAction = action + Show()
458
459 moveAction += MoveTo(theLocation, self.duration / 4)
460 x = x + 40
461 theLocation = euclid.Vector2(x, y)
462 moveAction += MoveTo(theLocation, self.duration / 4)
463 y = y - 40
464 theLocation = euclid.Vector2(x, y)
465 moveAction += MoveTo(theLocation, self.duration / 4)
466 x = x - 40
467 theLocation = euclid.Vector2(x, y)
468 moveAction += MoveTo(theLocation, self.duration / 4)
469 moveAction += Hide()
470
471 return moveAction
472
483
496
508
510 - def __init__(self, levelNumber, levelFiveCounter = 0):
511
512 notePosition = {
513 "2":euclid.Vector2(320,1080),
514 "3":euclid.Vector2(350,1700),
515 "4":euclid.Vector2(400,1270),
516 "5":euclid.Vector2(10,1000)
517 }[levelNumber]
518
519 self.levelFiveCounter = levelFiveCounter
520
521 if levelNumber == "5":
522 self.levelFiveCounter += 1
523 else:
524 self.levelFiveCounter = ""
525
526
527 super(StickyNote, self).__init__(os.path.join("images", "tutorial", "level" + levelNumber + "_instruction" + str(self.levelFiveCounter) + ".png"), position = notePosition)
528
538
539
540
552
553
565
566
577
578
579
589
591 - def __init__(self, parent_layer, message, has_image_background, x, y, width, height, font):
592 self.parent_layer = parent_layer
593 self.background_layer = ImageLayer(os.path.join('images','tutorial','background.png'))
594 self.message = message
595 self.has_image_background = has_image_background
596 self.message_label = Label(
597 self.message, font_name='Rabiohead', font_size=font,
598 width=width, height=height,
599 color=(0, 0, 0, 255),
600 anchor_x='center', anchor_y='center', multiline = True)
601
602 if(self.has_image_background == True):
603
604 self.background_layer.postition = 300, 500
605 self.parent_layer.add(self.background_layer)
606 self.message_label.position = 50, 50
607 self.background_layer.add(self.message_label)
608 else:
609 self.message_label.position = x, y
610 self.parent_layer.add(self.message_label)
611
613 if(self.has_image_background == True):
614 self.parent_layer.kill()
615 else:
616 self.message_label.kill()
617
618
620 - def __init__(self, parent_layer, message, image):
621 super(MessageAlert, self).__init__()
622 self.message_layer = ImageLayer(image)
623 self.message_layer_height = 400
624 self.message_layer_width = 300
625 self.parent_layer = parent_layer
626 self.message = message
627 self.message_label = Label(
628 self.message, font_name='Rabiohead', font_size=26,
629 x=self.message_layer_width / 2, y=self.message_layer_height / 2,
630 width=self.message_layer_width - 100, height=self.message_layer_height - 100,
631 color=(0, 0, 0, 255),
632 anchor_x='center', anchor_y='center', multiline = True)
633
634
635
636 self.message_label.position = 30, -240
637 self.message_layer.add(self.message_label)
638 self.message_layer.position = 0, 0
639 self.parent_layer.add(self.message_layer)
640
642 self.message_layer.kill()
643
644
646 is_event_handler = True
647
648 - def __init__(self, gameMap, scroller,player):
649 super(InfoLayer, self).__init__()
650 self.map = gameMap
651 self.scroller = scroller
652 self.cm = collision_model.CollisionManagerBruteForce(
653 )
654 self.miniMapToggled = False
655 self.player = player
656
657 self.position = (3 * WINDOW_WIDTH / 4.0 + 90, WINDOW_HEIGHT / 4.0 - 20)
658 self.visibleCircles = []
659
660 self.miniMap = MiniMap(
661 self.map.AS, self.map.w, self.map.h, self.map.edges, self.player)
662 self.map.minimap = self.miniMap
663
665
666 if self.miniMapToggled:
667 self.remove(self.miniMap)
668 for circle in self.visibleCircles:
669 self.remove(circle)
670 self.cm.remove_tricky(circle)
671 self.visibleCircles = []
672
673
674
675
676
677 else:
678 self.add(self.miniMap)
679 for vid in self.miniMap.miniMapCircles:
680 curVertex = self.map.vertices[vid]
681 if curVertex.visibilityState != 0:
682 circle = self.miniMap.miniMapCircles[vid]
683 self.add(circle, z=MINMAP_CIRCLE_Z)
684 self.visibleCircles.append(circle)
685 self.cm.add(circle)
686
687
688
689
690
691
692
693 self.miniMapToggled = not self.miniMapToggled
694
699
701
702
703 if self.miniMapToggled:
704 clicked_objects = self.cm.objs_touching_point(
705 x - self.position[0], y - self.position[1])
706 for item in clicked_objects:
707 if type(item) == MiniMapCircle:
708 self.scroller.set_focus(
709 item.asPosition[0] - WINDOW_WIDTH / 2.0,
710 item.asPosition[1] - WINDOW_HEIGHT / 2.0)
711
712
713 keyboard = key.KeyStateHandler()
714
716 is_event_handler = True
717
719 super(HotkeysLayer, self).__init__()
720 self.scroller = scroller
721 self.cm = collision_model.CollisionManagerBruteForce()
722 self.hotkeysMenuOn = False
723 self.hotkeys = hotkeys
724
725 self.hotkeysList = []
726 self.keyNumList = []
727
729
730
731 if self.hotkeysMenuOn:
732 for key in self.keyNumList:
733 self.remove(key)
734 for key in self.hotkeysList:
735 self.remove(key)
736 self.cm.remove_tricky(key)
737 self.keyNumList = []
738 self.hotkeysList = []
739 x = 10
740 y = 600
741 for hotkey in self.hotkeys:
742 if self.hotkeys[hotkey]:
743 y -= 50
744 keyNum = hotkey - 48
745 newKey = Label(text="%s:" % keyNum,font_name='Rabiohead',anchor_y='center',position=(x,y),font_size=14,color=(0,0,0,255),multiline=False)
746 x+=40
747 newLabel = HotkeyLabel((x,y),self.hotkeys[hotkey])
748 self.hotkeysList.append(newLabel)
749 self.cm.add(newLabel)
750 self.keyNumList.append(newKey)
751 self.add(newLabel,z=25)
752 self.add(newKey,z=25)
753 x -= 40
754
755
757
758
759 if self.hotkeysMenuOn:
760
761
762
763 for key in self.hotkeysList:
764 self.remove(key)
765 self.cm.remove_tricky(key)
766 for num in self.keyNumList:
767 self.remove(num)
768 self.hotkeysList = []
769 self.keyNumList = []
770
771 else:
772
773
774
775 x = 10
776 y = 600
777 for hotkey in self.hotkeys:
778 if self.hotkeys[hotkey]:
779 y -= 50
780 keyNum = hotkey - 48
781 newKey = Label(text="Key: %s" % keyNum,font_name='Rabiohead',anchor_y='center',position=(x,y),font_size=12,color=(0,0,0,255),multiline=False)
782 x+=70
783 newLabel = HotkeyLabel((x,y),self.hotkeys[hotkey])
784 self.hotkeysList.append(newLabel)
785 self.cm.add(newLabel)
786 self.keyNumList.append(newKey)
787 self.add(newLabel,z=25)
788 self.add(newKey,z=25)
789 x -= 70
790
791 self.hotkeysMenuOn = not self.hotkeysMenuOn
792
794 if key == pyglet.window.key.SLASH and modifiers == pyglet.window.key.MOD_SHIFT:
795 self.toggle_hotkeys_menu()
796
798
799
800 if self.hotkeysMenuOn:
801 clicked_objects = self.cm.objs_touching_point(x, y)
802 for item in clicked_objects:
803 if type(item) == HotkeyLabel:
804 self.scroller.set_focus(
805 item.hotkeyPos[0] - WINDOW_WIDTH / 2.0,
806 item.hotkeyPos[1] - WINDOW_HEIGHT / 2.0)
807
808
811 super(HotkeysMenu, self).__init__(os.path.join("images",
812 "maps", "minimap_bg.png"))
813 self.hotkeys = hotkeys
814 self.position = euclid.Vector2(float(x), float(y))
815 self.opacity = 255
816 self.scale = 0.6
817 self.cshape = aabb_to_aa_rect(self.get_AABB())
818
821
822
825 super(HotkeyLabel, self).__init__(hotkey.imageOutline)
826 self.hotkeyPos = hotkey.position
827 self.scale = 0.7
828 self.position = euclid.Vector2(float(position[0]), float(position[1]))
829 self.cshape = collision_model.CircleShape(
830 euclid.Vector2(x=self.position[0], y=self.position[1]), 14)
831
832
834 - def __init__(self, position, asPosition, color, scale, building=False):
835 super(MiniMapCircle, self).__init__(os.path.join("images",
836 "maps", "minimap_circle.png"))
837 self.color = color
838 self.scale = scale
839 self.position = euclid.Vector2(float(position[0]), float(position[1]))
840 self.asPosition = asPosition
841
842 self.cshape = collision_model.CircleShape(
843 euclid.Vector2(x=self.position[0], y=self.position[1]), 14)
844 if building:
845 self.building = Sprite(os.path.join(
846 'images', 'maps', 'minimap_building.png'), position=euclid.Vector2(float(position[0]), float(position[1])))
847
848