module BABYLON {
    export class HemisphericLight extends Light {
        public groundColor = new BABYLON.Color3(0.0, 0.0, 0.0);

        private _worldMatrix: Matrix;

        constructor(name: string, public direction: Vector3, scene: Scene) {
            super(name, scene);
        }

        public setDirectionToTarget(target: Vector3): Vector3 {
            this.direction = BABYLON.Vector3.Normalize(target.subtract(Vector3.Zero()));
            return this.direction;
        }

        public getShadowGenerator(): ShadowGenerator {
            return null;
        }

        public transferToEffect(effect: Effect, directionUniformName: string, groundColorUniformName: string): void {
            var normalizeDirection = BABYLON.Vector3.Normalize(this.direction);
            effect.setFloat4(directionUniformName, normalizeDirection.x, normalizeDirection.y, normalizeDirection.z, 0);
            effect.setColor3(groundColorUniformName, this.groundColor.scale(this.intensity));
        }

        public _getWorldMatrix(): Matrix {
            if (!this._worldMatrix) {
                this._worldMatrix = BABYLON.Matrix.Identity();
            }

            return this._worldMatrix;
        }
    }
} 