Rigs of Rods 2023.09
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
Skidmark.h
Go to the documentation of this file.
1/*
2 This source file is part of Rigs of Rods
3 Copyright 2005-2012 Pierre-Michel Ricordel
4 Copyright 2007-2012 Thomas Fischer
5
6 For more information, see http://www.rigsofrods.org/
7
8 Rigs of Rods is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License version 3, as
10 published by the Free Software Foundation.
11
12 Rigs of Rods 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 Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21#pragma once
22
23#include "Application.h"
24
25#include <OgreMaterial.h>
26#include <OgreString.h>
27#include <OgreVector2.h>
28#include <OgreVector3.h>
29
30namespace RoR {
31
33{
34public:
35
37
38 int getTexture(Ogre::String model, Ogre::String ground, float slip, Ogre::String& texture);
39
40private:
41
43 {
44 Ogre::String ground;
45 Ogre::String texture;
46 float slipFrom;
47 float slipTo;
48 };
49
50 int ProcessSkidmarkConfLine(Ogre::StringVector args, Ogre::String model);
51
52 std::map<Ogre::String, std::vector<SkidmarkDef>> m_models;
53};
54
57
59{
60public:
61
63 Skidmark(SkidmarkConfig* config, wheel_t* m_wheel, Ogre::SceneNode* snode, int m_length = 500, int m_bucket_count = 20);
64 virtual ~Skidmark();
65
66 void reset();
67 void update(Ogre::Vector3 contact_point, int index, float slip, Ogre::String ground_model_name);
68
69private:
70
72 {
73 Ogre::ManualObject* obj;
74 Ogre::MaterialPtr material;
75 std::vector<Ogre::Vector3> points;
76 std::vector<Ogre::Real> faceSizes;
77 std::vector<Ogre::String> groundTexture;
78 Ogre::Vector3 lastPointAv;
79 int pos;
81 };
82
83 void PopSegment();
84 void LimitObjects();
85 void AddObject(Ogre::Vector3 start, Ogre::String texture);
86 void SetPointInt(unsigned short index, const Ogre::Vector3& value, Ogre::Real fsize, Ogre::String texture);
87 void AddPoint(const Ogre::Vector3& value, Ogre::Real fsize, Ogre::String texture);
88 void UpdatePoint(Ogre::Vector3 contact_point, int index, float slip, Ogre::String ground_model_name);
89
92 std::queue<SkidmarkSegment> m_objects;
95 static Ogre::Vector2 m_tex_coords[4];
99 Ogre::SceneNode* m_scene_node;
101};
102
104
105} // namespace RoR
Central state/object manager and communications hub.
< Skidmark config file parser and data container
Definition Skidmark.h:33
int ProcessSkidmarkConfLine(Ogre::StringVector args, Ogre::String model)
Definition Skidmark.cpp:71
void LoadDefaultSkidmarkDefs()
Definition Skidmark.cpp:34
std::map< Ogre::String, std::vector< SkidmarkDef > > m_models
Definition Skidmark.h:52
int getTexture(Ogre::String model, Ogre::String ground, float slip, Ogre::String &texture)
Definition Skidmark.cpp:94
Ogre::SceneNode * m_scene_node
Definition Skidmark.h:99
void AddPoint(const Ogre::Vector3 &value, Ogre::Real fsize, Ogre::String texture)
Definition Skidmark.cpp:302
float m_min_distance
Definition Skidmark.h:94
int m_bucket_count
Definition Skidmark.h:96
std::queue< SkidmarkSegment > m_objects
Definition Skidmark.h:92
void AddObject(Ogre::Vector3 start, Ogre::String texture)
Definition Skidmark.cpp:134
float m_max_distance
Definition Skidmark.h:93
static Ogre::Vector2 m_tex_coords[4]
Definition Skidmark.h:110
void SetPointInt(unsigned short index, const Ogre::Vector3 &value, Ogre::Real fsize, Ogre::String texture)
Definition Skidmark.cpp:196
static int m_instance_counter
Definition Skidmark.h:90
SkidmarkConfig * m_config
Definition Skidmark.h:100
wheel_t * m_wheel
Definition Skidmark.h:98
virtual ~Skidmark()
Definition Skidmark.cpp:129
void UpdatePoint(Ogre::Vector3 contact_point, int index, float slip, Ogre::String ground_model_name)
Definition Skidmark.cpp:205
void LimitObjects()
Definition Skidmark.cpp:188
bool m_is_dirty
Definition Skidmark.h:91
void update(Ogre::Vector3 contact_point, int index, float slip, Ogre::String ground_model_name)
Definition Skidmark.cpp:318
void PopSegment()
Definition Skidmark.cpp:177
< Also reffered to as 'bucket'
Definition Skidmark.h:72
std::vector< Ogre::String > groundTexture
Definition Skidmark.h:77
Ogre::MaterialPtr material
Definition Skidmark.h:74
std::vector< Ogre::Real > faceSizes
Definition Skidmark.h:76
std::vector< Ogre::Vector3 > points
Definition Skidmark.h:75
Ogre::ManualObject * obj
Definition Skidmark.h:73
float slipTo
Maximum slipping velocity.
Definition Skidmark.h:47
Ogre::String ground
Ground model name, see struct ground_model_t
Definition Skidmark.h:44
float slipFrom
Minimum slipping velocity.
Definition Skidmark.h:46