Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
7d71cf06
Commit
7d71cf06
authored
Sep 23, 2015
by
Viktor Lidholt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adds documentation and cleans up code
parent
4bc4c978
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
83 additions
and
7 deletions
+83
-7
action_spline.dart
packages/flutter_sprites/lib/action_spline.dart
+12
-0
constraint.dart
packages/flutter_sprites/lib/constraint.dart
+39
-0
label.dart
packages/flutter_sprites/lib/label.dart
+5
-1
node.dart
packages/flutter_sprites/lib/node.dart
+5
-0
util.dart
packages/flutter_sprites/lib/util.dart
+22
-6
No files found.
packages/flutter_sprites/lib/action_spline.dart
View file @
7d71cf06
...
...
@@ -17,13 +17,25 @@ Point _cardinalSplineAt(Point p0, Point p1, Point p2, Point p3, double tension,
return
new
Point
(
x
,
y
);
}
/// The spline action is used to animate a point along a spline definied by
/// a set of points.
class
ActionSpline
extends
ActionInterval
{
/// Creates a new spline action with a set of points. The [setter] is a
/// callback for setting the positions, [points] define the spline, and
/// [duration] is the time for the action to complete. Optionally a [curve]
/// can be used for easing.
ActionSpline
(
this
.
setter
,
this
.
points
,
double
duration
,
[
Curve
curve
])
:
super
(
duration
,
curve
)
{
_dt
=
1.0
/
(
points
.
length
-
1.0
);
}
/// The callback used to update a point when the action is run.
final
Function
setter
;
/// A list of points that define the spline.
final
List
<
Point
>
points
;
/// The tension of the spline, defines the roundness of the curve.
double
tension
=
0.5
;
double
_dt
;
...
...
packages/flutter_sprites/lib/constraint.dart
View file @
7d71cf06
part of
skysprites
;
/// A constraint limits or otherwise controls a [Node]'s properties, such as
/// position or rotation. Add a list of constraints by setting the [Node]'s
/// constraints property.
///
/// Constrains are applied after the update calls are
/// completed. They can also be applied at any time by calling a [Node]'s
/// [applyConstraints] method. It's possible to create custom constraints by
/// overriding this class and implementing the [constrain] method.
abstract
class
Constraint
{
/// Called before the node's update method is called. This method can be
/// overridden to create setup work that needs to happen before the the
/// node is updated, e.g. to calculate the node's speed.
void
preUpdate
(
Node
node
,
double
dt
)
{
}
/// Called after update is complete, if the constraint has been added to a
/// [Node]. Override this method to modify the node's property according to
/// the constraint.
void
constrain
(
Node
node
,
double
dt
);
}
...
...
@@ -19,10 +33,17 @@ double _dampenRotation(double src, double dst, double dampening) {
return
src
+
delta
;
}
/// A [Constraint] that aligns a nodes rotation to its movement.
class
ConstraintRotationToMovement
extends
Constraint
{
/// Creates a new constraint the aligns a nodes rotation to its movement
/// vector. A [baseRotation] and [dampening] can optionally be set.
ConstraintRotationToMovement
({
this
.
baseRotation
:
0.0
,
this
.
dampening
});
/// The filter factor used when constraining the rotation of the node. Valid
/// values are in the range 0.0 to 1.0
final
double
dampening
;
/// The base rotation will be added to a the movement vectors rotation.
final
double
baseRotation
;
Point
_lastPosition
;
...
...
@@ -43,11 +64,23 @@ class ConstraintRotationToMovement extends Constraint {
}
}
/// A [Constraint] that rotates a node to point towards another node. The target
/// node is allowed to have a different parent, but they must be in the same
/// [SpriteBox].
class
ConstraintRotationToNode
extends
Constraint
{
/// Creates a new [Constraint] that rotates the node towards the [targetNode].
/// The [baseRotation] will be added to the nodes rotation, and [dampening]
/// can be used to ease the rotation.
ConstraintRotationToNode
(
this
.
targetNode
,
{
this
.
baseRotation
:
0.0
,
this
.
dampening
});
/// The node to rotate towards.
final
Node
targetNode
;
/// The base rotation will be added after the target rotation is calculated.
final
double
baseRotation
;
/// The filter factor used when constraining the rotation of the node. Valid
/// values are in the range 0.0 to 1.0
final
double
dampening
;
void
constrain
(
Node
node
,
double
dt
)
{
...
...
@@ -71,7 +104,13 @@ class ConstraintRotationToNode extends Constraint {
}
}
/// A [Constraint] that constrains the position of a node to equal the position
/// of another node, optionally with dampening.
class
ConstraintPositionToNode
extends
Constraint
{
/// Creates a new [Constraint] that constrains the poistion of a node to be
/// equal to the position of the [targetNode]. Optionally an [offset] can
/// be used and also [dampening]. The targetNode doesn't need to have the
/// same parent, but they need to be added to the same [SpriteBox].
ConstraintPositionToNode
(
this
.
targetNode
,
{
this
.
dampening
,
this
.
offset
:
Offset
.
zero
});
final
Node
targetNode
;
...
...
packages/flutter_sprites/lib/label.dart
View file @
7d71cf06
part of
skysprites
;
/// Labels are used to display a string of text in a the node tree. To align
/// the label, the textAlign property of teh [TextStyle] can be set.
class
Label
extends
Node
{
/// Creates a new Label with the provided [_text] and [_textStyle].
Label
(
this
.
_text
,
[
this
.
_textStyle
])
{
if
(
_textStyle
==
null
)
{
_textStyle
=
new
TextStyle
();
...
...
@@ -10,6 +12,7 @@ class Label extends Node {
String
_text
;
/// The text being drawn by the label.
String
get
text
=>
_text
;
set
text
(
String
text
)
{
...
...
@@ -19,6 +22,7 @@ class Label extends Node {
TextStyle
_textStyle
;
/// The style to draw the text in.
TextStyle
get
textStyle
=>
_textStyle
;
set
textStyle
(
TextStyle
textStyle
)
{
...
...
packages/flutter_sprites/lib/node.dart
View file @
7d71cf06
...
...
@@ -78,6 +78,8 @@ class Node {
List
<
Constraint
>
_constraints
;
/// A [List] of [Constraint]s that will be applied to the node.
/// The constraints are applied after the [update] method has been called.
List
<
Constraint
>
get
constraints
{
return
_constraints
;
}
...
...
@@ -87,6 +89,9 @@ class Node {
if
(
_spriteBox
!=
null
)
_spriteBox
.
_constrainedNodes
=
null
;
}
/// Called to apply the [constraints] to the node. Normally, this method is
/// called automatically by the [SpriteBox], but it can be called manually
/// if the constraints need to be applied immediately.
void
applyConstraints
(
double
dt
)
{
if
(
_constraints
==
null
)
return
;
...
...
packages/flutter_sprites/lib/util.dart
View file @
7d71cf06
...
...
@@ -5,18 +5,22 @@ math.Random _random = new math.Random();
// Random methods
/// Returns a random [double] in the range of 0.0 to 1.0.
double
randomDouble
(
)
{
return
_random
.
nextDouble
();
}
/// Returns a random [double] in the range of -1.0 to 1.0.
double
randomSignedDouble
(
)
{
return
_random
.
nextDouble
()
*
2.0
-
1.0
;
}
/// Returns a random [int] from 0 to max - 1.
int
randomInt
(
int
max
)
{
return
_random
.
nextInt
(
max
);
}
/// Returns either [true] or [false] in a most random fashion.
bool
randomBool
(
)
{
return
_random
.
nextDouble
()
<
0.5
;
}
...
...
@@ -54,9 +58,13 @@ class _Atan2Constants {
final
Float64List
nnx
=
new
Float64List
(
size
+
1
);
}
/// Provides convenience methods for calculations often carried out in graphics.
/// Some of the methods are returning approximations.
class
GameMath
{
static
final
_Atan2Constants
_atan2
=
new
_Atan2Constants
();
/// Returns the angle of two vector components. The result is less acurate
/// than the standard atan2 function in the math package.
static
double
atan2
(
double
y
,
double
x
)
{
if
(
x
>=
0
)
{
if
(
y
>=
0
)
{
...
...
@@ -85,7 +93,9 @@ class GameMath {
}
}
static
double
pointQuickDist
(
Point
a
,
Point
b
)
{
/// Approximates the distance between two points. The returned value can be
/// up to 6% wrong in the worst case.
static
double
distanceBetweenPoints
(
Point
a
,
Point
b
)
{
double
dx
=
a
.
x
-
b
.
x
;
double
dy
=
a
.
y
-
b
.
y
;
if
(
dx
<
0.0
)
dx
=
-
dx
;
...
...
@@ -98,20 +108,26 @@ class GameMath {
}
}
/// Interpolates a [double] between [a] and [b] according to the
/// [filterFactor], which should be in the range of 0.0 to 1.0.
static
double
filter
(
double
a
,
double
b
,
double
filterFactor
)
{
return
(
a
*
(
1
-
filterFactor
))
+
b
*
filterFactor
;
}
/// Interpolates a [Point] between [a] and [b] according to the
/// [filterFactor], which should be in the range of 0.0 to 1.0.
static
Point
filterPoint
(
Point
a
,
Point
b
,
double
filterFactor
)
{
return
new
Point
(
filter
(
a
.
x
,
b
.
x
,
filterFactor
),
filter
(
a
.
y
,
b
.
y
,
filterFactor
));
}
static
Point
lineIntersection
(
Point
p
,
Point
p2
,
Point
q
,
Point
q2
)
{
/// Returns the intersection between two line segmentss defined by p0, p1 and
/// q0, q1. If the lines are not intersecting null is returned.
static
Point
lineIntersection
(
Point
p0
,
Point
p1
,
Point
q0
,
Point
q1
)
{
double
epsilon
=
1
e
-
10
;
Vector2
r
=
new
Vector2
(
p
2
.
x
-
p
.
x
,
p2
.
y
-
p
.
y
);
Vector2
s
=
new
Vector2
(
q
2
.
x
-
q
.
x
,
q2
.
y
-
q
.
y
);
Vector2
qp
=
new
Vector2
(
q
.
x
-
p
.
x
,
q
.
y
-
p
.
y
);
Vector2
r
=
new
Vector2
(
p
1
.
x
-
p0
.
x
,
p1
.
y
-
p0
.
y
);
Vector2
s
=
new
Vector2
(
q
1
.
x
-
q0
.
x
,
q1
.
y
-
q0
.
y
);
Vector2
qp
=
new
Vector2
(
q
0
.
x
-
p0
.
x
,
q0
.
y
-
p0
.
y
);
double
rxs
=
cross2
(
r
,
s
);
...
...
@@ -124,7 +140,7 @@ class GameMath {
double
u
=
cross2
(
qp
,
r
)
/
rxs
;
if
((
0.0
<=
t
&&
t
<=
1.0
)
&&
(
0.0
<=
u
&&
u
<=
1.0
))
{
return
new
Point
(
p
.
x
+
t
*
r
.
x
,
p
.
y
+
t
*
r
.
y
);
return
new
Point
(
p
0
.
x
+
t
*
r
.
x
,
p0
.
y
+
t
*
r
.
y
);
}
// No intersection between the lines
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment