// Update is called once per frame void Update() { if (Uploading) { // While uploading (pathing towards the core) check if within the core. if (transform.position.x < 10 && transform.position.x > -10 && transform.position.y < 10 && transform.position.y > -10) { if (State != DataState.BLOCKED) { scrAICore.Instance.Learn(State == DataState.INFECTED); } scrNodeMaster.Instance.DeactivateCube(Cube); Uploading = false; return; } transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.identity, Time.deltaTime * 100); } if (State == DataState.INFECTED && !infectionTransitionCompleted) { infectionTransitionTimer += Time.deltaTime; if (infectionTransitionTimer >= infectionTransitionDuration) { infectionTransitionCompleted = true; renderer.material = scrNodeMaster.Instance.MatCubeInfected; } else { // Interpolate between the colours of the materials with a unique material. float transition = infectionTransitionTimer / infectionTransitionDuration; renderer.material.SetColor("_GlowColor", Color.Lerp(StatePrev == DataState.BLOCKED ? scrNodeMaster.ColCubeBlocked : scrNodeMaster.ColCubeUninfected, scrNodeMaster.ColCubeInfected, transition)); } } if (damageTimer >= damageToDestroy) { if (Parent == null) { GameObject explosion = (GameObject)Instantiate(ExplosionPrefab, transform.position, Quaternion.identity); explosion.particleSystem.startColor = Color.Lerp(renderer.material.GetColor("_GlowColor"), Color.white, 0.5f); scrNodeMaster.Instance.DeactivateCube(Cube); } else { if (Parent.VisibleToPlayer) { GameObject explosion = (GameObject)Instantiate(ExplosionPrefab, transform.position, Quaternion.identity); explosion.particleSystem.startColor = Color.Lerp(renderer.material.GetColor("_GlowColor"), Color.white, 0.5f); } Parent.RemoveCube(Cube); } } else { if (damageTimer < 0) { damageTimer = 0; switch (State) { case DataState.BLOCKED: renderer.material = scrNodeMaster.Instance.MatCubeBlocked; break; case DataState.CLEAN: renderer.material = scrNodeMaster.Instance.MatCubeUninfected; break; case DataState.INFECTED: renderer.material = scrNodeMaster.Instance.MatCubeInfected; break; } } else if (damageTimer > 0) { damageTimer -= 2 * Time.deltaTime; renderer.material.color = Color.Lerp(Color.black, Color.white, damageTimer / damageToDestroy); } } }