@startuml
package entities {
    abstract class Entity implements IEntity {
        - Vec2 pos
        - Vec2 vel
        - Vec2 acc

        + update()
        + draw()
    }
    interface IEntity {
          public void update();
        public void draw(Graphics2D g2);

        public Vec2 getPos();
    }

    interface Edible extends IEntity {
        + int getFoodValue()
        + void isEatenBy(HostileCreature)
    } 
}

package entities.bodysegments {
    abstract BodySegment extends entities.Entity {
        ~ int maxSaturation
        ~ int saturation
        + int saturate(foodValue)
        + void desaturate()

    } 
}

package entities.hostile {
    abstract class HostileCreature {
        + Mouth getMouth()
        + Edible checkCollisionsWithMouth(Mouth)
        
        + void eat(Edible)
        
        + boolean isAlive()
        + void getRemains()
    }
    class ChainCreature extends HostileCreature
}

package entities.peaceful {
    class PeacefulCell
    class ChangeLevelCell  extends PeacefulCell

}

package util {
    class Ring {
        static Shape create ()
    }
    class Vec2 {
        double x
        double y
    }
    class LevelLoader {
        
    }
    class XMLHandler
}


class Game {
}

class Player extends entities.hostile.ChainCreature

class Level {

}
Level *-- Game
Player *-- Game
@enduml