GithubHelp home page GithubHelp logo

csc207-uoft / course-project-circus Goto Github PK

View Code? Open in Web Editor NEW
0.0 0.0 1.0 1.78 MB

course-project-circus created by GitHub Classroom

License: GNU General Public License v3.0

HTML 0.03% Java 99.97%

course-project-circus's People

Contributors

20liamb avatar artaru avatar audreyyoshino avatar fionyvan avatar galacticglum avatar github-classroom[bot] avatar vperematko avatar

Watchers

 avatar  avatar

Forkers

20liamb

course-project-circus's Issues

Order handling system

Since we want the order system to be extensible (i.e. to handle arbitrary orders), we might want to introduce an "order handler" system that is charge of responding to/handling a specific type (or specific types) of orders.

For example, we might have an order handler for PlaceOrder types, and another handler for MoveOrder types. This separation will allow us to have different handling logic for different orders.

Implement Robot simulator

In real life, the Warehouse would send a robot an order along with a route, and then the robot would move along that path to fulfill the order. Once the Robot fulfilled the order, it would let the Warehouse know that it is available again.

However, since we don't actually have robots and we aren't writing multi threaded code, we need to write a simulator for the robots that moves them every frame along the path. This simulator can then be used in the UI code to display the robots "moving".

Ideally, we should have some sort of abstraction that would allow the "real world" implementation discussed above. This might look like an API that contain some sort of "updateRobotPosition" method, along with some other logic for syncing the robot positions with the Warehouse.

Router

Interface for implementing route-finding.

Responsibility

  • Route route(WarehouseLayout layout, Position source, Position target): takes in environment state (i.e. WarehouseLayout, the source and target positions), and finds a route under a certain set of constraints.

Collaboration

  • WarehouseLayout
  • Route
  • Position

Display grid for UI

Make sure that the grid shows up and is dynamic (changes when commands run in the program).

Implement Order-Robot matching

Every time step, the warehouse should try to match available Robots to orders that need to be fulfilled. This can be done through a variety of metrics: take the closest robot, take the first robot, etc...

When a Robot is matched, it can compute a route to the destination using a routefinder algorithm. Then, the route can be visualized.

Item

Entity
Class for an item in the warehouse.

Responsibility

  • Constructs an item with the given name and description to store in the warehouse
  • getName
  • getDescription
  • setName
  • setDescription
  • getId
  • Overrides: tostring equals hashCode

Collaboration

None

Depot

Entity
Class representing a storage unit in the warehouse storing items of any type.
Inherits: StorageUnit

Responsibility

  • Create a depot with a given capacity or infinite capacity
  • addItem
  • removeItem
  • getCapacity
  • hasInfiniteCapacity
  • getSize
  • Overrides: getQueryItems

Collaboration

Item

Warehouse editor inspector window

  • When a tile is NOT selected, the inspector window should let you edit warehouse properties (just size for now).
  • Otherwise, when a tile IS selected, the inspector window should show the position of the tile as readonly input fields, and should let you edit the properties of the tile.

Layout

Entity
Class representing a stateless 2D representation of the layout of a warehouse.

Responsibility

  • Construct an empty warehouse layout given width and height
  • getTileAt
  • isTileCoordinateInRange

Collaboration

None

StorageUnit

Use Case (??)
Class that creates a unit in the warehouse that can store items.
Parent Classes: Receivable, Distributable

Responsibility

  • addItem (abstract method)
  • removeItem (abstract method)
  • Overrides: recieveItem, distributeItem

Collaboration

Item, Query

Rack

Entity (??)
Class that creates a storage unit in the warehouse that can store items of a single type.
Inherits: StorageUnit

Responsibility

  • Constructs a rack with a given item, a given capacity, or infinite capacity
  • getCapacity
  • hasInfiniteCapacity
  • addItem
  • removeItem
  • getQueryItems

Collaboration

Item

Test Item Class

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Robot

Abstract class for implementing moving agents in the warehouse with arbitrary route-finders.

Responsibility

TODO

Collaboration

  • Router
  • Route
  • Warehouse
  • WarehouseLayout

ObstacleAvoidanceRobot

A Robot (with an arbitrary route-finder algorithm) with an obstacle avoidance strategy. This robot uses a local path planner to sidestep obstacles as it encounters it by trying to wait for it, go around it, or recomputing the route.

Responsibility

TODO

Collaboration

  • Robot

Implement OrderQueue

I've setup a simple messaging system inside the Warehouse so that whenever an item is added/removed from a storage unit, the warehouse is notified. Now, we need to use this to check:

  • when an item is added to a ReceiveDepot. In this case, we need to create a new Order to move that Item to an available Rack.
  • when an item is added to a ShipDepot. In this case, we should notify some service that an order has been fulfilled (this won't do anything in the UI but in real life, it would be useful to know when an item has been moved to a shipping depot).

Test Part Class

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Tile

Entity
Class that creates an empty tile in the warehouse.

Responsibility

  • Constructs a tile (WarehouseCell) with the given position

Collaboration

None

Pathfinder

Use Case
Abstract class for pathfinders that discovers the optimal path for packages.

Responsibility

  • Construct a pathfinder
  • findPath (differs based on pathfinder used)

Collaboration

Item

ItemScorer

Use Case
Class that computes the cost of two items (distancebetween two items) by implementing abstract class Scorer.
Parent Class: Scorer

Responsibility

  • Overrides: computeCost

Collaboration

Item

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.