Mirror bouncing lasers
This commit is contained in:
parent
f2228b4182
commit
b1ac62748b
3 changed files with 724 additions and 375 deletions
|
@ -92,9 +92,9 @@ LineRenderer:
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 2115795504606128404}
|
m_GameObject: {fileID: 2115795504606128404}
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_CastShadows: 1
|
m_CastShadows: 0
|
||||||
m_ReceiveShadows: 1
|
m_ReceiveShadows: 0
|
||||||
m_DynamicOccludee: 1
|
m_DynamicOccludee: 0
|
||||||
m_MotionVectors: 0
|
m_MotionVectors: 0
|
||||||
m_LightProbeUsage: 0
|
m_LightProbeUsage: 0
|
||||||
m_ReflectionProbeUsage: 0
|
m_ReflectionProbeUsage: 0
|
||||||
|
@ -102,7 +102,7 @@ LineRenderer:
|
||||||
m_RenderingLayerMask: 1
|
m_RenderingLayerMask: 1
|
||||||
m_RendererPriority: 0
|
m_RendererPriority: 0
|
||||||
m_Materials:
|
m_Materials:
|
||||||
- {fileID: 0}
|
- {fileID: 2100000, guid: 0244f7fe345a4904db014baf3a3d5034, type: 2}
|
||||||
m_StaticBatchInfo:
|
m_StaticBatchInfo:
|
||||||
firstSubMesh: 0
|
firstSubMesh: 0
|
||||||
subMeshCount: 0
|
subMeshCount: 0
|
||||||
|
@ -146,9 +146,9 @@ LineRenderer:
|
||||||
m_RotationOrder: 4
|
m_RotationOrder: 4
|
||||||
colorGradient:
|
colorGradient:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
key0: {r: 1, g: 1, b: 1, a: 1}
|
key0: {r: 0.16816717, g: 1, b: 0.031372547, a: 1}
|
||||||
key1: {r: 1, g: 1, b: 1, a: 1}
|
key1: {r: 1, g: 0.8835529, b: 0.033018887, a: 1}
|
||||||
key2: {r: 0, g: 0, b: 0, a: 0}
|
key2: {r: 1, g: 0.8835529, b: 0.033018887, a: 0}
|
||||||
key3: {r: 0, g: 0, b: 0, a: 0}
|
key3: {r: 0, g: 0, b: 0, a: 0}
|
||||||
key4: {r: 0, g: 0, b: 0, a: 0}
|
key4: {r: 0, g: 0, b: 0, a: 0}
|
||||||
key5: {r: 0, g: 0, b: 0, a: 0}
|
key5: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
@ -156,7 +156,7 @@ LineRenderer:
|
||||||
key7: {r: 0, g: 0, b: 0, a: 0}
|
key7: {r: 0, g: 0, b: 0, a: 0}
|
||||||
ctime0: 0
|
ctime0: 0
|
||||||
ctime1: 65535
|
ctime1: 65535
|
||||||
ctime2: 0
|
ctime2: 65535
|
||||||
ctime3: 0
|
ctime3: 0
|
||||||
ctime4: 0
|
ctime4: 0
|
||||||
ctime5: 0
|
ctime5: 0
|
||||||
|
@ -176,7 +176,7 @@ LineRenderer:
|
||||||
numCornerVertices: 0
|
numCornerVertices: 0
|
||||||
numCapVertices: 0
|
numCapVertices: 0
|
||||||
alignment: 0
|
alignment: 0
|
||||||
textureMode: 0
|
textureMode: 1
|
||||||
shadowBias: 0.5
|
shadowBias: 0.5
|
||||||
generateLightingData: 0
|
generateLightingData: 0
|
||||||
m_UseWorldSpace: 1
|
m_UseWorldSpace: 1
|
||||||
|
@ -209,3 +209,4 @@ MonoBehaviour:
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
flipDirection: 0
|
flipDirection: 0
|
||||||
|
power: 1
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -20,55 +20,48 @@ public class Laser : MonoBehaviour
|
||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
RaycastHit2D hit = DrawLaser(transform.position);
|
DrawLaser(transform.position, isHorizontal, flipDirection);
|
||||||
HandleHit(hit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RaycastHit2D DrawLaser(Vector3 startPosition)
|
void DrawLaser(Vector3 startPosition, bool drawOnYAxis, bool flipAxis, int laserIndex = 0)
|
||||||
{
|
{
|
||||||
laserLine.SetPosition(0, startPosition);
|
RaycastHit2D hit = DrawRaycast(startPosition, drawOnYAxis, flipAxis);
|
||||||
RaycastHit2D hit;
|
Vector3 endPosition;
|
||||||
|
|
||||||
if (isHorizontal)
|
if (hit.collider) endPosition = hit.point;
|
||||||
{
|
else if (drawOnYAxis) endPosition = new Vector3(startPosition.x, flipAxis ? startPosition.y - maxDistance : startPosition.y + maxDistance, 0);
|
||||||
float endpointY = flipDirection ? startPosition.y - maxDistance : startPosition.y + maxDistance;
|
else endPosition = new Vector3(flipAxis ? startPosition.x - maxDistance : startPosition.x + maxDistance, startPosition.y, 0);
|
||||||
hit = Physics2D.Raycast(startPosition, flipDirection ? Vector2.down : Vector2.up);
|
|
||||||
|
|
||||||
if (hit.collider) laserLine.SetPosition(1, hit.point);
|
laserLine.positionCount = laserIndex + 2;
|
||||||
else laserLine.SetPosition(1, new Vector3(startPosition.x, endpointY, 0));
|
laserLine.SetPosition(laserIndex, startPosition);
|
||||||
} else
|
laserLine.SetPosition(laserIndex + 1, endPosition);
|
||||||
{
|
|
||||||
float endpointX = flipDirection ? startPosition.x - maxDistance : startPosition.x + maxDistance;
|
|
||||||
hit = Physics2D.Raycast(startPosition, flipDirection ? Vector2.left : Vector2.right);
|
|
||||||
|
|
||||||
if (hit.collider) laserLine.SetPosition(1, hit.point);
|
|
||||||
else laserLine.SetPosition(1, new Vector3(endpointX, startPosition.y, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
return hit;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandleHit(RaycastHit2D hit)
|
|
||||||
{
|
|
||||||
if (hit.collider)
|
if (hit.collider)
|
||||||
{
|
{
|
||||||
if (hit.collider.tag == "Mirror") HitMirror(hit);
|
if (hit.collider.tag == "Mirror")
|
||||||
|
{
|
||||||
|
Vector2 offset = GetDrawDirection(!drawOnYAxis, flipAxis);
|
||||||
|
DrawLaser(hit.point + offset, !drawOnYAxis, flipAxis, laserLine.positionCount);
|
||||||
|
} else
|
||||||
|
{
|
||||||
if (hit.collider.tag == "Charge Point") HitChargePoint(hit);
|
if (hit.collider.tag == "Charge Point") HitChargePoint(hit);
|
||||||
|
else UnchargeLastPoint();
|
||||||
}
|
}
|
||||||
else HitNothing();
|
}
|
||||||
|
else UnchargeLastPoint();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HitMirror(RaycastHit2D hit)
|
RaycastHit2D DrawRaycast(Vector3 startPosition, bool drawOnYAxis, bool flipAxis)
|
||||||
{
|
{
|
||||||
|
return Physics2D.Raycast(startPosition, GetDrawDirection(drawOnYAxis, flipAxis));
|
||||||
|
}
|
||||||
|
|
||||||
if (isHorizontal)
|
Vector2 GetDrawDirection(bool drawOnYAxis, bool flipAxis)
|
||||||
{
|
{
|
||||||
// TODO
|
if (drawOnYAxis && flipAxis) return Vector2.down;
|
||||||
}
|
else if (drawOnYAxis && !flipAxis) return Vector2.up;
|
||||||
else
|
else if (!drawOnYAxis && flipAxis) return Vector2.left;
|
||||||
{
|
return Vector2.right;
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HitChargePoint(RaycastHit2D hit)
|
void HitChargePoint(RaycastHit2D hit)
|
||||||
|
@ -77,7 +70,7 @@ public class Laser : MonoBehaviour
|
||||||
lastChargePoint = hit.collider.gameObject;
|
lastChargePoint = hit.collider.gameObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HitNothing()
|
void UnchargeLastPoint()
|
||||||
{
|
{
|
||||||
if (lastChargePoint) lastChargePoint.GetComponent<ChargePoint>().adjustCharges(power * -1);
|
if (lastChargePoint) lastChargePoint.GetComponent<ChargePoint>().adjustCharges(power * -1);
|
||||||
lastChargePoint = null;
|
lastChargePoint = null;
|
||||||
|
|
Loading…
Add table
Reference in a new issue