Пример #1
0
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)