1// SuperTux
2// Copyright (C) 2016 Hume2 <teratux.mail@gmail.com>
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17#include "editor/node_marker.hpp"
18
19#include "editor/editor.hpp"
20
21NodeMarker::NodeMarker (Path* path_, std::vector<Path::Node>::iterator node_iterator, size_t id_) :
22 m_path(path_),
23 m_node(node_iterator),
24 m_id(id_)
25{
26 set_pos(m_node->position - Vector(8, 8));
27}
28
29void
30NodeMarker::update_iterator()
31{
32 if (m_id >= m_path->m_nodes.size()) {
33 remove_me();
34 } else {
35 m_node = m_path->m_nodes.begin() + m_id;
36 }
37}
38
39Vector
40NodeMarker::get_point_vector() const
41{
42 std::vector<Path::Node>::iterator next_node = m_node + 1;
43 if (next_node == m_path->m_nodes.end()) {
44 if (m_path->m_mode == WalkMode::CIRCULAR) {
45 //loop to the first node
46 return m_path->m_nodes.begin()->position - m_node->position;
47 } else {
48 return Vector(0,0);
49 }
50 } else {
51 //point to the next node
52 return next_node->position - m_node->position;
53 }
54}
55
56Vector
57NodeMarker::get_offset() const
58{
59 return Vector(8, 8);
60}
61
62void
63NodeMarker::move_to(const Vector& pos)
64{
65 MovingObject::move_to(pos);
66 m_node->position = m_col.m_bbox.get_middle();
67}
68
69void
70NodeMarker::editor_delete()
71{
72 m_path->m_nodes.erase(m_node);
73 Editor::current()->update_node_iterators();
74}
75
76ObjectSettings
77NodeMarker::get_settings()
78{
79 ObjectSettings result(_("Path Node"));
80 result.add_float(_("Time"), &(m_node->time));
81 return result;
82}
83
84void
85NodeMarker::editor_update()
86{
87 set_pos(m_node->position - Vector(8, 8));
88}
89
90/* EOF */
91