UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers.

83 lines (67 loc) 2.12 kB
/** * @author Richard Davey <rich@photonstorm.com> * @copyright 2018 Photon Storm Ltd. * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ var Point = require('../point/Point'); var Length = require('../line/Length'); // Position is a value between 0 and 1 /** * [description] * * @function Phaser.Geom.Triangle.GetPoint * @since 3.0.0 * * @generic {Phaser.Geom.Point} O - [out,$return] * * @param {Phaser.Geom.Triangle} triangle - [description] * @param {float} position - [description] * @param {(Phaser.Geom.Point|object)} [out] - [description] * * @return {(Phaser.Geom.Point|object)} [description] */ var GetPoint = function (triangle, position, out) { if (out === undefined) { out = new Point(); } var line1 = triangle.getLineA(); var line2 = triangle.getLineB(); var line3 = triangle.getLineC(); if (position <= 0 || position >= 1) { out.x = line1.x1; out.y = line1.y1; return out; } var length1 = Length(line1); var length2 = Length(line2); var length3 = Length(line3); var perimeter = length1 + length2 + length3; var p = perimeter * position; var localPosition = 0; // Which line is it on? if (p < length1) { // Line 1 localPosition = p / length1; out.x = line1.x1 + (line1.x2 - line1.x1) * localPosition; out.y = line1.y1 + (line1.y2 - line1.y1) * localPosition; } else if (p > length1 + length2) { // Line 3 p -= length1 + length2; localPosition = p / length3; out.x = line3.x1 + (line3.x2 - line3.x1) * localPosition; out.y = line3.y1 + (line3.y2 - line3.y1) * localPosition; } else { // Line 2 p -= length1; localPosition = p / length2; out.x = line2.x1 + (line2.x2 - line2.x1) * localPosition; out.y = line2.y1 + (line2.y2 - line2.y1) * localPosition; } return out; }; module.exports = GetPoint;