-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClient.cs
More file actions
134 lines (109 loc) · 4.4 KB
/
Copy pathClient.cs
File metadata and controls
134 lines (109 loc) · 4.4 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using System;
using UnityEngine;
using Random = UnityEngine.Random;
using UnityEngine.Assertions;
using System.Collections.Generic;
using System.Reflection;
using Character.Guns;
using CommandsSystem.Commands;
using GameMode;
using Networking;
using Debug = UnityEngine.Debug;
/// <summary>
/// Класс с функциями для работы с игровым полем
/// </summary>
public class Client : MonoBehaviour
{
/// <summary>
/// Статическая ссылка на Client (синглтон)
/// </summary>
public static Client client { get; private set; }
/// <summary>
/// Рендерер следов от пуль
/// </summary>
public BulletTrailRenderer bulletTrailRenderer;
/// <summary>
/// Объект, хранящиц границу внутри которой можно создавать объекты
/// </summary>
public GameObject spawnBorder = null;
/// <summary>
/// Граница игрового поля
/// </summary>
public TrianglePolygon spawnPolygon;
/// <summary>
/// Главный персонаж
/// </summary>
public GameObject mainPlayerObj;
/// <summary>
/// Камера
/// </summary>
public GameObject cameraObj;
/// <summary>
/// Слоаврь префабов, которые можно создавать на игровом поле
/// </summary>
private Dictionary<string, GameObject> prefabs = new Dictionary<string, GameObject>();
/// <summary>
/// Список префабов, которые можно создавать на игровом поле
/// </summary>
public List<GameObject> prefabsList = new List<GameObject>();
/// <summary>
/// Инициализирует переменные
/// </summary>
private void Awake() {
client = this;
sClient.Init();
if (spawnBorder != null) {
List<Vector3> points = new List<Vector3>();
for (int i = 0; i < spawnBorder.transform.childCount; i++) {
points.Add(spawnBorder.transform.GetChild(i).transform.position);
}
spawnPolygon = new TrianglePolygon(points);
}
foreach (var prefab in prefabsList) {
prefabs.Add(prefab.name, prefab);
}
var c = new SpawnPrefabCommand("123123", Vector3.back, Quaternion.identity, 123, 4, 778);
var f = c.Serialize();
var d = SpawnPrefabCommand.Deserialize(f);
Debug.LogError("test");
Assembly.Load("Assembly-CSharp").GetType("AIController");
Debug.LogError(Type.GetType("AIController"));
Debug.Log("CLIENT starting");
}
/// <summary>
/// Удаляет объект с игрового поля
/// </summary>
/// <param name="gameObject">Объект</param>
public void RemoveObject(GameObject gameObject) {
ObjectID.RemoveObject(gameObject);
Destroy(gameObject);
}
/// <summary>
/// Создаёт объект на игровом поле
/// </summary>
/// <param name="command">Команда для создание объекта</param>
/// <returns>Созданный объект</returns>
public GameObject SpawnObject(SpawnPrefabCommand command)
{
if (!prefabs.ContainsKey(command.prefabName)) {
throw new ArgumentException($"not found prefab '{command.prefabName}' in Client.prefabs");
}
GameObject prefab = prefabs[command.prefabName];
var gameObject = Instantiate(prefab, command.position, command.rotation);
ObjectID.StoreObject(gameObject, command.id, command.owner, command.creator);
Debug.Log($"Spawned {gameObject}({gameObject.GetInstanceID()}). id: {command.id}");
return gameObject;
}
/// <summary>
/// Создаёт объект на игровом поле
/// </summary>
/// <param name="name">Название префаба</param>
/// <param name="position">Положение объекта</param>
/// <param name="rotation">Поворот объекта</param>
/// <returns>Созданный объект</returns>
public GameObject SpawnPrefab(string name, Vector3 position = new Vector3(),
Quaternion rotation = new Quaternion()) {
return Instantiate(prefabs[name], position, rotation);
}
}