# This file is part of ROBOTGAME # # ROBOTGAME is free software: you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation, either version 3 of the License, or (at your option) any later # version. # # ROBOTGAME is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with # ROBOTGAME. If not, see . # # ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' # # worldobject.py # -------------------- # date created : Tue Aug 7 2012 # copyright : (C) 2012 Sakse Dalum # maintained by : Sakse Dalum """ A generic world object. """ class WorldObject(object): def __init__(self, level, x, y, z=0, direction=(1, 0), speed=5, tile_x=64, tile_y=48, movable=False): self.__dict__.update(locals()) self.init_x = self.move_x = self.x = self.x - (self.x % self.tile_x) self.init_y = self.move_y = self.y = self.y - (self.y % self.tile_y) self.holding = None self.holder = None def set_init_pos(self): self.init_x, self.init_y = self.x, self.y def reset_pos(self): self.x, self.y = self.init_x, self.init_y def check_move(self, move_x, move_y): if self.move_x == self.x and self.move_y == self.y and self.movable: for obj in self.level.objects: if (obj.x == self.x + move_x * self.tile_x and obj.y == self.y + move_y * self.tile_y and obj != self and obj != self.holder and obj != self.holding): return False return True return False def move(self, move_x, move_y): if self.check_move(move_x, move_y): if self.holding: if not self.holding.check_move(move_x, move_y): return False self.move_x += move_x * self.tile_x self.move_y += move_y * self.tile_y if self.holding: self.holding.move(move_x, move_y) def use(self): pass def update(self, e, t, dt): if self.x > self.move_x: self.x -= min(self.speed * dt * self.tile_x, abs(self.x - self.move_x)) if self.x < self.move_x: self.x += min(self.speed * dt * self.tile_x, abs(self.x - self.move_x)) if self.y > self.move_y: self.y -= min(self.speed * dt * self.tile_y, abs(self.y - self.move_y)) if self.y < self.move_y: self.y += min(self.speed * dt * self.tile_y, abs(self.y - self.move_y)) self.x, self.y = int(self.x), int(self.y)