ThreeJS-Addons

Introduction

This project is a collection of ThreeJS Addons to speedup productivity when working with ThreeJS projects. The Project comprises of the following:

Installation

You can get the package via npm:

npm i --save @threejs-addons/threejs-addons

or you can load via deno.land in your deno projects : https://deno.land/x/threejs_addons

import * as threejsAddons from "https://deno.land/x/threejs_addons@LATEST_TAG/mod.ts";

Usage

To begin using the addons, simply import them into your project

import {
    CameraController,
    RapierColliderController, 
    TranslationController,
 } from '@threejs-addons/threejs-addons';
import { utils } from '@threejs-addons/threejs-addons';

/** get default options for your class instances */
const { DEFAULT_OPTIONS }  = utils;

/** instantiate the camera controller class i.e CCC */
const CCC = new CameraController({ scene: scene }); //controller adds cameras to your scene


/** assuming your application requires collison detection for the controllers **/
/** we have implemented a Rapier collider controller  class or simply RCC */
const offset = 0.5;
const RCC = new RapierColliderController({ world: world as RAPIER.World, offset, options: DEFAULT_OPTIONS });


/** instantiate the translation controller class or simply TCC **/
const TCC = new TranslationController({ options: DEFAULT_OPTIONS });


/** somewhere in your code, you use the TCC to handle all translations */
TCC.setCCC(CCC);
TCC.set(RCC);


/** you may want to set up event listerners some where in your code*/

window.addEventListener('keydown', (e) => {

    if(e.key === 'w'){
        RCC.setTranslateZDirection(true, 1)
        // TCC.setTranslateZDirection(true, 1)
    }

    if(e.key === 's'){
        RCC.setTranslateZDirection(true, -1)
        // TCC.setTranslateZDirection(true, -1)
    }

    if(e.key === 'a'){
        RCC.setTranslateXDirection(true, 1);
        // TCC.setTranslateXDirection(true, 1)
    }
    

    if(e.key === 'd'){
        RCC.setTranslateXDirection(true, -1);
        // TCC.setTranslateXDirection(true, -1)
    }

    if(e.key === 'ArrowLeft'){
        CCC.switchControlTypeNext(null); //switch controls
    }

    if(e.key === 'ArrowRight'){
        CCC.switchControlTypeNext(null); //switch controls
    }

    if(e.key === 'c'){
        CCC.switchControllerNext(null);  //switch cameras          
    }
})

window.addEventListener('keyup', (e) => {
    if(e.key === 'w'){
        RCC.setTranslateZDirection(false, null)
        // TCC.setTranslateZDirection(false, null)
    }

    if(e.key === 's'){
        RCC.setTranslateZDirection(false, null)
        // TCC.setTranslateZDirection(false, null)
    }

    if(e.key === 'a'){
        RCC.setTranslateXDirection(false, null)
        // TCC.setTranslateXDirection(false, null)
    }

    if(e.key === 'd'){
        RCC.setTranslateXDirection(false, null)
        // TCC.setTranslateXDirection(false, null)
    }
})


function animate(){
    /** asuming you have some animate loop in your code*/
    TCC.update(delta, true);
}


API Documentation

The controllers are documented in the following links:

  1. Camera Controller Class(CCC) .
  2. Rapier Collider Controller Class(RCC) .
  3. Translation Controller Class(TCC) .

Contributing

@todo

License

This project is licensed under the MIT License.