Просмотр исходного кода

Replaced "is2d" field with axis locks.

Made Actor to work with gameBojects without the MeshFilter component.
Made AddMethodToCache simpler.
master
Ivan "KaiSD" Korystin 10 лет назад
Родитель
Сommit
c8186552b9
16 измененных файлов: 109 добавлений и 35 удалений
  1. +54
    -0
      Assets/scripts/coa4u/ActionsBase/Action.cs
  2. +3
    -3
      Assets/scripts/coa4u/ActionsInstant/ActionSetDirection.cs
  3. +3
    -3
      Assets/scripts/coa4u/ActionsInstant/ActionSetPlace.cs
  4. +3
    -1
      Assets/scripts/coa4u/ActionsInstant/ActionSetRotation.cs
  5. +6
    -6
      Assets/scripts/coa4u/ActionsInterval/ActionBezierAbs.cs
  6. +0
    -1
      Assets/scripts/coa4u/ActionsInterval/ActionBezierRel.cs
  7. +0
    -1
      Assets/scripts/coa4u/ActionsInterval/ActionJumpBy.cs
  8. +3
    -3
      Assets/scripts/coa4u/ActionsInterval/ActionJumpTo.cs
  9. +0
    -1
      Assets/scripts/coa4u/ActionsInterval/ActionMoveBy.cs
  10. +3
    -3
      Assets/scripts/coa4u/ActionsInterval/ActionMoveTo.cs
  11. +0
    -1
      Assets/scripts/coa4u/ActionsInterval/ActionRotateBy.cs
  12. +3
    -1
      Assets/scripts/coa4u/ActionsInterval/ActionRotateTo.cs
  13. +0
    -1
      Assets/scripts/coa4u/ActionsInterval/ActionScaleBy.cs
  14. +3
    -3
      Assets/scripts/coa4u/ActionsInterval/ActionScaleTo.cs
  15. +26
    -5
      Assets/scripts/coa4u/UnityComponents/Actor.cs
  16. +2
    -2
      Assets/scripts/coa4u/UnityComponents/ActorSampleActions.cs

+ 54
- 0
Assets/scripts/coa4u/ActionsBase/Action.cs Просмотреть файл

@@ -4,11 +4,24 @@ using UnityEngine;

namespace coa4u
{
public enum Axises
{
none,
x,
y,
z,
xy,
xz,
yz,
xyz
}

/// <summary>
/// Basic action class for subclassing. To inherit interval actions, consider using the ActionInterval as the base class.
/// </summary>
public class ActionInstant
{
public Axises locks = Axises.none;
protected Actor target;
protected Transform transform;
protected Renderer renderer;
@@ -74,6 +87,47 @@ namespace coa4u
target = actor;
}

/// <summary>
/// This method modifies the given vector to keep the locked axises untouched.
/// </summary>
protected void lockAxises(ref Vector3 point)
{
{
if (target == null)
throw new Exception("Can calculate axises only after the action is atached to the actor");
}

switch (locks)
{
case Axises.x:
point.x = transform.position.x;
break;
case Axises.y:
point.y = transform.position.y;
break;
case Axises.z:
point.z = transform.position.z;
break;
case Axises.xy:
point.x = transform.position.x;
point.y = transform.position.y;
break;
case Axises.xz:
point.x = transform.position.x;
point.z = transform.position.z;
break;
case Axises.yz:
point.y = transform.position.y;
point.z = transform.position.z;
break;
case Axises.xyz:
point.x = transform.position.x;
point.y = transform.position.y;
point.z = transform.position.z;
break;
}
}

/// <summary>
/// Readonly property. Shows the remaining time of the action.
/// </summary>


+ 3
- 3
Assets/scripts/coa4u/ActionsInstant/ActionSetDirection.cs Просмотреть файл

@@ -21,7 +21,7 @@ namespace coa4u
public ActionSetDirection(Vector2 tgtValue)
: this((Vector3)tgtValue)
{
is2d = true;
locks = Axises.z;
}

public ActionSetDirection(Actor tgtActor)
@@ -48,11 +48,11 @@ namespace coa4u
{
value = other.transform.position;
}
if (is2d)
if (locks != Axises.none)
{
value.z = transform.position.z;
}
transform.rotation = Quaternion.LookRotation(transform.position - value);
transform.rotation = Quaternion.LookRotation(value - transform.position);
}
}
}

+ 3
- 3
Assets/scripts/coa4u/ActionsInstant/ActionSetPlace.cs Просмотреть файл

@@ -20,7 +20,7 @@ namespace coa4u
public ActionSetPlace(Vector2 tgtPlace)
: this((Vector3)tgtPlace)
{
is2d = true;
locks = Axises.z;
}

/// <summary>
@@ -37,8 +37,8 @@ namespace coa4u
public override void start()
{
base.start();
if (is2d)
value.z = transform.position.z;
if (locks != Axises.none)
lockAxises(ref value);
transform.position = value;
}
}

+ 3
- 1
Assets/scripts/coa4u/ActionsInstant/ActionSetRotation.cs Просмотреть файл

@@ -20,7 +20,7 @@ namespace coa4u
public ActionSetRotation(float angle)
: this(new Vector3(0, 0, angle))
{
is2d = true;
locks = Axises.xy;
}

/// <summary>
@@ -37,6 +37,8 @@ namespace coa4u
public override void start()
{
base.start();
if (locks != Axises.none)
lockAxises(ref value);
transform.rotation = Quaternion.Euler(value);
}
}

+ 6
- 6
Assets/scripts/coa4u/ActionsInterval/ActionBezierAbs.cs Просмотреть файл

@@ -26,7 +26,7 @@ namespace coa4u
public ActionBezierAbs(Vector2 tgtStart, Vector2 tgtSCP, Vector2 tgtECP, Vector2 tgtEnd, float tgtDuration)
: this((Vector3)tgtStart, (Vector3)tgtSCP, (Vector3)tgtECP, (Vector3)tgtEnd, tgtDuration)
{
is2d = true;
locks = Axises.z;
}

/// <summary>
@@ -52,12 +52,12 @@ namespace coa4u
{
base.start();
float z = transform.position.z;
if (is2d)
if (locks != Axises.none)
{
startPoint.z = z;
endPoint.z = z;
startControlPoint.z = z;
endControlPoint.z = z;
lockAxises(ref startPoint);
lockAxises(ref endPoint);
lockAxises(ref startControlPoint);
lockAxises(ref endControlPoint);
}
}



+ 0
- 1
Assets/scripts/coa4u/ActionsInterval/ActionBezierRel.cs Просмотреть файл

@@ -28,7 +28,6 @@ namespace coa4u
public ActionBezierRel(Vector2 tgtSCP, Vector2 tgtECP, Vector2 tgtEnd, float tgtDuration)
: this((Vector3)tgtSCP, (Vector3)tgtECP, (Vector3)tgtEnd, tgtDuration)
{
is2d = true;
}

/// <summary>


+ 0
- 1
Assets/scripts/coa4u/ActionsInterval/ActionJumpBy.cs Просмотреть файл

@@ -22,7 +22,6 @@ namespace coa4u
public ActionJumpBy(Vector2 tgtPoint, float tgtHeight, int tgtJumps, float tgtDuration)
: this((Vector3)tgtPoint, tgtHeight, tgtJumps, tgtDuration)
{
is2d = true;
}

public override ActionInstant clone()


+ 3
- 3
Assets/scripts/coa4u/ActionsInterval/ActionJumpTo.cs Просмотреть файл

@@ -22,7 +22,7 @@ namespace coa4u
public ActionJumpTo(Vector2 tgtPoint, float tgtHeight, int tgtJumps, float tgtDuration)
: this((Vector3)tgtPoint, tgtHeight, tgtJumps, tgtDuration)
{
is2d = true;
locks = Axises.z;
}

public override ActionInstant clone()
@@ -33,8 +33,8 @@ namespace coa4u
public override void start()
{
float coeff = 1F / jumps;
if (is2d)
point.z = transform.position.z;
if (locks != Axises.none)
lockAxises(ref point);
Vector3 start = target.gameObject.transform.position;
Vector3 end = (point - start) * coeff;
Vector3 cp1 = Vector3.up * height;


+ 0
- 1
Assets/scripts/coa4u/ActionsInterval/ActionMoveBy.cs Просмотреть файл

@@ -17,7 +17,6 @@ namespace coa4u
public ActionMoveBy(Vector2 tgtValue, float tgtDuration)
: this((Vector3)tgtValue, tgtDuration)
{
is2d = true;
}

public override ActionInstant clone()


+ 3
- 3
Assets/scripts/coa4u/ActionsInterval/ActionMoveTo.cs Просмотреть файл

@@ -18,7 +18,7 @@ namespace coa4u
public ActionMoveTo(Vector2 tgtValue, float tgtDuration)
: this((Vector3)tgtValue, tgtDuration)
{
is2d = true;
locks = Axises.z;
}

public override ActionInstant clone()
@@ -29,8 +29,8 @@ namespace coa4u
public override void start()
{
base.start();
if (is2d)
value.z = transform.position.z;
if (locks != Axises.none)
lockAxises(ref value);
path = value - transform.position;
}



+ 0
- 1
Assets/scripts/coa4u/ActionsInterval/ActionRotateBy.cs Просмотреть файл

@@ -17,7 +17,6 @@ namespace coa4u
public ActionRotateBy(float angle, float tgtDuration)
: this(new Vector3(0, 0, angle), tgtDuration)
{
is2d = true;
}

public override ActionInstant clone()


+ 3
- 1
Assets/scripts/coa4u/ActionsInterval/ActionRotateTo.cs Просмотреть файл

@@ -18,7 +18,7 @@ namespace coa4u
public ActionRotateTo(float angle, float tgtDuration)
: this(new Vector3(0, 0, angle), tgtDuration)
{
is2d = true;
locks = Axises.xy;
}

public override ActionInstant clone()
@@ -39,6 +39,8 @@ namespace coa4u
else
path[i] = t + 360 - f;
}
if (locks != Axises.none)
lockAxises(ref path);
}
public override void stepInterval(float dt)
{


+ 0
- 1
Assets/scripts/coa4u/ActionsInterval/ActionScaleBy.cs Просмотреть файл

@@ -18,7 +18,6 @@ namespace coa4u
public ActionScaleBy(Vector2 tgtValue, float tgtDuration)
: this((Vector3)tgtValue, tgtDuration)
{
is2d = true;
}

public override ActionInstant clone()


+ 3
- 3
Assets/scripts/coa4u/ActionsInterval/ActionScaleTo.cs Просмотреть файл

@@ -18,7 +18,7 @@ namespace coa4u
public ActionScaleTo(Vector2 tgtValue, float tgtDuration)
: this((Vector3)tgtValue, tgtDuration)
{
is2d = true;
locks = Axises.z;
}

public override ActionInstant clone()
@@ -29,8 +29,8 @@ namespace coa4u
public override void start()
{
base.start();
if (is2d)
value.z = transform.localScale.z;
if (locks != Axises.none)
lockAxises(ref value);
path = value - transform.localScale;
}



+ 26
- 5
Assets/scripts/coa4u/UnityComponents/Actor.cs Просмотреть файл

@@ -16,10 +16,15 @@ public class Actor : MonoBehaviour
protected Vector3 angles2prev = Vector3.zero;
protected const float coeff = Mathf.PI / 180;
protected Vector3[] initialState;
[HideInInspector]
public Transform transformCached;
[HideInInspector]
public Renderer rendererCached;
[HideInInspector]
public Mesh meshCached;
[HideInInspector]
public Vector3 skewAngles1;
[HideInInspector]
public Vector3 skewAngles2;

/// <summary>
@@ -29,8 +34,13 @@ public class Actor : MonoBehaviour
{
transformCached = gameObject.transform;
rendererCached = gameObject.renderer;
meshCached = gameObject.GetComponent<MeshFilter>().mesh;
initialState = meshCached.vertices;

Component component = gameObject.GetComponent<MeshFilter>();
if (component != null)
{
meshCached = ((MeshFilter)component).mesh;
initialState = meshCached.vertices;
}
}

/// <summary>
@@ -51,6 +61,9 @@ public class Actor : MonoBehaviour
/// </summary>
void updateSkew()
{
if (meshCached == null)
return;

Matrix4x4 m = Matrix4x4.zero;
m[0, 0] = 1;
m[1, 1] = 1;
@@ -130,13 +143,21 @@ public class Actor : MonoBehaviour
}

/// <summary>
/// Adds method to cache to speed-up
/// Adds method to cache to speed-up the ActionSendMessage.
/// </summary>
public void AddMethodToCache(MethodHolder method)
public void AddMethodToCache(Action method)
{
methodsCache.Add(method.name, method);
methodsCache.Add(method.Method.Name, new MethodHolder(method));
}

public void AddMethodToCache<T>(Action<T> method)
{
methodsCache.Add(method.Method.Name, new MethodHolder<T>(method));
}

/// <summary>
/// Adds method from cache.
/// </summary>
public void RemoveMethodFromCache(string key)
{
if (methodsCache.ContainsKey(key))


+ 2
- 2
Assets/scripts/coa4u/UnityComponents/ActorSampleActions.cs Просмотреть файл

@@ -39,8 +39,8 @@ public class ActorSampleActions : Actor
}), 5);
this.AttachAction(seq);

AddMethodToCache(new MethodHolder(msgHello));
AddMethodToCache(new MethodHolder<string>(msgHelloTo));
AddMethodToCache(msgHello);
AddMethodToCache<string>(msgHelloTo);
}

void msgHello()