Code Monkey home page Code Monkey logo

solid-factory's Introduction

Project: SOLID Factory

SOLID Factory is a Unity2D Project which has been developed to test high-level programming concepts such as SOLID, DRY, Separation of Concern, Composition over Inheritance, Maximize Cohesion, Minimize Coupling, and Dependency Injection(via Exzenject) principles in Unity.

The project architecture is separated into two layers. The first layer is Core, which contains whole gameplay and systems implementations. The last layer is Simulation which is designed for simulating the Core layer.

Mentioned layers and their assets are available in the following paths:

for Core Layer : Assets/Scripts/Core

for Simulation Layer : Assets/Scripts/Simulation

Also, you can run the Simulation Scene. It is located under Assets/Scenes/Simulation in project folders. If you hit play, the simulation system is going to add 12 scenes as additive. You can zoom in and out by clicking the frame that holds a scene. When you zoomed in on a scene, other scenes unload. The load and unload scene operations work as async. Thus significantly reduces the processing intensity.

Stable Tank

Stable Tank with the lowest specs. Tanks cannot move around. However, they are only capable of detecting and tracking things.

Stabletank-1

Mobile Tank

Fastest tank kind. Mobile Tanks can move around quickly. However, they are only capable of detecting things and navigating around.

Mobiletank-1

Sources

The Source is an entity to which we can apply five different behaviors with the Composition over Inheritance principle. There is possible to create 48 variant sources whose different sub-behaviors than the others. Also, it's possible to make that combination at runtime!

Source-1

Heavy Tank

The most capable Tank kind. Heavy Tanks are slower than Mobile Tanks. However, there is the Placer Unit, which gives the ability to store and place entities. They are also capable of detecting things and navigating around.

Heavytank-1

Placeable Area

Placeable Areas can be detectable by any Tank kind whose a Detector Unit. The Area executes its operation with the entity that has IPlaceable behavior. Also, the Area has two different placement types. The first one organizes received entities with specific animation. The last one places the entities where they've received without any action.

Placearea-1

ConveyorBelt

Conveyor Belts are only capable of carrying entities whose ITransportable behavior. Every received transportable entity keeps in Queue until the next iteration of the Conveyor Belt starts.

Conveyor-1

Sprayer

Sprayers are only capable of spraying entities which has IPlaceable behavior. Every received transportable entity keeps in Queue until the next iteration of Sprayer starts. The Circle is the default Sprayer's target area. It's easy to create new variations like Triangle, Square, etc. Also, the area radius is changeable via Inspector with the "radius" property.

Sprayer

Processor

Processor is only capable of upgrading entities' sub-behaviors whose IProcessable behavior. Every received processable entity keeps in Queue until the next iteration of the Processor starts. In the example, the Processor doesn't process the entity which doesn't have IProcessable behavior. That's why the entities are stuck in Processor's entry point.

Processor

Straight Machines

Every individual component is processed as Node. It is a module whose Input, Process, and Output operations are implementations. Straight Machine searches for its child elements to find Nodes. Then, bind found nodes to each other such as the Singly Linked List approach.

Straight-Machine

Cyclic Machines

The Loop Machine works pretty much the same as the Straight Machine. But the only difference is that the machine uses the Circular Linked List approach. In this way, it is possible to create cyclic machines.

Loop-Machine

Showcase

Showcase

solid-factory's People

Contributors

tunchasan avatar

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.