class TeacherGuestFarmState(GuestFarmState): def __init__(self, client, input, gui, user): super().__init__(client, input, gui, user) def init(self): super().init() self.farm = Farm() self.owner = User(self.client, "") # CONTROL WINDOW self.ctrl_window = Window(sf.Vector2(260, 0), 256, 128, sf.Color(50, 50, 120, 255), self.input) self.add_button = Button(sf.Vector2(16, 0), "button", self.input, "add") self.set_button = Button(sf.Vector2(144, 0), "button", self.input, "set") self.points_textbox = Textbox(sf.Vector2(0, 64), 256, "amount of points", self.input) self.ctrl_window.add_child(self.add_button) self.ctrl_window.add_child(self.set_button) self.ctrl_window.add_child(self.points_textbox) self.gui_manager.add(self.ctrl_window) def handle_packet(self, packet): packet_id = packet.read() if packet_id == const.PacketTypes.LOAD_FARM: # when you first get into the state self.owner.deserialize(packet) self.farm.deserialize(packet) self.textbox.default_text = self.owner.user_name self.textbox.text.string = self.owner.user_name def render(self, target): super().render(target) def update(self, dt): super().update(dt) def on_mouse_button_pressed(self, mouse_button, x, y): super().on_mouse_button_pressed(mouse_button, x, y) if mouse_button == sf.Mouse.LEFT: if self.gui_manager.point_over_element(self.add_button, x, y) is True: packet = net.Packet() packet.write(const.PacketTypes.ADD_POINTS) packet.write(self.owner.user_name) # name of person packet.write(self.points_textbox.last_text) self.client.send(packet) elif self.gui_manager.point_over_element(self.set_button, x, y) is True: packet = net.Packet() packet.write(const.PacketTypes.SET_POINTS) packet.write(self.owner.user_name) # name of person packet.write(self.points_textbox.last_text) self.client.send(packet)
class GuestFarmState(ClientState): def __init__(self, client, input, gui, user): super().__init__(client, input, gui, user) def init(self): super().init() self.farm = Farm() self.owner = User(self.client, "") # CONTROL WINDOW self.load_button = Button(sf.Vector2(16, 0), "button", self.input, "load") self.home_button = Button(sf.Vector2(144, 0), "button", self.input, "home") self.textbox = Textbox(sf.Vector2(0, 64), 256, self.owner.user_name, self.input) self.window = Window(sf.Vector2(0, 0), 256, 128, sf.Color(50, 50, 120, 255), self.input) self.window.add_child(self.load_button) self.window.add_child(self.home_button) self.window.add_child(self.textbox) self.gui_manager.add(self.window) def handle_packet(self, packet): packet_id = packet.read() if packet_id == const.PacketTypes.LOAD_FARM: # when you first get into the state self.owner.deserialize(packet) self.farm.deserialize(packet) self.textbox.default_text = self.owner.user_name self.textbox.text.string = self.owner.user_name def render(self, target): super().render(target) self.farm.draw(target) def update(self, dt): super().update(dt) def on_mouse_button_pressed(self, mouse_button, x, y): if mouse_button == sf.Mouse.LEFT: if self.gui_manager.point_over_element(self.home_button, x, y) is True: self.user.switch_state(const.GameStates.HOME_FARM) elif self.gui_manager.point_over_element(self.load_button, x, y) is True: if self.textbox.last_text != self.user.user_name: print(self.textbox.last_text, self.user.user_name) packet = net.Packet() packet.write(const.PacketTypes.SWITCH_FARM) packet.write(self.textbox.last_text) self.client.send(packet)
def init(self): super().init() packet = net.Packet() packet.write(const.PacketTypes.GET_USER) self.client.send(packet) self.view = sf.View() self.view.reset(sf.Rectangle((0, 0), (const.WINDOW_WIDTH, const.WINDOW_HEIGHT))) self.current_item = 0 # current item in inventory list self.inventory_drawer = [] for item in self.user.inventory: self.inventory_drawer.append(item) # so you get a basic list of each item, accessed through self.current_item # CONTROL WINDOW self.load_button = Button(sf.Vector2(16, 0), "button", self.input, "load") self.save_button = Button(sf.Vector2(144, 0), "button", self.input, "save") self.shop_button = Button(sf.Vector2(16, 32), "button", self.input, "shop") self.stats_button = Button(sf.Vector2(144, 32), "button", self.input, "stats") self.textbox = Textbox(sf.Vector2(0, 64), 256, "lucas", self.input) self.window = Window(sf.Vector2(0, 0), 256, 128, sf.Color(50, 50, 120, 255), self.input) self.window.add_child(self.load_button) self.window.add_child(self.save_button) self.window.add_child(self.shop_button) self.window.add_child(self.stats_button) self.window.add_child(self.textbox) self.gui_manager.add(self.window)
class LoginState(ClientState): def __init__(self, client, input, gui, user): super().__init__(client, input, gui, user) def init(self): super().init() self.first_textbox = Textbox(sf.Vector2(0, 16), 256, "lucas", self.input) self.last_textbox = Textbox(sf.Vector2(0, 48), 256, "derego", self.input) self.login_button = Button(sf.Vector2(124-48, 80), "button", self.input, "login", 3, 3) self.window = Window(sf.Vector2(272, 112), 256, 128, sf.Color(50, 50, 120, 255), self.input) self.window.add_child(self.login_button) self.window.add_child(self.first_textbox) self.window.add_child(self.last_textbox) self.gui_manager.add(self.window) def handle_packet(self, packet): packet_id = packet.read() if packet_id == const.PacketTypes.LOGIN: #self.user.deserialize(packet) self.user.switch_state(const.GameStates.HOME_FARM) def on_mouse_button_pressed(self, mouse_button, x, y): super().on_mouse_button_pressed(mouse_button, x , y) if mouse_button == sf.Mouse.LEFT: # login button pressed if contains(self.login_button.local_bounds, sf.Vector2(x, y)): login_packet = net.Packet() login_packet.write(const.PacketTypes.LOGIN) login_packet.write(self.first_textbox.last_text) # username login_packet.write(self.last_textbox.last_text) # password self.client.send(login_packet)
def init(self): super().init() self.first_textbox = Textbox(sf.Vector2(0, 16), 256, "lucas", self.input) self.last_textbox = Textbox(sf.Vector2(0, 48), 256, "derego", self.input) self.login_button = Button(sf.Vector2(124-48, 80), "button", self.input, "login", 3, 3) self.window = Window(sf.Vector2(272, 112), 256, 128, sf.Color(50, 50, 120, 255), self.input) self.window.add_child(self.login_button) self.window.add_child(self.first_textbox) self.window.add_child(self.last_textbox) self.gui_manager.add(self.window)
def init(self): super().init() self.koa_button = Button(sf.Vector2(16, 0), "koa", self.input, "", 1, 1, 0, 0, 0) self.iliahi_button = Button(sf.Vector2(144, 0), "iliahi", self.input, "", 1, 1, 0, 0, 0) self.close_button = Button(sf.Vector2(512-16, 0), "close", self.input, "", 1, 1, 0, 0, 0) self.window = Window(sf.Vector2(168, 50), 512, 384, sf.Color(50, 50, 120, 255), self.input) #self.window = Window(sf.Vector2(0, 0), 512, 384, sf.Color(50, 50, 120, 255), self.input) self.window.local_bounds.position = sf.Vector2(168, 480-self.window.height/2) self.window.add_child(self.koa_button) self.window.add_child(self.iliahi_button) self.window.add_child(self.close_button) self.gui_manager.add(self.window)
def init(self): super().init() self.farm = Farm() self.owner = User(self.client, "") # CONTROL WINDOW self.ctrl_window = Window(sf.Vector2(260, 0), 256, 128, sf.Color(50, 50, 120, 255), self.input) self.add_button = Button(sf.Vector2(16, 0), "button", self.input, "add") self.set_button = Button(sf.Vector2(144, 0), "button", self.input, "set") self.points_textbox = Textbox(sf.Vector2(0, 64), 256, "amount of points", self.input) self.ctrl_window.add_child(self.add_button) self.ctrl_window.add_child(self.set_button) self.ctrl_window.add_child(self.points_textbox) self.gui_manager.add(self.ctrl_window)
def init(self): super().init() self.farm = Farm() self.owner = User(self.client, "") # CONTROL WINDOW self.load_button = Button(sf.Vector2(16, 0), "button", self.input, "load") self.home_button = Button(sf.Vector2(144, 0), "button", self.input, "home") self.textbox = Textbox(sf.Vector2(0, 64), 256, self.owner.user_name, self.input) self.window = Window(sf.Vector2(0, 0), 256, 128, sf.Color(50, 50, 120, 255), self.input) self.window.add_child(self.load_button) self.window.add_child(self.home_button) self.window.add_child(self.textbox) self.gui_manager.add(self.window)
class ShopState(ClientState): def __init__(self, client, input, gui, user): super().__init__(client, input, gui, user) def init(self): super().init() self.koa_button = Button(sf.Vector2(16, 0), "koa", self.input, "", 1, 1, 0, 0, 0) self.iliahi_button = Button(sf.Vector2(144, 0), "iliahi", self.input, "", 1, 1, 0, 0, 0) self.close_button = Button(sf.Vector2(512-16, 0), "close", self.input, "", 1, 1, 0, 0, 0) self.window = Window(sf.Vector2(168, 50), 512, 384, sf.Color(50, 50, 120, 255), self.input) #self.window = Window(sf.Vector2(0, 0), 512, 384, sf.Color(50, 50, 120, 255), self.input) self.window.local_bounds.position = sf.Vector2(168, 480-self.window.height/2) self.window.add_child(self.koa_button) self.window.add_child(self.iliahi_button) self.window.add_child(self.close_button) self.gui_manager.add(self.window) def handle_packet(self, packet): packet_id = packet.read() if packet_id == const.PacketTypes.ADD_INVENTORY_ITEM: self.user.deserialize(packet) def render(self, target): super().render(target) def update(self, dt): super().update(dt) def on_mouse_button_pressed(self, mouse_button, x, y): super().on_mouse_button_pressed(mouse_button, x, y) if self.gui_manager.point_over_element(self.close_button, x, y) is True: self.user.switch_state(const.GameStates.HOME_FARM) if self.gui_manager.point_over_element(self.koa_button, x, y) is True: packet = net.Packet() packet.write(const.PacketTypes.ADD_INVENTORY_ITEM) packet.write("koa") self.client.send(packet) elif self.gui_manager.point_over_element(self.iliahi_button, x, y) is True: packet = net.Packet() packet.write(const.PacketTypes.ADD_INVENTORY_ITEM) packet.write("iliahi") self.client.send(packet)
def init(self): super().init() packet = net.Packet() packet.write(const.PacketTypes.GET_USER) self.client.send(packet) self.total_points_label = Label(sf.Vector2(16, 0), "total points:", self.input, sf.Color.WHITE) self.total_points_amnt = Label(sf.Vector2(144, 0), str(self.user.points), self.input, sf.Color.WHITE) self.close_button = Button(sf.Vector2(512 - 16, 0), "close", self.input, "", 1, 1, 0, 0, 0) self.window = Window(sf.Vector2(168, 50), 512, 384, sf.Color(50, 50, 120, 255), self.input) self.window.local_bounds.position = sf.Vector2(168, 480 - self.window.height / 2) self.window.add_child(self.total_points_label) self.window.add_child(self.total_points_amnt) self.window.add_child(self.close_button) self.gui_manager.add(self.window)
class StatisticsState(ClientState): def __init__(self, client, input, gui, user): super().__init__(client, input, gui, user) def init(self): super().init() packet = net.Packet() packet.write(const.PacketTypes.GET_USER) self.client.send(packet) self.total_points_label = Label(sf.Vector2(16, 0), "total points:", self.input, sf.Color.WHITE) self.total_points_amnt = Label(sf.Vector2(144, 0), str(self.user.points), self.input, sf.Color.WHITE) self.close_button = Button(sf.Vector2(512 - 16, 0), "close", self.input, "", 1, 1, 0, 0, 0) self.window = Window(sf.Vector2(168, 50), 512, 384, sf.Color(50, 50, 120, 255), self.input) self.window.local_bounds.position = sf.Vector2(168, 480 - self.window.height / 2) self.window.add_child(self.total_points_label) self.window.add_child(self.total_points_amnt) self.window.add_child(self.close_button) self.gui_manager.add(self.window) def handle_packet(self, packet): packet_id = packet.read() if packet_id == const.PacketTypes.GET_USER: self.user.deserialize(packet) def render(self, target): super().render(target) def update(self, dt): super().update(dt) def on_mouse_button_pressed(self, mouse_button, x, y): super().on_mouse_button_pressed(mouse_button, x, y) if self.gui_manager.point_over_element(self.close_button, x, y) is True: self.user.switch_state(const.GameStates.HOME_FARM)
class HomeFarmState(ClientState): def __init__(self, client, input, gui, user): super().__init__(client, input, gui, user) def init(self): super().init() packet = net.Packet() packet.write(const.PacketTypes.GET_USER) self.client.send(packet) self.view = sf.View() self.view.reset(sf.Rectangle((0, 0), (const.WINDOW_WIDTH, const.WINDOW_HEIGHT))) self.current_item = 0 # current item in inventory list self.inventory_drawer = [] for item in self.user.inventory: self.inventory_drawer.append(item) # so you get a basic list of each item, accessed through self.current_item # CONTROL WINDOW self.load_button = Button(sf.Vector2(16, 0), "button", self.input, "load") self.save_button = Button(sf.Vector2(144, 0), "button", self.input, "save") self.shop_button = Button(sf.Vector2(16, 32), "button", self.input, "shop") self.stats_button = Button(sf.Vector2(144, 32), "button", self.input, "stats") self.textbox = Textbox(sf.Vector2(0, 64), 256, "lucas", self.input) self.window = Window(sf.Vector2(0, 0), 256, 128, sf.Color(50, 50, 120, 255), self.input) self.window.add_child(self.load_button) self.window.add_child(self.save_button) self.window.add_child(self.shop_button) self.window.add_child(self.stats_button) self.window.add_child(self.textbox) self.gui_manager.add(self.window) # END CONTROL WINDOW def handle_packet(self, packet): packet_id = packet.read() if packet_id == const.PacketTypes.ADD_FARM_ITEM: type = packet.read() # type of tree x = packet.read() y = packet.read() self.user.farm.add_farm_item(FarmItem(type, sf.Vector2(x, y), farm_items[type].price)) elif packet_id == const.PacketTypes.SWITCH_FARM: name = packet.read() packet.write(const.PacketTypes.LOAD_FARM) packet.write(name) self.client.send(packet) if self.user.user_type == "Student": self.user.farm.remove_all() self.user.switch_state(const.GameStates.GUEST_FARM) else: self.user.farm.remove_all() self.user.switch_state(const.GameStates.TEACHER_GUEST_FARM) elif packet_id == const.PacketTypes.GET_USER: self.user.deserialize(packet) def render(self, target): target.view = self.view self.user.farm.draw(target) target.view = target.default_view super().render(target) # DRAW INVENTORY if len(self.inventory_drawer) > 0: item = self.get_current_item() item = FarmItem(item, sf.Vector2(0, 0), farm_items[item].price) item.position = sf.Vector2(790-item.width, 0) item.draw(target) amnt = self.user.inventory[self.get_current_item()] amnt = sf.Text(str(amnt), res.font_8bit, 20) amnt.position = sf.Vector2(item.position.x+item.width/2, item.height/2) target.draw(amnt) # END DRAW INVENTORY def update(self, dt): super().update(dt) def on_mouse_button_pressed(self, mouse_button, x, y): super().on_mouse_button_pressed(mouse_button, x, y) # left if mouse_button == sf.Mouse.LEFT: if self.gui_manager.point_over_any_element(x, y) is not True and self.loaded is True: # mouse isn't over window packet = net.Packet() packet.write(const.PacketTypes.ADD_FARM_ITEM) packet.write(self.get_current_item()) packet.write(self.input.window.map_pixel_to_coords(sf.Vector2(x, y), self.view).x) packet.write(self.input.window.map_pixel_to_coords(sf.Vector2(x, y), self.view).y) self.client.send(packet) elif self.gui_manager.point_over_element(self.load_button, x, y) is True: if self.textbox.last_text is not self.user.user_name: packet = net.Packet() packet.write(const.PacketTypes.SWITCH_FARM) packet.write(self.textbox.last_text) self.client.send(packet) elif self.gui_manager.point_over_element(self.save_button, x, y) is True: packet = net.Packet() packet.write(const.PacketTypes.SAVE_FARM) self.user.farm.serialize(packet) self.client.send(packet) elif self.gui_manager.point_over_element(self.shop_button, x, y) is True: self.user.switch_state(const.GameStates.SHOP) elif self.gui_manager.point_over_element(self.stats_button, x, y) is True: self.user.switch_state(const.GameStates.STATS) # RIGHT if mouse_button == sf.Mouse.RIGHT: for item in reversed(self.user.farm.farm_items): if contains(item.local_bounds, self.input.window.map_pixel_to_coords(sf.Vector2(x, y), self.view)): print("hello world") self.user.farm.farm_items.remove(item) break # only delete one tree def on_mouse_moved(self, pos, move): if self.gui_manager.point_over_any_element(pos.x, pos.y) is not True: # mouse isn't over window if self.mouse_state == 'down': # mouse is down self.view.move(-move.x, -move.y) def on_mouse_wheel_moved(self, delta, position): self.current_item += delta if self.current_item > len(self.inventory_drawer)-1: self.current_item = 0 elif self.current_item < 0: self.current_item = len(self.inventory_drawer)-1 def get_current_item(self): if len(self.inventory_drawer) >= 1: return self.inventory_drawer[self.current_item] else: return None