Ignore:
Timestamp:
Jul 1, 2012, 1:39:19 PM (8 years ago)
Author:
touky
Message:

Added worldentity registration support.
Character now walks around.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/games/ToukyDemo/UserReactiveObject.h

    r1526 r1548  
    99#define __USERREACTIVEOBJECT_H__
    1010
    11 #define DEF_X 30
     11#define DEF_X 12
    1212#define DEF_Y 1
    13 #define DEF_Z 30
     13#define DEF_Z 12
    1414#define DEF_SIZE 10
    1515#define DEF_INF_BLEND 50
     
    203203    char const *GetName() { return "<UserReactiveObject>"; }
    204204
     205        virtual bool InfluenceEntityRegistration(bool IsRegistering, WorldEntity *RegEntity)
     206        {
     207                for (int i = 0; i < m_influencing_entities.Count(); ++i)
     208                {
     209                        if (!m_influencing_entities[i])
     210                                m_influencing_entities.Remove(i--);
     211                        else if (m_influencing_entities[i] == RegEntity)
     212                        {
     213                                if (IsRegistering)
     214                                        return false;
     215                                else
     216                                {
     217                                        m_influencing_entities.Remove(i--);
     218                                        Ticker::Unref(RegEntity);
     219                                        return true;
     220                                }
     221                        }
     222                }
     223
     224                m_influencing_entities << RegEntity;
     225                Ticker::Ref(RegEntity);
     226
     227                return true;
     228        }
     229
    205230protected:
    206231    virtual void TickGame(float seconds)
     
    208233        WorldEntity::TickGame(seconds);
    209234
     235                m_rotation *= quat::rotate(seconds * 10.0f, vec3(0, 1, 0));
     236                LocalToWorld = mat4::translate(m_position) * mat4(m_rotation);
     237
    210238                m_influence_point_list.Empty();
    211239
     
    218246                        debug_point_angle -= M_PI * 2.0f;
    219247
     248                for (int i = 0; i < m_influencing_entities.Count(); ++i)
     249                {
     250                        if (m_influencing_entities[i])
     251                        {
     252                                mat4 LocalPos = inverse(LocalToWorld) * mat4::translate(m_influencing_entities[i]->m_position);
     253                                m_influence_point_list << influencing_point_infos(BLD_SPHERE, LocalPos.v3.xyz, 1.0f);
     254                        }
     255                }
     256
    220257                //m_influence_point_list << influencing_point_infos(BLD_SPHERE, vec3(lol::cos(debug_point_angle) * DEF_X, 0, lol::sin(debug_point_angle) * DEF_Z) * DEF_SIZE * 0.3f, 1.0f);
    221                 m_influence_point_list << influencing_point_infos(BLD_SQUARE, vec3(-lol::cos(debug_point_angle) * DEF_X, 0, -lol::sin(debug_point_angle) * DEF_Z) * DEF_SIZE * 0.3f, 1.0f);
     258                //m_influence_point_list << influencing_point_infos(BLD_SQUARE, vec3(-lol::cos(debug_point_angle) * DEF_X, 0, -lol::sin(debug_point_angle) * DEF_Z) * DEF_SIZE * 0.3f, 1.0f);
    222259
    223260                ComputeInfluenceValues();
     
    371408        }
    372409
    373                 m_rotation *= quat::rotate(seconds * 10.0f, vec3(0, 1, 0));
    374                 mat4 main_matrix = mat4::translate(m_position) * mat4(m_rotation);
    375410                for (int i=0; i < m_point_list.Count(); i++)
    376411                {
    377                         mat4 model = main_matrix *
     412                        mat4 model = LocalToWorld *
    378413                                mat4::translate(m_point_list[i].m_final_pos) *
    379414                                mat4(quat::fromeuler_yxz(m_point_list[i].m_final_rot)) *
     
    385420private:
    386421        //mesh used to render UserReactiveObject
    387     EasyMesh m_ref_mesh;
     422    EasyMesh                                            m_ref_mesh;
    388423        //List of Pos/Rot/Etc... currently applied to the UserReactiveObject's meshes.
    389         Array<transient_infos> m_point_list;
     424        Array<transient_infos>                  m_point_list;
    390425        //List of influence steps
    391         Array<influence_infos> m_influence_list;
     426        Array<influence_infos>                  m_influence_list;
    392427        //List of currently influencing points
    393         Array<influencing_point_infos> m_influence_point_list;
    394 
    395         float wave_angle;
    396         float debug_point_angle;
    397     bool m_ready;
     428        Array<influencing_point_infos>  m_influence_point_list;
     429        //List of currently influencing entities (converted in m_influence_point_list at each frame).
     430        Array<WorldEntity*>                             m_influencing_entities;
     431
     432        float                                                   wave_angle;
     433        float                                                   debug_point_angle;
     434        mat4                                                    LocalToWorld;
     435    bool                                                        m_ready;
    398436};
    399437
Note: See TracChangeset for help on using the changeset viewer.