Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/items/StarInspectionTool.hpp
blob: 6ce121dfdc52c69c012a4a7621952291f865922c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#pragma once

#include "StarItem.hpp"
#include "StarPointableItem.hpp"
#include "StarToolUserItem.hpp"
#include "StarEntityRendering.hpp"
#include "StarInspectableEntity.hpp"

namespace Star {

STAR_CLASS(InspectionTool);

class InspectionTool
  : public Item,
    public PointableItem,
    public ToolUserItem {
public:

  struct InspectionResult {
    String message;
    Maybe<String> objectName = {};
    Maybe<EntityId> entityId = {};
  };

  InspectionTool(Json const& config, String const& directory, Json const& parameters = JsonObject());

  ItemPtr clone() const override;

  void update(float dt, FireMode fireMode, bool shifting, HashSet<MoveControlType> const& moves) override;

  List<Drawable> drawables() const override;

  List<LightSource> lightSources() const;

  float inspectionHighlightLevel(InspectableEntityPtr const& inspectableEntity) const;

  List<InspectionResult> pullInspectionResults();

private:
  InspectionResult inspect(Vec2F const& position);

  float inspectionLevel(InspectableEntityPtr const& inspectableEntity) const;
  float pointInspectionLevel(Vec2F const& position) const;
  bool hasLineOfSight(Vec2I const& targetPosition, Set<Vec2I> const& targetSpaces = {}) const;

  String inspectionFailureText(String const& failureType, String const& species) const;

  float m_currentAngle;
  Vec2F m_currentPosition;

  String m_image;
  Vec2F m_handPosition;
  Vec2F m_lightPosition;
  Color m_lightColor;
  float m_beamWidth;
  float m_ambientFactor;

  bool m_showHighlights;
  bool m_allowScanning;

  Vec2F m_inspectionAngles;
  Vec2F m_inspectionRanges;
  float m_ambientInspectionRadius;
  size_t m_fullInspectionSpaces;
  float m_minimumInspectionLevel;

  FireMode m_lastFireMode;
  List<InspectionResult> m_inspectionResults;
};

}