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, client, user_type): self.client = client self.user_type = user_type self.first_name = "" self.last_name = "" self.user_name = "" self.password = "" self.points = 0 self.inventory = {} self.farm = Farm() self.states = [] self.state = None
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 User: def __init__(self, client, user_type): self.client = client self.user_type = user_type self.first_name = "" self.last_name = "" self.user_name = "" self.password = "" self.points = 0 self.inventory = {} self.farm = Farm() self.states = [] self.state = None def serialize(self, packet): packet.write(self.user_type) packet.write(self.first_name) packet.write(self.last_name) packet.write(self.user_name) packet.write(self.password) packet.write(self.points) self.farm.serialize(packet) packet.write(len(self.inventory)) for item in self.inventory: packet.write(item) # type packet.write(self.inventory[item]) # amount def deserialize(self, packet): self.user_type = packet.read() self.first_name = packet.read() self.last_name = packet.read() self.user_name = packet.read() self.password = packet.read() self.points = packet.read() self.farm.deserialize(packet) inventory_size = packet.read() for item in range(0, inventory_size): type = packet.read() amount = packet.read() self.inventory[type] = amount def render(self, target): self.states[self.state].render(target) def update(self, dt): self.states[self.state].update(dt) def switch_state(self, state): # stop gui, updating, taking input, etc. self.states[self.state].gui_manager.remove_all() self.states[self.state].input.remove_key_handler(self.states[self.state]) self.states[self.state].input.remove_text_handler(self.states[self.state]) self.states[self.state].input.remove_mouse_handler(self.states[self.state]) # set new state self.state = state self.states[self.state].init()
def handle_packet(self, packet, client_id): packet_id = packet.read() if packet_id == const.PacketTypes.LOGIN: self.on_login(packet, client_id) elif packet_id == const.PacketTypes.ADD_FARM_ITEM: type = packet.read() # type of tree x = packet.read() y = packet.read() # got all data from packet, send it back with new data packet.write(packet_id) packet.write(type) packet.write(x) packet.write(y) self.send(client_id, packet) elif packet_id == const.PacketTypes.ADD_INVENTORY_ITEM: type = packet.read() self.connected_users[client_id].inventory[type] = int(self.connected_users[client_id].inventory[type]) # intify it self.connected_users[client_id].inventory[type] += 1 packet.write(packet_id) self.connected_users[client_id].serialize(packet) self.send(client_id, packet) elif packet_id == const.PacketTypes.SWITCH_FARM: name = packet.read() # got all data from packet, send it back with new data if name in self.users: packet = net.Packet() packet.write(packet_id) packet.write(name) self.send(client_id, packet) elif packet_id == const.PacketTypes.LOAD_FARM: name = packet.read() # got all data from packet, send it back with new data packet.write(packet_id) self.users[name].serialize(packet) self.load_farm(self.users[name]) self.users[name].farm.serialize(packet) self.send(client_id, packet) elif packet_id == const.PacketTypes.SAVE_FARM: farm = Farm() farm.deserialize(packet) self.save_farm(self.connected_users[client_id], farm) elif packet_id == const.PacketTypes.ADD_POINTS: name = packet.read() points = float(packet.read()) self.users[name].points = float(self.users[name].points) self.users[name].points += points self.save_user_data(self.users[name]) # messes up inventory elif packet_id == const.PacketTypes.SET_POINTS: name = packet.read() points = float(packet.read()) self.users[name].points = points self.save_user_data(self.users[name]) elif packet_id == const.PacketTypes.GET_USER: packet.write(packet_id) self.connected_users[client_id].serialize(packet) self.send(client_id, packet)