Changeset 1494


Ignore:
Timestamp:
Jun 18, 2012, 2:25:48 PM (8 years ago)
Author:
touky
Message:

Added Rotation & scale to Lolnament.
Brute-fixed all Orbital warnings.

Location:
trunk/orbital
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/orbital/Lolnament.h

    r1492 r1494  
    1313#define DEF_Z 30
    1414#define DEF_SIZE 10
    15 #define DEF_INF_BLEND 30
    16 #define DEF_INF_MAX 40
     15#define DEF_INF_BLEND 50
     16#define DEF_INF_MAX 30
    1717
    1818struct transient_infos
    1919{
    20         transient_infos(vec3 base_pos)
    21         {
    22                 m_pos_base = base_pos;
    23                 m_influence = 0.0f;
     20        transient_infos(vec3 base_pos, vec3 base_rot=vec3(0.0f, 0.0f, 0.0f), float base_scale=1.0f, vec3 base_scale_3d=vec3(1.0f, 1.0f, 1.0f))
     21                : m_final_pos(vec3(0.0f, 0.0f, 0.0f)),
     22                m_final_rot(vec3(0.0f, 0.0f, 0.0f)),
     23                m_final_scale(0.0f),
     24                m_final_scale_3d(vec3(0.0f, 0.0f, 0.0f)),
     25                m_influence(0.0f)
     26        {
     27                m_base_pos = base_pos;
     28                m_base_rot = base_rot;
     29                m_base_scale = base_scale;
     30                m_base_scale_3d = base_scale_3d;
    2431        };
    2532
    26         vec3    m_pos_base;
     33        vec3    m_base_pos;
     34        vec3    m_base_rot;
     35        float   m_base_scale;
     36        vec3    m_base_scale_3d;
    2737
    2838        float   m_influence;
    2939
    30         vec3    m_pos_final;
     40        vec3    m_final_pos;
     41        vec3    m_final_rot;
     42        float   m_final_scale;
     43        vec3    m_final_scale_3d;
     44};
     45
     46struct work_infos
     47{
     48        work_infos()
     49        {
     50                m_pos = vec3(0,0,0);
     51                m_rot = vec3(0,0,0);
     52                m_scale = 0.0f;
     53                m_scale_3d = vec3(0,0,0);
     54        }
     55
     56        vec3    m_pos;
     57        vec3    m_rot;
     58        float   m_scale;
     59        vec3    m_scale_3d;
    3160};
    3261
     
    3665struct influence_infos
    3766{
    38         influence_infos(float step, vec3 pos_offset, int method=INF_DEFAULT)
     67        influence_infos(float step, vec3 offset_pos, vec3 offset_rot, float offset_scale=0.0f, vec3 offset_scale_3d=vec3(0.0f, 0.0f, 0.0f), int method=INF_DEFAULT)
    3968        {
    4069                m_step = clamp(step, 0.0f, 1.0f);
    41                 m_pos_offset = pos_offset;
     70                m_offset_pos = offset_pos;
     71                m_offset_rot = offset_rot;
     72                m_offset_scale = offset_scale;
     73                m_offset_scale_3d = offset_scale_3d;
    4274                m_method = method;
    4375        };
     
    4577        float   m_step;
    4678        int             m_method;
    47         vec3    m_pos_offset;
     79        vec3    m_offset_pos;
     80        vec3    m_offset_rot;
     81        float   m_offset_scale;
     82        vec3    m_offset_scale_3d;
    4883};
    4984
     
    5489      : m_ready(false)
    5590    {
    56         m_ref_mesh.Compile("sc#d91 [afcb8 8 8 1]");
    57 
     91                m_ref_mesh.Compile( "[sc#f80 afcb8 6 6 1]"
     92                                                        "[sc#bbd afcb6 8 6 1]"
     93                                                        "[sc#44d afcb6 6 8 1]");
     94
     95                vec3 default_offset = vec3((float)DEF_X, (float)DEF_Y, (float)DEF_Z) * (float)DEF_SIZE * 0.5f;
    5896                for (int z=0; z < DEF_Z; z++)
    5997                {
     
    62100                                for (int x=0; x < DEF_X; x++)
    63101                                {
    64                                         m_point_list << transient_infos(vec3(x * DEF_SIZE, y * DEF_SIZE, z * DEF_SIZE) -
    65                                                                         vec3(DEF_X * DEF_SIZE * 0.5f, DEF_Y * DEF_SIZE * 0.5f, DEF_Z * DEF_SIZE * 0.5f));
     102                                        m_point_list << transient_infos(vec3((float)x, (float)y, (float)z) * (float)DEF_SIZE - default_offset, vec3(0,0,0));
    66103                                }
    67104                        }
     
    70107                debug_point_angle = 0.0f;
    71108
    72                 m_influence_list << influence_infos(0.0f, vec3(.0f,   .0f, .0f), INF_WAVE);
    73                 m_influence_list << influence_infos(0.5f, vec3(.0f, 40.0f, .0f), INF_DEFAULT);
    74                 m_influence_list << influence_infos(1.0f, vec3(.0f, 80.0f, .0f), INF_DEFAULT);
     109                m_influence_list << influence_infos(0.0f, vec3(.0f,   .0f, .0f), vec3(.0f,   .0f,   .0f), 0.0f, vec3(0.0f, 0.0f, 0.0f), INF_WAVE);
     110                m_influence_list << influence_infos(0.3f, vec3(.0f, 40.0f, .0f), vec3(.0f, 90.0f,   .0f));
     111                m_influence_list << influence_infos(0.7f, vec3(.0f, 40.0f, .0f), vec3(.0f, 90.0f,   .0f));
     112                m_influence_list << influence_infos(1.0f, vec3(.0f, 80.0f, .0f), vec3(.0f,   .0f, 90.0f), 0.0f, vec3(2.0f, 0.0f, 0.0f));
    75113    }
    76114
     
    109147                        m_point_list[i].m_influence = 0.0f;
    110148                        for (int j=0; j < m_influence_point_list.Count(); j++)
    111                                 m_point_list[i].m_influence = max(m_point_list[i].m_influence, 1.0f - min(1.0f, max(0.0f, length(m_point_list[i].m_pos_base - m_influence_point_list[j].xyz) - DEF_INF_MAX) / DEF_INF_BLEND));
     149                                m_point_list[i].m_influence = max(m_point_list[i].m_influence, 1.0f - min(1.0f, max(0.0f, length(m_point_list[i].m_base_pos - m_influence_point_list[j].xyz) - DEF_INF_MAX) / DEF_INF_BLEND));
    112150                }
    113151        }
     
    137175                        }
    138176
    139                         vec3 point_pos_a = vec3(.0f, .0f, .0f);
    140                         vec3 point_pos_b = vec3(.0f, .0f, .0f);
    141                         get_modified_point(m_influence_list[info_a], m_point_list[i], i, point_pos_a);
    142                         get_modified_point(m_influence_list[info_b], m_point_list[i], i, point_pos_b);
     177                        work_infos work_a = work_infos();
     178                        work_infos work_b = work_infos();
     179                        get_modified_point(m_influence_list[info_a], m_point_list[i], i, work_a);
     180                        get_modified_point(m_influence_list[info_b], m_point_list[i], i, work_b);
    143181
    144182                        float divider = step_b - step_a;
    145183                        divider = (divider > .0f)?((m_point_list[i].m_influence - step_a) / divider):(1.0f);
    146                         m_point_list[i].m_pos_final = point_pos_a + (point_pos_b - point_pos_a) * divider;
    147                 }
    148         }
    149 
    150         void get_modified_point(const influence_infos &src_infos, const transient_infos &src_transient, int &point_nb, vec3 &point_pos)
    151         {
    152                 point_pos = src_transient.m_pos_base;
     184
     185                        m_point_list[i].m_final_pos                     = work_a.m_pos + (work_b.m_pos - work_a.m_pos) * divider;
     186                        m_point_list[i].m_final_rot                     = work_a.m_rot + (work_b.m_rot - work_a.m_rot) * divider;
     187                        m_point_list[i].m_final_scale           = work_a.m_scale + (work_b.m_scale - work_a.m_scale) * divider;
     188                        m_point_list[i].m_final_scale_3d        = work_a.m_scale_3d + (work_b.m_scale_3d - work_a.m_scale_3d) * divider;
     189                }
     190        }
     191
     192        void get_modified_point(const influence_infos &src_infos, const transient_infos &src_transient, const int &point_nb, work_infos &dst_work)
     193        {
     194                //Base setup
     195                dst_work.m_pos          = src_transient.m_base_pos;
     196                dst_work.m_rot          = src_transient.m_base_rot;
     197                dst_work.m_scale        = src_transient.m_base_scale;
     198                dst_work.m_scale_3d = src_transient.m_base_scale_3d;
     199
     200                //Added offset via given method
    153201                switch (src_infos.m_method)
    154202                {
    155203                        case INF_WAVE:
    156204                        {
    157                                 float point_angle = wave_angle + (float)point_nb * 2.0f * M_PI * 2.0f / (DEF_X * 1.051f);
    158                                 point_pos += vec3(0.0f, (-1.0f + cos(point_angle)) * 20.0f, 0.0f);
     205                                float point_angle = wave_angle + (float)point_nb * 2.0f * (float)M_PI * 2.0f / ((float)DEF_X * 1.051f);
     206                                dst_work.m_pos += vec3(0.0f, (-1.0f + cos(point_angle)) * 20.0f, 0.0f);
     207                                //TODO : dst_work.m_rot += vec3(0,0,0);
    159208                        }
    160209                        case INF_DEFAULT:
    161210                        {
    162                                 point_pos += src_infos.m_pos_offset;
     211                                dst_work.m_pos          += src_infos.m_offset_pos;
     212                                dst_work.m_rot          += src_infos.m_offset_rot;
     213                                dst_work.m_scale        += src_infos.m_offset_scale;
     214                                dst_work.m_scale_3d += src_infos.m_offset_scale_3d;
    163215                                break;
    164216                        }
     
    176228        }
    177229
     230                m_rotation *= quat::rotate(seconds * 10.0f, vec3(0, 1, 0));
     231                mat4 main_matrix = mat4::translate(m_position) * mat4(m_rotation);
    178232                for (int i=0; i < m_point_list.Count(); i++)
    179233                {
    180                         mat4 model = mat4::translate(m_point_list[i].m_pos_final);
     234                        mat4 model = main_matrix *
     235                                mat4::translate(m_point_list[i].m_final_pos) *
     236                                mat4(quat::fromeuler_yxz(m_point_list[i].m_final_rot)) *
     237                                mat4::scale(m_point_list[i].m_final_scale_3d * m_point_list[i].m_final_scale);
    181238                        m_ref_mesh.Render(model);
    182239                }
  • trunk/orbital/orbital.cpp

    r1492 r1494  
    238238        {
    239239            float angle = atan2(updown, rightleft);
    240             angle = (int)(angle / (M_PI / 4.f) + 8.5f) * (M_PI / 4.f);
     240            angle = (int)(angle / ((float)M_PI / 4.f) + 8.5f) * ((float)M_PI / 4.f);
    241241            rightleft = cos(angle);
    242242            updown = sin(angle);
  • trunk/orbital/player.h

    r1442 r1494  
    8080        WorldEntity::TickGame(seconds);
    8181
    82         float updown = Input::GetButtonState(273 /*SDLK_UP*/)
    83                      - Input::GetButtonState(274 /*SDLK_DOWN*/);
    84         float rightleft = Input::GetButtonState(275 /*SDLK_RIGHT*/)
    85                         - Input::GetButtonState(276 /*SDLK_LEFT*/);
     82        float updown = (float)(Input::GetButtonState(273 /*SDLK_UP*/) - Input::GetButtonState(274 /*SDLK_DOWN*/));
     83        float rightleft = (float)(Input::GetButtonState(275 /*SDLK_RIGHT*/) - Input::GetButtonState(276 /*SDLK_LEFT*/));
    8684
    8785        if (!m_stick)
     
    9795        {
    9896            float angle = atan2(updown, rightleft);
    99             angle = (int)(angle / (M_PI / 4.f) + 8.5f) * (M_PI / 4.f);
     97            angle = (float)((int)(angle / ((float)M_PI / 4.f) + 8.5f) * ((float)M_PI / 4.f));
    10098            rightleft = cos(angle);
    10199            updown = sin(angle);
  • trunk/orbital/snake.h

    r1442 r1494  
    8989        if (fire && (int)m_steer != (int)(m_steer - 2.f * seconds))
    9090        {
    91             int tohit = (int)RandF(m_nodes.Count() - 2);
     91            int tohit = (int)RandF((float)m_nodes.Count() - 2.0f);
    9292            m_nodes[tohit].m4 += 150.f;
    9393            m_nodes[tohit + 1].m4 += 150.f;
     
    125125            /* The current node is dragged by the previous one */
    126126            vec3 new_delta = m_nodes[i].m1 - deltapos;
    127             float new_distance = length(new_delta);
     127            float new_distance = (float)length(new_delta);
    128128            if (new_distance > 12.f)
    129129            {
     
    167167        {
    168168            pos += m_nodes[i].m1;
    169             y_angle = (180.f / M_PI) * atan2(m_nodes[i].m1.x, m_nodes[i].m1.z);
     169            y_angle = (180.f / (float)M_PI) * atan2(m_nodes[i].m1.x, m_nodes[i].m1.z);
    170170            rot = quat::rotate(y_angle, 0.f, 1.f, 0.f)
    171171                * quat::rotate(m_nodes[i].m2, 0.f, 0.f, 1.f);
  • trunk/orbital/tank.h

    r1442 r1494  
    4444        WorldEntity::TickGame(seconds);
    4545
    46         float test = RandF(40.f, 70.f);
    47         m_rotation *= quat::rotate(seconds * test, vec3(0, 1, 0));
     46                float test = RandF(40.f, 70.f);
     47                m_rotation *= quat::rotate(seconds * test, vec3(0, 1, 0));
    4848        m_velocity = m_rotation.transform(vec3(0, 0, 1));
    4949        m_position += seconds * 80.f * m_velocity;
     
    6363        }
    6464
    65         mat4 model = mat4::translate(m_position) * mat4(m_rotation);
     65                mat4 model = mat4::translate(m_position) * mat4(m_rotation);
    6666        m_body.Render(model);
    6767
Note: See TracChangeset for help on using the changeset viewer.