public override void OnSyncedUpdate(Navi navi, ChipLogic c) { c.frametimer -= Time.deltaTime; if (c.chip_anim_frame > 1) // attack is active on 3rd frame { int i = 0; while (i < affectedArea.Count) { if (!affectedArea[i].hit) // no hit from space yet, so check for hit // tests for hit and set to true if there is one so it won't check again { affectedArea[i].hit = navi.shot_handler.check_position(c.power, navi.playerNumber, c.stun, affectedArea[i].row, affectedArea[i].col, c.elem); } i++; } } if (c.frametimer <= 0) { c.frametimer = c.chipFR; if (c.chip_anim_frame < c.chip_sprite.Length - 1) // advance to next frame if not at end { c.chip_anim_frame++; foreach (SurroundTile bt in affectedArea) // update sprite of all burning tiles { bt.renderer.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; } } else { c.deactivate(navi); } } }
public override void OnSyncedUpdate(Navi navi, ChipLogic c) { c.frametimer -= Time.deltaTime; if (c.frametimer <= 0) { c.frametimer = c.chipFR; if (c.chip_anim_frame < c.chip_sprite.Length - 1) // advance to next frame if not at end { c.chip_anim_frame++; c.chip_renderObj.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; if (c.chip_anim_frame > 0) // cannon animation has 1 frame more than shoot at the front { navi.controlledSpriteSet(c.chip_anim_frame - 1); } if (c.chip_anim_frame == 2) { navi.shot_handler.check_bust(c.power, navi.playerNumber, c.stun, c.elem); // shot fired on 3rd frame } } else // animation finished { c.deactivate(navi); } } }
public override void OnSyncedUpdate(Navi navi, ChipLogic c) { if (recov_amount > 3) // HP text number increase effect (going by 3s reduces strain) { recov_amount -= 3; navi.HP += 3; } else if (recov_amount > 0) // for non divisible by 3 { navi.HP += recov_amount; recov_amount = 0; } c.frametimer -= Time.deltaTime; if (c.frametimer <= 0) { c.frametimer = c.chipFR; if (c.chip_anim_frame < c.chip_sprite.Length - 1) // advance to next frame if not at end { c.chip_anim_frame++; c.chip_renderObj.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; } else // animation finished { if (recov_amount > 0) // add any remaining chip.power to HP if animation was too short for HOT effect { navi.HP += recov_amount; recov_amount = 0; } c.deactivate(navi); } } }
public override void OnSyncedUpdate(Navi navi, ChipLogic c) { c.frametimer -= Time.deltaTime; if (!hit) // try hit { hit = navi.shot_handler.check_sword(c.power, navi.playerNumber, c.stun , System.Math.Abs(c.sword_size), (c.sword_size < 0), c.elem); } if (c.frametimer <= 0) { c.frametimer = c.chipFR; if (c.chip_anim_frame < navi.swordSprite.Length - 1) // advance to next frame if not at end { c.chip_anim_frame++; if (c.chip_renderObj != null) // chip has a sword overlay to display { c.chip_renderObj.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; } navi.controlledSpriteSet(c.chip_anim_frame); // sword effects and sword anim have same number of frames if (slash_renderer.activeInHierarchy) // animate slash effect when active { if (slash_frame < slash_eff.Length - 1) { slash_frame++; slash_renderer.GetComponent <SpriteRenderer>().sprite = slash_eff[slash_frame]; } else { slash_renderer.SetActive(false); // deactivate when animation finishes } } if (c.chip_anim_frame == 2) // attack takes place on 3rd frame { hit = false; // flag hit as false to start checking for hits // place slash effect 1 space in front of navi int target_space = (navi.myNavi()) ? navi.field_space + 1 : navi.field_space - 1; slash_renderer.transform.position = navi.field.spaces[target_space].transform.position; slash_renderer.SetActive(true); } } else // animation finished { c.deactivate(navi); } } }
public override void OnSyncedUpdate(Navi navi, ChipLogic c) { c.frametimer -= TrueSyncManager.DeltaTime.AsFloat(); if (c.frametimer <= 0) // advance frame //TODO: may need 2 frame variables for animated throw objs { c.chip_anim_frame++; c.frametimer = c.chipFR; if (c.chip_anim_frame < navi.throw_offset.Length) // throw obj still following throw anim { c.chip_renderObj.transform.position = navi.transform.position + (navi.throw_offset[c.chip_anim_frame] * navi.transform.localScale.x); } if (c.chip_anim_frame < navi.throwSprite.Length) { navi.controlledSpriteSet(c.chip_anim_frame); } else // throw animation finished { navi.throwAnim = false; navi.rate_controlled = false; } } if (c.chip_anim_frame >= navi.throw_offset.Length) // trajectory calculation { c.interrupt = false; // object has left the hand, can no longer be interrupted c.chip_renderObj.transform.SetParent(navi.field.grid[row][col].transform); //!!! WARNING BAD MATH AHEAD !!! float x = c.chip_renderObj.transform.position.x; x += (5.7f * TrueSyncManager.DeltaTime.AsFloat()) * ((navi.myNavi())?2:-2); //float x = (-0.18f + (5.5f * TrueSyncManager.DeltaTime.AsFloat())); float y = c.chip_renderObj.transform.position.y; y += (4.6f * TrueSyncManager.DeltaTime.AsFloat()) - 0.027f * Math.Abs(navi.field.grid[0][col].transform.position.x - c.chip_renderObj.transform.position.x); //c.chip_renderObj.transform.position = new Vector3(x, ((-0.112f * (x * x)) + (0.399f * x) + (navi.field.grid[navi.row][0].transform.position.y))); c.chip_renderObj.transform.position = new Vector3(x, y); if ((Math.Abs(c.chip_renderObj.transform.position.x - c.chip_renderObj.transform.parent.position.x)) >= 12) { c.deactivate(navi); } } }
public override void OnSyncedUpdate(Navi navi, ChipLogic c) { if (tower_renderers.Count == 0) // first update: add first tower { int target_column = (navi.myNavi()) ? navi.column + 1 : navi.column - 1; // moves right if my navi, moves left if opponents nextTower(navi, c, navi.row, target_column); // generate first tower in navi's row } List <int> trim = new List <int>(); // flag towers in list for destroying bool add_tower = false; // set to true when a tower hits its trigger frame and needs to create a new tower c.frametimer -= Time.deltaTime; for (int i = 0; i < tower_renderers.Count; i++) // iterate through all towers on field { Tower tower = tower_data[i]; if (!tower.hit) // no hit from tower yet, so check for hit // tests for hit and set to true if there is one so it won't check again { tower.hit = (navi.shot_handler.check_position(c.power, navi.playerNumber, c.stun, tower.row, tower.col, c.elem)); } if (c.frametimer <= 0) { if (tower.frame < c.chip_sprite.Length - 1) // advance to next frame if not at end { tower.frame++; tower_renderers[i].GetComponent <SpriteRenderer>().sprite = c.chip_sprite[tower.frame]; // next tower to be made if (tower.frame == trigger_frame) { add_tower = true; } } else // reached end of animation { trim.Add(i); // adjust later for reverse animations } } } // done iterating through towers if (c.frametimer <= 0) // frame timer needs to be reset after all towers have been iterated through to allow simultaneous animation { c.frametimer = c.chipFR; } // destroy finished towers and remove from lists foreach (int t in trim) { UnityEngine.Object.Destroy(tower_renderers[t]); tower_renderers.RemoveAt(t); tower_data.RemoveAt(t); } if (add_tower) // trigger frame hit while iterating, so a new tower must be made { if ((next_col >= 0) && (next_col <= 5)) // tower hasn't reached field's edge { nextTower(navi, c, next_row, next_col); } } if (tower_renderers.Count == 0) // all towers are finished { c.deactivate(navi); } }
public override void OnSyncedUpdate(Navi navi, ChipLogic c) { c.frametimer -= TrueSyncManager.DeltaTime.AsFloat(); if (duration > 0) { if (c.chip_anim_frame >= hit_frame) // attack is active so check for hit and update duration { if (!hit_row) { navi.field.grid[current_row][target_column].indanger = true; hit_row = (navi.shot_handler.check_position( c.power, navi.playerNumber, c.stun, current_row, target_column, c.elem)); } duration -= TrueSyncManager.DeltaTime; } if (c.frametimer <= 0) { c.frametimer = c.chipFR; if (c.chip_anim_frame < c.chip_sprite.Length - 1) // advance to next frame if not at end { if (loop_up) { c.chip_anim_frame++; } else { c.chip_anim_frame--; } c.chip_renderObj.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; if (c.chip_anim_frame <= loop_frame) { loop_up = true; } } else // reverse looped section of sprite { c.chip_anim_frame--; loop_up = false; c.chip_renderObj.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; } } if (c.chip_anim_frame >= hit_frame) // Sprite moves while attack active { if (move_up) { c.chip_renderObj.transform.position = Vector3.MoveTowards(c.chip_renderObj.transform.position, target_top.position, move_speed * TrueSyncManager.DeltaTime.AsFloat()); } else { c.chip_renderObj.transform.position = Vector3.MoveTowards(c.chip_renderObj.transform.position, target_bottom.position, move_speed * TrueSyncManager.DeltaTime.AsFloat()); } if (c.chip_renderObj.transform.position == target_top.position) { move_up = false; } else if (c.chip_renderObj.transform.position == target_bottom.position) { move_up = true; } float to_bottom = Vector3.Distance(target_bottom.position, c.chip_renderObj.transform.position); float to_top = Vector3.Distance(target_top.position, c.chip_renderObj.transform.position); // determine row being hit int oldrow = current_row; if (to_top > 3 * to_bottom) { current_row = 2; } else if (to_bottom > 3 * to_top) { current_row = 0; } else { current_row = 1; } if (oldrow != current_row) // row changed so check for new hit { hit_row = false; navi.field.grid[oldrow][target_column].indanger = false; } } } else // attack of chip finished { navi.field.grid[current_row][target_column].indanger = false; if (c.frametimer <= 0) { c.frametimer = c.chipFR; if (c.chip_anim_frame > 0) // rewind anim to begining { c.chip_anim_frame--; c.chip_renderObj.GetComponent <SpriteRenderer>().sprite = c.chip_sprite[c.chip_anim_frame]; } else // animation has finished { c.deactivate(navi); } } } }