File: curve.h

package info (click to toggle)
freespace2 24.2.0%2Brepack-3
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid
  • size: 43,740 kB
  • sloc: cpp: 595,005; ansic: 21,741; python: 1,174; sh: 457; makefile: 243; xml: 181
file content (53 lines) | stat: -rw-r--r-- 986 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#pragma once

/*
 * Copyright (C) Volition, Inc. 1999.  All rights reserved.
 *
 * All source code herein is the property of Volition, Inc. You may not sell 
 * or otherwise commercially exploit the source or things you created based on the 
 * source.
 *
*/ 


#include "math/vecmat.h"

enum class CurveInterpFunction {
	Constant,
	Linear,
	Polynomial,
	Circular,
	Curve,
};

struct curve_keyframe {
	vec2d pos;
	CurveInterpFunction interp_func;
	float param1; // degree for polynomials, integer index for curves
	float param2; // > 0 for "ease in", < 0 for "ease out" on polynomials and circular
};

class Curve {
public :
	SCP_string	name;
	SCP_vector<curve_keyframe>		keyframes;

public :
	// constructor
	Curve(SCP_string in_name);

	//Get
	float GetValue(float x_val) const;

	// Get
	float GetValueIntegrated(float x_val) const;

	//Set
	void ParseData();
};

extern SCP_vector<Curve> Curves;

extern int curve_get_by_name(const SCP_string& in_name);
extern void curves_init();