~ubuntu-branches/debian/sid/astromenace/sid

« back to all changes in this revision

Viewing changes to AstroMenaceSource/Core/ParticleSystem2D/Particle2D.cpp

  • Committer: Package Import Robot
  • Author(s): Boris Pek
  • Date: 2013-04-09 02:04:25 UTC
  • Revision ID: package-import@ubuntu.com-20130409020425-a7fl9xk4diamw6di
Tags: upstream-1.3.1+repack
Import upstream version 1.3.1+repack

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/************************************************************************************
 
2
 
 
3
        AstroMenace (Hardcore 3D space shooter with spaceship upgrade possibilities)
 
4
        Copyright © 2006-2012 Michael Kurinnoy, Viewizard
 
5
 
 
6
 
 
7
        AstroMenace is free software: you can redistribute it and/or modify
 
8
        it under the terms of the GNU General Public License as published by
 
9
        the Free Software Foundation, either version 3 of the License, or
 
10
        (at your option) any later version.
 
11
 
 
12
        AstroMenace is distributed in the hope that it will be useful,
 
13
        but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
15
        GNU General Public License for more details.
 
16
 
 
17
        You should have received a copy of the GNU General Public License
 
18
        along with AstroMenace. If not, see <http://www.gnu.org/licenses/>.
 
19
 
 
20
 
 
21
        Web Site: http://www.viewizard.com/
 
22
        Project: http://sourceforge.net/projects/openastromenace/
 
23
        E-mail: viewizard@viewizard.com
 
24
 
 
25
*************************************************************************************/
 
26
 
 
27
 
 
28
#include "Particle2D.h"
 
29
 
 
30
 
 
31
 
 
32
 
 
33
 
 
34
//-----------------------------------------------------------------------------
 
35
// начальная инициализация
 
36
//-----------------------------------------------------------------------------
 
37
eParticle2D::eParticle2D()
 
38
{
 
39
        Age = 0.0f;
 
40
        Size = 1.0f;
 
41
        Color.r = 1.0f;
 
42
        Color.g = 0.0f;
 
43
        Color.b = 0.0f;
 
44
        Color.a = 0.5f;
 
45
        Next = 0;
 
46
        Prev = 0;
 
47
        NeedStop = false;
 
48
}
 
49
 
 
50
 
 
51
//-----------------------------------------------------------------------------
 
52
// деструктор частицы
 
53
//-----------------------------------------------------------------------------
 
54
eParticle2D::~eParticle2D()
 
55
{
 
56
        // тут ничего не делаем - все что нужно делаем в системе частиц
 
57
}
 
58
 
 
59
 
 
60
//-----------------------------------------------------------------------------
 
61
//      обновление информации частицы
 
62
//-----------------------------------------------------------------------------
 
63
bool eParticle2D::Update(float TimeDelta, VECTOR3D ParentLocation, bool Attractive, float AttractiveValue)
 
64
{
 
65
 
 
66
        // Если частица уже мертва, ее нужно отключить - передаем в систему эти данные
 
67
        if ( Age + TimeDelta >= Lifetime )
 
68
        {
 
69
                Age = -1.0f;
 
70
                return false;
 
71
        }
 
72
        else
 
73
        {
 
74
 
 
75
                // увеличиваем возраст частицы
 
76
                Age += TimeDelta;
 
77
 
 
78
                // перемещаем частицу на нужное значение
 
79
                Location += Velocity ^ TimeDelta;
 
80
 
 
81
                if (NeedStop)
 
82
                        Velocity -= Velocity^TimeDelta;
 
83
 
 
84
 
 
85
                // если есть притяжение системы, просчитываем воздействие
 
86
                if ( Attractive )
 
87
                {
 
88
                        VECTOR3D AttractLocation = ParentLocation;
 
89
 
 
90
                        // рассчитывае вектор взаимодействия между частицей и точкой притяжения
 
91
                        VECTOR3D AttractDir = AttractLocation - Location;
 
92
 
 
93
                        // если нужно использовать притяжения, считаем перемещение
 
94
                        if (NeedStop)
 
95
                                AttractiveValue -= AttractiveValue*TimeDelta;
 
96
 
 
97
                        AttractDir.Normalize();
 
98
                        Velocity += AttractDir ^ (AttractiveValue * TimeDelta);
 
99
 
 
100
                }
 
101
 
 
102
                // просчитываем текущий цвет частицы
 
103
                Color.r += ColorDelta.r * TimeDelta;
 
104
                Color.g += ColorDelta.g * TimeDelta;
 
105
                Color.b += ColorDelta.b * TimeDelta;
 
106
 
 
107
                // текущий размер частицы
 
108
                Size += SizeDelta * TimeDelta;
 
109
        }
 
110
 
 
111
        // если пришли сюда - значит все хорошо и частица работает
 
112
        return true;
 
113
 
 
114
}