- using Godot;
- using System;
-
- /// <summary>
- /// 该类为 node 节点通用扩展函数类
- /// </summary>
- public static class NodeExtend
- {
-
- public static ThrowNode StartThrow(this Node2D node, Vector2 size, Vector2 start, float startHeight, float direction, float xSpeed, float ySpeed, float rotate)
- {
- return StartThrow<ThrowNode>(node, size, start, startHeight, direction, xSpeed, ySpeed, rotate);
- }
-
- public static T StartThrow<T>(this Node2D node, Vector2 size, Vector2 start, float startHeight, float direction, float xSpeed, float ySpeed, float rotate) where T : ThrowNode
- {
- return StartThrow<T>(node, size, start, startHeight, direction, xSpeed, ySpeed, rotate, null);
- }
-
- public static ThrowNode StartThrow(this Node2D node, Vector2 size, Vector2 start, float startHeight, float direction, float xSpeed, float ySpeed, float rotate, Sprite shadowTarget)
- {
- return StartThrow<ThrowNode>(node, size, start, startHeight, direction, xSpeed, ySpeed, rotate, shadowTarget);
- }
-
- public static T StartThrow<T>(this Node2D node, Vector2 size, Vector2 start, float startHeight, float direction, float xSpeed, float ySpeed, float rotate, Sprite shadowTarget) where T : ThrowNode
- {
- ThrowNode throwNode = node.GetParentOrNull<ThrowNode>();
- T inst;
- if (throwNode == null)
- {
- inst = Activator.CreateInstance<T>();
- }
- else if (throwNode is T)
- {
- inst = throwNode as T;
- }
- else
- {
- throwNode.StopThrow();
- inst = Activator.CreateInstance<T>();
- }
- inst.StartThrow(size, start, startHeight, direction, xSpeed, ySpeed, rotate, node, shadowTarget);
- return inst;
- }
-
- /// <summary>
- /// 将一个节点扔到地上, 并设置显示的阴影, 函数返回根据该节点创建的 ThrowNode 节点
- /// </summary>
- public static ThrowNode PutDown(this ActivityObject node)
- {
- //return StartThrow(node, Vector2.Zero, node.Position, 0, 0, 0, 0, 0, shadowTarget);
- RoomManager.Current.ObjectRoot.AddChild(node);
- return null;
- }
-
- /// <summary>
- /// 拾起一个 node 节点, 返回是否拾起成功
- /// </summary>
- public static bool Pickup(this Node2D node)
- {
- ThrowNode parent = node.GetParentOrNull<ThrowNode>();
- if (parent != null)
- {
- parent.StopThrow();
- return true;
- }
- return false;
- }
-
- /// <summary>
- /// 尝试将一个node2d节点转换成一个 ActivityObject 类
- /// </summary>
- public static ActivityObject AsActivityObject(this Node2D node2d)
- {
- if (node2d is ActivityObject p)
- {
- return p;
- }
- var parent = node2d.GetParent();
- if (parent != null && parent is ActivityObject p2)
- {
- return p2;
- }
- return null;
- }
-
- public static T StartThrow<T>(this ActivityObject node, Vector2 size, Vector2 start, float startHeight, float direction, float xSpeed, float ySpeed, float rotate) where T : ThrowComponent
- {
- T throwNode = node.GetComponent<T>();
- if (throwNode == null)
- {
- throwNode = Activator.CreateInstance<T>();
- node.AddComponent(throwNode);
- }
- else
- {
- throwNode.StopThrow();
- }
- throwNode.StartThrow(size, start, startHeight, direction, xSpeed, ySpeed, rotate);
- return throwNode;
- }
- }