@@ -21,8 +21,12 @@ MonoBehaviour:
name: KEY
isEnable: 0
isArray: 0
- type: 5
- type: 3
name: AMOUNT
isEnable: 0
isArray: 0
- type: 3
name: INCOME
isEnable: 0
isArray: 0
AccessCode:
@@ -24,6 +24,7 @@ GameObject:
- component: {fileID: 114510347953798974}
- component: {fileID: 54597078260134498}
- component: {fileID: 135576887322233682}
- component: {fileID: 108308982757886626}
m_Layer: 0
m_Name: Asteroid0
m_TagString: Untagged
@@ -38,7 +39,7 @@ Transform:
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1845277942831564}
m_LocalRotation: {x: -0.7071067, y: -0.000000061817246, z: -0.00000006181723, w: 0.7071068}
m_LocalPosition: {x: 1.004, y: 0, z: 0}
m_LocalPosition: {x: 0.162, y: 0, z: 0}
m_LocalScale: {x: 0.25, y: 0.25, z: 0.25}
m_Children: []
m_Father: {fileID: 0}
@@ -98,6 +99,42 @@ Rigidbody:
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!108 &108308982757886626
Light:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1845277942831564}
m_Enabled: 1
serializedVersion: 8
m_Type: 0
m_Color: {r: 0.7652645, g: 0.9044118, b: 0.6317583, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_CookieSize: 10
m_Shadows:
m_Type: 0
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Lightmapping: 4
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!114 &114510347953798974
MonoBehaviour:
m_ObjectHideFlags: 1
@@ -24,6 +24,7 @@ GameObject:
- component: {fileID: 114558654890564128}
- component: {fileID: 54425026842654920}
- component: {fileID: 135981014468230392}
- component: {fileID: 108771302561552922}
m_Layer: 0
m_Name: Asteroid1
m_TagString: Untagged
@@ -98,6 +99,42 @@ Rigidbody:
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!108 &108771302561552922
Light:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1728705129410262}
m_Enabled: 1
serializedVersion: 8
m_Type: 0
m_Color: {r: 0.7652645, g: 0.9044118, b: 0.6317583, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_CookieSize: 10
m_Shadows:
m_Type: 0
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Lightmapping: 4
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!114 &114558654890564128
MonoBehaviour:
m_ObjectHideFlags: 1
@@ -24,6 +24,7 @@ GameObject:
- component: {fileID: 114963414169196632}
- component: {fileID: 54064670734600404}
- component: {fileID: 135260867782827456}
- component: {fileID: 108319839372690500}
m_Layer: 0
m_Name: Asteroid2
m_TagString: Untagged
@@ -98,6 +99,42 @@ Rigidbody:
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!108 &108319839372690500
Light:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1517318921850084}
m_Enabled: 1
serializedVersion: 8
m_Type: 0
m_Color: {r: 0.7652645, g: 0.9044118, b: 0.6317583, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_CookieSize: 10
m_Shadows:
m_Type: 0
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Lightmapping: 4
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!114 &114963414169196632
MonoBehaviour:
m_ObjectHideFlags: 1
@@ -12,14 +12,18 @@ public class AsteroidObject : MonoBehaviour
private const float MaxZRotationSpeed = 50;

private Vector3 _rotationVector;
private Vector3 _forward;
private Vector3 _forwardVector;

private float _speed;

public void Show(Vector3 forward, float amount, float speed)

private void Awake()
{
_forwardVector = new Vector3(Vector3.left.x, Vector3.left.y, Vector3.left.z);
}

public void Show(float speed)
{
_speed = speed;
_forward = Vector3.forward;

_rotationVector = new Vector3(UnityEngine.Random.Range(MinXRotationSpeed, MaxXRotationSpeed),
UnityEngine.Random.Range(MinYRotationSpeed, MaxYRotationSpeed),
@@ -30,31 +34,12 @@ public void Show(Vector3 forward, float amount, float speed)

private void Update()
{
transform.position = Vector3.MoveTowards(transform.position, _forward, Time.deltaTime * _speed);
transform.position += _forwardVector * Time.deltaTime * _speed;
transform.Rotate(_rotationVector * Time.deltaTime);

//if (Vector3.Distance(transform.position, _forward) < Mathf.Epsilon)
//{
// DestroyAsteroid();
//}
}

private void DestroyAsteroid(float time = 0.0f)
{
Destroy(gameObject, time);
}

private void OnTriggerEnter(Collider col)
{
var astronaut = col.GetComponent<Astronaut>();

if (astronaut != null)
{
astronaut.Health -= 20;

Debug.Log("Astronaut hit!");

DestroyAsteroid();
}
}
}
@@ -16,15 +16,13 @@ public class AsteroidsController : MonoBehaviour

private Camera _camera;
private Asteroids _spreadsheet;
private Astronaut _astronaut;


private float _delay;

public void Init(Camera cam, Asteroids spreadsheet, Astronaut astronaut)
public void Init(Camera cam, Asteroids spreadsheet)
{
_camera = cam;
_spreadsheet = spreadsheet;
_astronaut = astronaut;
}

private void Update()
@@ -49,14 +47,13 @@ private void CreateAsteroid()

var pos = new Vector3(UnityEngine.Random.Range(-20, 20),
UnityEngine.Random.Range(-20, 20),
UnityEngine.Random.Range(_camera.transform.position.z - 30, -30));
UnityEngine.Random.Range(_camera.transform.position.z - 1, 1));

var prefab = Resources.Load<AsteroidObject>("Asteroids/Asteroid" + preset.PREFAB);

var asteroid = Instantiate(prefab, pos, Quaternion.identity, transform);
var spawnArea = _astronaut.SpawnAreas[UnityEngine.Random.Range(0, _astronaut.SpawnAreas.Count)];

asteroid.Show(spawnArea.transform.position, preset.AMOUNT, preset.SPEED);
asteroid.Show(preset.SPEED);

_asteroids.Add(asteroid);
}
@@ -63,7 +63,7 @@ public void Init(Action<int> onHealthChanged)

_onHealthChanged = onHealthChanged;

Health = 100;
Health = ParametersCounter.StartOxygen;

ParametersCounter.OnValueChanged += OnValueChanged;
}
@@ -1,15 +1,17 @@
using System;
using System.Collections.Generic;
using UnityEditor;
using System.Linq;
using UnityEngine;

public class GameController : MonoBehaviour
{
[SerializeField] private AsteroidsController _asteroidsController;
[SerializeField] private Asteroids _spreadsheet;

[SerializeField] private Astronaut _astronaut;
[SerializeField] private ScenariosController _scenariosController;

[SerializeField] private Gameplay _gameplayData;

[SerializeField] private UIController _uiController;
[SerializeField] private UICamera _uiCamera;

@@ -21,6 +23,15 @@ private void Awake()
{
ParametersCounter.Init();

ParametersCounter.StartMilitary = _gameplayData.dataArray.FirstOrDefault(x => x.KEY == "StartMilitary").AMOUNT;
ParametersCounter.StartScience = _gameplayData.dataArray.FirstOrDefault(x => x.KEY == "StartScience").AMOUNT;
ParametersCounter.StartFarming = _gameplayData.dataArray.FirstOrDefault(x => x.KEY == "StartFarming").AMOUNT;
ParametersCounter.StartReligion = _gameplayData.dataArray.FirstOrDefault(x => x.KEY == "StartReligion").AMOUNT;
ParametersCounter.StartInsurgency = _gameplayData.dataArray.FirstOrDefault(x => x.KEY == "StartInsurgency").AMOUNT;

ParametersCounter.StartOxygen = _gameplayData.dataArray.FirstOrDefault(x => x.KEY == "StartOxygen").AMOUNT;

_asteroidsController.Init(_uiCamera.Camera, _spreadsheet);
_astronaut.Init(DamageDealtHandler);
_uiController.Init();
_scenariosController.Init(_uiController);
@@ -32,11 +43,11 @@ private void Awake()

private void DamageDealtHandler(int health)
{
_scenariosController.ChangeParameter(EAffectionType.Oxygen, health, 100, 1);
_scenariosController.ChangeParameter(EAffectionType.Oxygen, health, ParametersCounter.StartOxygen, 1);

if (health <= 0)
{
Debug.LogError("Game over!");
Debug.LogWarning("<b>Game over!</b>");
}
}

@@ -67,7 +78,7 @@ private void Update()
{
var info = ParametersCounter.GetValue(affectionType);

_scenariosController.ChangeParameter(affectionType, info.CurrentCount + info.Income, ParametersCounter.GetPopulationSum(), info.Income, false);
_scenariosController.ChangeParameter(affectionType, info.CurrentCount + info.Income, affectionType == EAffectionType.Oxygen ? ParametersCounter.StartOxygen : ParametersCounter.GetPopulationSum(), info.Income, false);
}
}
}
@@ -40,6 +40,14 @@ public static class ParametersCounter
public static Action<EAffectionType, AffectionParameters> OnValueChanged;
public static bool ActiveTime;

public static int StartMilitary = 10;
public static int StartScience = 10;
public static int StartFarming = 10;
public static int StartReligion = 10;
public static int StartInsurgency = 10;

public static int StartOxygen = 100;

public static void Init()
{
_variables = new Dictionary<EAffectionType, AffectionParameters>();
@@ -13,13 +13,19 @@ public void Init(UIController uiController)
{
_uiController = uiController;

ParametersCounter.SetValue(EAffectionType.Farming, 10, 50, 1);
ParametersCounter.SetValue(EAffectionType.Military, 10, 50, 1);
ParametersCounter.SetValue(EAffectionType.Insurgency, 10, 50, 1);
ParametersCounter.SetValue(EAffectionType.Religion, 10, 50, 1);
ParametersCounter.SetValue(EAffectionType.Science, 10, 50, 1);
ParametersCounter.SetValue(EAffectionType.Oxygen, 100, 100, -1);
ParametersCounter.SetValue(EAffectionType.Population, 50, 1000, 1);
ParametersCounter.SetValue(EAffectionType.Farming, ParametersCounter.StartFarming, 50, 1);
ParametersCounter.SetValue(EAffectionType.Military, ParametersCounter.StartMilitary, 50, 1);
ParametersCounter.SetValue(EAffectionType.Insurgency, ParametersCounter.StartInsurgency, 50, 1);
ParametersCounter.SetValue(EAffectionType.Religion, ParametersCounter.StartReligion, 50, 1);
ParametersCounter.SetValue(EAffectionType.Science, ParametersCounter.StartScience, 50, 1);
ParametersCounter.SetValue(EAffectionType.Oxygen, ParametersCounter.StartOxygen, ParametersCounter.StartOxygen, -1);

ParametersCounter.SetValue(EAffectionType.Population, ParametersCounter.StartFarming
+ ParametersCounter.StartMilitary
+ ParametersCounter.StartInsurgency
+ ParametersCounter.StartReligion
+ ParametersCounter.StartReligion
+ ParametersCounter.StartScience, 1000, 1);
}

public void ChangeParameter(EAffectionType type, int value, int maxValue, int income, bool displayLog = true)
@@ -34,12 +40,12 @@ public void ChangeParameter(EAffectionType type, int value, int maxValue, int in

foreach (var scenario in _scenarios.dataArray.Where(x => !_passedEvents.Contains(x)))
{
if (scenario.EAFFECTIONTYPE == type && !_passedEvents.Contains(scenario) &&
if (scenario.EAFFECTIONTYPE == type && !_passedEvents.Contains(scenario) && !_uiController.ScenarioActive &&
(scenario.Breakpoint > 0
? value >= scenario.Breakpoint
: value <= scenario.Breakpoint))
{
Debug.Log("<color=magenta><b>Scenario.</b></color> Starting scenario with type (" + type + "). Value is ( " + value + "), breakpoint is (" + scenario.Breakpoint + ")");
Debug.Log("<color=magenta><b>Scenario.</b></color> Starting scenario with type (" + type + "). Value is (" + value + "), breakpoint is (" + scenario.Breakpoint + ")");

_uiController.BeginScenario(scenario, OnButtonClick);

@@ -13,6 +13,7 @@ public class ScenarioPanel : MonoBehaviour
[SerializeField] private Sprite _neutralSprite;
[SerializeField] private Sprite _disapprovalSprite;

[SerializeField] private Text _acceptButtonLabel;
[SerializeField] private Button _acceptButton;

private readonly List<ScenarioButton> _buttons = new List<ScenarioButton>();
@@ -33,9 +34,26 @@ public void Show(EventsData scenario, Action<int[], int[]> onClick)

_onClick = onClick;

CreateDecisionButton(EStupidAffectionType.Good, scenario);
CreateDecisionButton(EStupidAffectionType.Neutral, scenario);
CreateDecisionButton(EStupidAffectionType.Bad, scenario);
if (scenario.Gameover)
{
ShowResultActionDescription(scenario.Description);

_acceptButtonLabel.text = "END";
_acceptButton.onClick.AddListener(() =>
{
Application.Quit();

#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#endif
});
}
else
{
CreateDecisionButton(EStupidAffectionType.Good, scenario);
CreateDecisionButton(EStupidAffectionType.Neutral, scenario);
CreateDecisionButton(EStupidAffectionType.Bad, scenario);
}
}

private void CreateDecisionButton(EStupidAffectionType type, EventsData scenario)
@@ -13,6 +13,8 @@ public class UIController : MonoBehaviour

[SerializeField] private ScenarioPanel _scenarioPanel;

public bool ScenarioActive;

public void Init()
{
ParametersCounter.OnValueChanged += SetValue;
@@ -26,7 +28,19 @@ public void BeginScenario(EventsData scenario, Action<int[], int[]> onClick)
return;
}

_scenarioPanel.Show(scenario, onClick);
ScenarioActive = true;

_scenarioPanel.Show(scenario, (arg1, arg2) =>
{
onClick(arg1, arg2);

EndScenario();
});
}

private void EndScenario()
{
ScenarioActive = false;
}

private void SetValue(EAffectionType type, AffectionParameters parameters)
@@ -4,6 +4,11 @@ public class UICamera : MonoBehaviour
{
private Transform _followingTransform;

public Camera Camera
{
get { return GetComponent<Camera>(); }
}

public void Init(Astronaut astronaut)
{
_followingTransform = astronaut.transform;