void showCutcables(_StructureHit3 hitter) { var tf = transform; if (tfStartSideHub != null) { var rot = tf.rotation; foreach (var pos in sidePositions) { createCutcableInstance(tfStartSideHub, pos.start, rot, hitter); } } if (tfEndSideHub != null) { var rot = Quaternion.Inverse(tf.rotation); foreach (var pos in sidePositions) { createCutcableInstance(tfEndSideHub, pos.end, rot, hitter); } } }
public _StructurePart3 fallDownDestructionSurface(_StructureHit3 hitter, Vector3 force, Vector3 point) // 落下する物体用 { var instance = getDestructionSurfaceInstance(hitter.structure.tf); instance.fallDownDestructionSurface(force, point); return(instance); }
// 瓦解(表示用:破片メッシュのインスタンス化など)----------------------- // 子孫の fallDown() から必要に応じて呼ばれる public _StructurePart3 fallDownDestructionSurface(_StructureHit3 hitter) // ただ消える物体用 { var instance = getDestructionSurfaceInstance(hitter.structure.tf); Destroy(instance.gameObject); return(instance); }
protected override bool fallDown(_StructureHit3 hitter, Vector3 force, Vector3 point) { showCutcables(hitter); fallDownDestructionSurface(hitter); return(true); }
public void cut(_StructureHit3 hitter) { var tf = transform; if (!hitter.breakManager.isPartBroken(partId)) // breaker.structure.nearRender.isVisible( partId ) ) { //fallDownAllChildren( hitter, 0.0f, Vector3.down, tf.position + tf.forward * ( tf.localScale.z * 0.5f ) ); fallDownEntity(hitter, Vector3.down, tf.position + tf.forward * (tf.localScale.z * 0.5f)); } }
public void cutAllLinkedCablesets(_StructureHit3 hitter) { for (var link = cablesetLink; link != null; link = link.next) { if (link.cableset != null) { link.cableset.cut(hitter); } } }
protected void fallDownEntity(_StructureHit3 hitter, Vector3 force, Vector3 point) // パーツ個体のみの破壊(子パーツ破壊不要ならこれの直呼びでOK) { var isBreak = fallDown(hitter, force, point); if (isBreak) { hitter.breakAndPartVisibilityOff(this); } }
public CutcableLinkHolder3 cutcableLink; // 自分につながる断線ケーブルのチェイン protected override bool fallDown(_StructureHit3 hitter, Vector3 force, Vector3 point) { cablesetLink.cutAllLinkedCablesets(hitter); var instance = fallDownDestructionSurface(hitter, force, point); cutcableLink.reparentAllCutcables(instance); return(true); }
protected override bool fallDown(_StructureHit3 hitter, Vector3 force, Vector3 point) { //var tf = transform; //var smoke = (GameObject)Instantiate( GM.roadBreakPrefab, tf.position, GM.roadBreakPrefab.transform.rotation ); //Destroy( smoke, 1.0f ); fallDownDestructionSurface(hitter); return(true); }
// 瓦解(パーツ本体用:メッシュ破壊など) --------------------------- // 主に _Hit3 関連から呼ばれる 破壊が必要な際の窓口 // 子孫の差異に関係なく定型なので、仮想関数ではない public void fallDownAllChildren(_StructureHit3 hitter, Vector3 force, Vector3 point) // 所持する子パーツを含めて破壊する(単純に fallDownEntity() を子の分まわしている) { fallDownEntity(hitter, force, point); if (children != null) { foreach (var child in children) { if (child != null && !hitter.breakManager.isPartBroken(child.partId)) { child.fallDownEntity(hitter, force, point); } } } }
void createCutcableInstance(Transform tfHub, Vector3 pos, Quaternion rot, _StructureHit3 hitter) { //pos = structure.tf.TransformPoint( pos ); //rot *= structure.tf.rotation; var cutcableInstance = (CutCable3)Instantiate(GM.cutcablePrefab, pos, rot); cutcableInstance.transform.parent = hitter.structure.near.transform; //hitter.transform; tfHub.GetComponent <PlotPartUtlPole3>().cutcableLink.addCutCable(cutcableInstance); //tfHub.GetComponentInParent<PlotPartUtlPole3>().cutcableLink.addCutCable( cutcableInstance ); }
// 瓦解 ============================================= // ちょっとごちゃごちゃしてなくもない。後から加えた仕組みも多いし。場合分けを再検討してすっきりさせたい。 // 瓦解(継承用:子孫ごとのふるまい)-------------------------------------- // fallDownAllChildren() からパーツ個別に呼ばれる // パーツごとに異なるふるまいが必要な場合は、これを継承して記述する protected abstract bool fallDown(_StructureHit3 hitter, Vector3 force, Vector3 point);
public bool FallDown(_StructureHit3 hitter, Vector3 force, Vector3 point) { throw new System.NotImplementedException(); }
protected override bool fallDown(_StructureHit3 hitter, Vector3 force, Vector3 point) { //fallDownDestructionSurface( hitter, pressure, direction, point ); return(false); }
protected override bool fallDown(_StructureHit3 hitter, Vector3 force, Vector3 point) { fallDownDestructionSurface(hitter, force, point); return(true); }